annotate url.c @ 899:f51b1ad62410

*** empty log message ***
author gabucino
date Mon, 28 May 2001 19:16:06 +0000
parents e350849ff400
children ede5785faa53
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
1 #include <string.h>
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
2 #include <stdlib.h>
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
3 #include <stdio.h>
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
4
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
5 #include "url.h"
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
6
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
7 URL_t*
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
8 set_url(char* url) {
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
9 int pos1, pos2;
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
10 URL_t* Curl;
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
11 char *ptr1, *ptr2;
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
12
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
13 // Create the URL container
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
14 Curl = (URL_t*)malloc(sizeof(URL_t));
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
15 if( Curl==NULL ) {
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
16 printf("Memory allocation failed!\n");
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
17 exit(1);
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
18 }
840
9141234715a2 Added initialisation of URL pointers.
bertrand
parents: 833
diff changeset
19 // Initialisation of the URL container members
9141234715a2 Added initialisation of URL pointers.
bertrand
parents: 833
diff changeset
20 Curl->url = NULL;
9141234715a2 Added initialisation of URL pointers.
bertrand
parents: 833
diff changeset
21 Curl->protocol = NULL;
9141234715a2 Added initialisation of URL pointers.
bertrand
parents: 833
diff changeset
22 Curl->hostname = NULL;
9141234715a2 Added initialisation of URL pointers.
bertrand
parents: 833
diff changeset
23 Curl->file = NULL;
9141234715a2 Added initialisation of URL pointers.
bertrand
parents: 833
diff changeset
24 Curl->port = 0;
9141234715a2 Added initialisation of URL pointers.
bertrand
parents: 833
diff changeset
25
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
26 // Copy the url in the URL container
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
27 Curl->url = (char*)malloc(strlen(url)+1);
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
28 if( Curl->url==NULL ) {
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
29 printf("Memory allocation failed!\n");
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
30 exit(1);
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
31 }
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
32 strcpy(Curl->url, url);
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
33
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
34 // extract the protocol
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
35 ptr1 = strstr(url, "://");
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
36 if( ptr1==NULL ) {
840
9141234715a2 Added initialisation of URL pointers.
bertrand
parents: 833
diff changeset
37 printf("Malformed URL or not an URL!\n");
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
38 return NULL;
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
39 }
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
40 pos1 = ptr1-url;
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
41 Curl->protocol = (char*)malloc(pos1+1);
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
42 strncpy(Curl->protocol, url, pos1);
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
43 Curl->protocol[pos1] = '\0';
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
44
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
45 // look if the port is given
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
46 ptr2 = strstr(ptr1+3, ":");
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
47 if( ptr2==NULL ) {
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
48 // No port is given
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
49 // Look if a path is given
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
50 ptr2 = strstr(ptr1+3, "/");
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
51 if( ptr2==NULL ) {
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
52 // No path/filename
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
53 // So we have an URL like http://www.hostname.com
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
54 pos2 = strlen(url);
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
55 } else {
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
56 // We have an URL like http://www.hostname.com/file.txt
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
57 pos2 = ptr2-url;
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
58 }
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
59 } else {
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
60 // We have an URL beginning like http://www.hostname.com:1212
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
61 // Get the port number
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
62 Curl->port = atoi(ptr2+1);
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
63 pos2 = ptr2-url;
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
64 }
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
65 // copy the hostname in the URL container
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
66 Curl->hostname = (char*)malloc(strlen(url)+1);
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
67 if( Curl->hostname==NULL ) {
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
68 printf("Memory allocation failed!\n");
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
69 exit(1);
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
70 }
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
71 strncpy(Curl->hostname, ptr1+3, pos2-pos1-3);
840
9141234715a2 Added initialisation of URL pointers.
bertrand
parents: 833
diff changeset
72 Curl->hostname[pos2-pos1-3] = '\0';
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
73
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
74 // Look if a path is given
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
75 ptr2 = strstr(ptr1+3, "/");
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
76 if( ptr2!=NULL ) {
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
77 // A path/filename is given
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
78 // check if it's not a trailing '/'
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
79 if( strlen(ptr2)>1 ) {
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
80 // copy the path/filename in the URL container
869
e350849ff400 Url given without a filename/path get the filename/path '/'
bertrand
parents: 840
diff changeset
81 Curl->file = (char*)malloc(strlen(ptr2)+1);
840
9141234715a2 Added initialisation of URL pointers.
bertrand
parents: 833
diff changeset
82 if( Curl->file==NULL ) {
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
83 printf("Memory allocation failed!\n");
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
84 exit(1);
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
85 }
869
e350849ff400 Url given without a filename/path get the filename/path '/'
bertrand
parents: 840
diff changeset
86 Curl->file[0]='/';
e350849ff400 Url given without a filename/path get the filename/path '/'
bertrand
parents: 840
diff changeset
87 strcpy(Curl->file+1, ptr2+1);
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
88 }
869
e350849ff400 Url given without a filename/path get the filename/path '/'
bertrand
parents: 840
diff changeset
89 }
e350849ff400 Url given without a filename/path get the filename/path '/'
bertrand
parents: 840
diff changeset
90 // Check if a filenme was given or set else set it with '/'
e350849ff400 Url given without a filename/path get the filename/path '/'
bertrand
parents: 840
diff changeset
91 if( Curl->file==NULL ) {
e350849ff400 Url given without a filename/path get the filename/path '/'
bertrand
parents: 840
diff changeset
92 Curl->file = (char*)malloc(2);
e350849ff400 Url given without a filename/path get the filename/path '/'
bertrand
parents: 840
diff changeset
93 if( Curl->file==NULL ) {
e350849ff400 Url given without a filename/path get the filename/path '/'
bertrand
parents: 840
diff changeset
94 printf("Memory allocation failed!\n");
e350849ff400 Url given without a filename/path get the filename/path '/'
bertrand
parents: 840
diff changeset
95 exit(1);
e350849ff400 Url given without a filename/path get the filename/path '/'
bertrand
parents: 840
diff changeset
96 }
e350849ff400 Url given without a filename/path get the filename/path '/'
bertrand
parents: 840
diff changeset
97 strcpy(Curl->file, "/");
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
98 }
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
99
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
100 return Curl;
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
101 }
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
102
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
103 void
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
104 free_url(URL_t* url) {
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
105 if(url) return;
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
106 if(url->url) free(url->url);
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
107 if(url->protocol) free(url->protocol);
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
108 if(url->hostname) free(url->hostname);
840
9141234715a2 Added initialisation of URL pointers.
bertrand
parents: 833
diff changeset
109 if(url->file) free(url->file);
833
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
110 free(url);
b8cecdc0c67f Starting implementation of ASF network streaming.
bertrand
parents:
diff changeset
111 }