Moved parse_url() into libcitadel; I will need it for
[citadel.git] / libcitadel / lib / tools.c
index 2077a514b6d0c3b482879117609b1cb25d237cac..60168fe91e0ca0cb3cd8c21cc38d775623b43515 100644 (file)
@@ -1031,3 +1031,60 @@ void convert_spaces_to_underscores(char *str)
        }
 }
 
+
+/* 
+ * Parse a URL into host, port number, and resource identifier.
+ * (This is used by various functions which might need to fetch web pages.)
+ */
+int parse_url(char *url, char *hostname, int *port, char *identifier)
+{
+       char protocol[1024];
+       char scratch[1024];
+       char *ptr = NULL;
+       char *nptr = NULL;
+       
+       strcpy(scratch, url);
+       ptr = (char *)strchr(scratch, ':');
+       if (!ptr) {
+               return(1);      /* no protocol specified */
+       }
+
+       strcpy(ptr, "");
+       strcpy(protocol, scratch);
+       if (strcmp(protocol, "http")) {
+               return(2);      /* not HTTP */
+       }
+
+       strcpy(scratch, url);
+       ptr = (char *) strstr(scratch, "//");
+       if (!ptr) {
+               return(3);      /* no server specified */
+       }
+       ptr += 2;
+
+       strcpy(hostname, ptr);
+       nptr = (char *)strchr(ptr, ':');
+       if (!nptr) {
+               *port = 80;     /* default */
+               nptr = (char *)strchr(hostname, '/');
+       }
+       else {
+               sscanf(nptr, ":%d", port);
+               nptr = (char *)strchr(hostname, ':');
+       }
+
+       if (nptr) {
+               *nptr = '\0';
+       }
+
+       nptr = (char *)strchr(ptr, '/');
+       
+       if (!nptr) {
+               return(4);      /* no url specified */
+       }
+       
+       strcpy(identifier, nptr);
+       return(0);
+}
+
+