aboutsummaryrefslogtreecommitdiffstats
path: root/camel/url-util.c
diff options
context:
space:
mode:
Diffstat (limited to 'camel/url-util.c')
-rw-r--r--camel/url-util.c405
1 files changed, 0 insertions, 405 deletions
diff --git a/camel/url-util.c b/camel/url-util.c
deleted file mode 100644
index 1b784385f5..0000000000
--- a/camel/url-util.c
+++ /dev/null
@@ -1,405 +0,0 @@
-/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
-/* url-util.c : utility functions to parse URLs */
-
-
-/*
- * Copyright (C) 1999 Bertrand Guiheneuf <Bertrand.Guiheneuf@inria.fr>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- */
-
-
-
-/*
- Here we deal with URL following the general scheme:
- protocol://user:password@host:port/name
- where name is a path-like string (ie dir1/dir2/....)
- See rfc1738 for the complete description of
- Uniform Ressource Locators
-
- Bertrand. */
-/*
- XXX TODO: recover the words between #'s or ?'s after the path */
-
-
-#include "url-util.h"
-
-/* general item finder */
-/* it begins the search at position @position in @url,
- returns true when the item is found, amd set position after the item */
-typedef gboolean find_item_func(GString *url, GString **item, guint *position, gboolean *error);
-
-/* used to find one item (protocol, then user .... */
-typedef struct {
- char *item_name; /* item name : for debug only */
- GString **item_value; /* where the item value will go */
- find_item_func *find_func; /* item finder */
-} FindStepStruct;
-
-static gboolean find_protocol(GString *url, GString **item, guint *position, gboolean *error);
-static gboolean find_user(GString *url, GString **item, guint *position, gboolean *error);
-static gboolean find_passwd(GString *url, GString **item, guint *position, gboolean *error);
-static gboolean find_host(GString *url, GString **item, guint *position, gboolean *error);
-static gboolean find_port(GString *url, GString **item, guint *position, gboolean *error);
-static gboolean find_path(GString *url, GString **item, guint *position, gboolean *error);
-
-
-
-/**
- * new_g_url: create an Gurl object from a string
- * @url_string: The string containing the URL to scan
- *
- * This routine takes a GString and parses it as an
- * URL of the form:
- * protocol://user:password@host:port/path
- * there is no test on the values. For example,
- * "port" can be a string, not only a number !
- * The Gurl structure fields ar filled with
- * the scan results. When a member of the
- * general URL can not be found, the corresponding
- * Gurl member is NULL
- *
- * Return value: a Gurl structure containng the URL items.
- **/
-Gurl *g_url_new(GString* url_string)
-{
- Gurl *g_url;
-
- GString *protocol;
- GString *user;
- GString *passwd;
- GString *host;
- GString *port;
- GString *path;
-
- guint position=0;
- gboolean error;
- gboolean found;
- guint i;
-
- g_url = g_new(Gurl,1);
-
-#define NB_STEP_URL 6
- {
- FindStepStruct step[NB_STEP_URL] = {
- { "protocol", &(g_url->protocol), find_protocol},
- { "user", &(g_url->user), find_user},
- { "password", &(g_url->passwd), find_passwd},
- { "host", &(g_url->host), find_host},
- { "port", &(g_url->port), find_port},
- { "path", &(g_url->path), find_path}
- };
-
- for (i=0; i<NB_STEP_URL; i++) {
- found = step[i].find_func(url_string,
- step[i].item_value,
- &position,
- &error);
- }
- }
-
- return g_url;
-}
-
-
-
-
-
-/** So, yes, I must admit there would have been more elegant
- ways to do this, but it works, and quite well :) */
-
-
-static gboolean
-find_protocol(GString *url, GString **item, guint *position, gboolean *error)
-{
-
- guint i;
- gchar *str_url;
- gint len_url;
- gchar *str_protocol;
-
- str_url = url->str;
- len_url = url->len;
-
- *item = NULL;
- *error = FALSE;
- i=*position;
-
- /* find a ':' */
- while ( (i<len_url) && (str_url[i] != ':') ) i++;
-
- if (i==len_url) return FALSE;
- i++;
-
- /* check if it is followed by a "//" */
- if ((i<len_url) && (str_url[i++] == '/'))
- if ((i<len_url) && (str_url[i++] == '/'))
- {
-
- str_protocol = g_strndup(str_url, i-3);
- *item = g_string_new(str_protocol);
- *position=i;
- return TRUE;
- }
-
- return FALSE;
-}
-
-
-
-
-static gboolean
-find_user(GString *url, GString **item, guint *position, gboolean *error)
-{
- guint i;
- guint at_pos;
-
- gchar *str_url;
- gint len_url;
- gchar *str_user;
-
- str_url = url->str;
- len_url = url->len;
-
- *item = NULL;
- i=*position;
-
-
- /* find a '@' */
- while ((i<len_url) && (str_url[i] != '@')) i++;
-
- if (i==len_url) return FALSE;
- at_pos = i;
- i = *position;
-
- /* find a ':' */
- while ( (i<at_pos) && (str_url[i] != ':') ) i++;
-
- /* now if i has not been incremented at all, there is no user */
- if (i == *position) {
- (*position)++;
- return FALSE;
- }
-
- str_user = g_strndup(str_url+ *position, i - *position);
- *item = g_string_new(str_user);
- if (i<at_pos) *position=i+1; /* there was a ':', skip it */
- else *position=i;
-
- return TRUE;
-}
-
-static gboolean
-find_passwd(GString *url, GString **item, guint *position, gboolean *error)
-{
- guint i;
-
- gchar *str_url;
- gint len_url;
- gchar *str_passwd;
-
- str_url = url->str;
- len_url = url->len;
-
- *item = NULL;
- i=*position;
-
-
- /* find a '@' */
- while ((i<len_url) && (str_url[i] != '@')) i++;
-
- if (i==len_url) return FALSE;
- /*i has not been incremented at all, there is no passwd */
- if (i == *position) {
- *position = i+1;
- return FALSE;
- }
-
- str_passwd = g_strndup(str_url+ *position, i - *position);
- *item = g_string_new(str_passwd);
- *position=i+1; /* skip it the '@' */
-
- return TRUE;
-}
-
-
-
-static gboolean
-find_host(GString *url, GString **item, guint *position, gboolean *error)
-{
- guint i;
- guint slash_pos;
-
- gchar *str_url;
- gint len_url;
- gchar *str_host;
-
- str_url = url->str;
- len_url = url->len;
-
- *item = NULL;
- i=*position;
-
-
- /* find a '/' */
- while ((i<len_url) && (str_url[i] != '/')) i++;
-
- slash_pos = i;
- i = *position;
-
- /* find a ':' */
- while ( (i<slash_pos) && (str_url[i] != ':') ) i++;
-
- /* at this point if i has not been incremented at all,
- there is no host */
- if (i == *position) {
- (*position)++;
- return FALSE;
- }
-
- str_host = g_strndup(str_url+ *position, i - *position);
- *item = g_string_new(str_host);
- if (i<slash_pos) *position=i+1; /* there was a ':', skip it */
- else *position=i;
-
- return TRUE;
-}
-
-
-static gboolean
-find_port(GString *url, GString **item, guint *position, gboolean *error)
-{
- guint i;
- guint slash_pos;
-
- gchar *str_url;
- gint len_url;
- gchar *str_port;
-
- str_url = url->str;
- len_url = url->len;
-
- *item = NULL;
- i=*position;
-
-
- /* find a '/' */
- while ((i<len_url) && (str_url[i] != '/')) i++;
-
- slash_pos = i;
- i = *position;
-
- /* find a ':' */
- while ( (i<slash_pos) && (str_url[i] != ':') ) i++;
-
- /* at this point if i has not been incremented at all,
- there is no port */
- if (i == *position) return FALSE;
-
- str_port = g_strndup(str_url+ *position, i - *position);
- *item = g_string_new(str_port);
- *position = i;
- return TRUE;
-}
-
-
-static gboolean
-find_path(GString *url, GString **item, guint *position, gboolean *error)
-{
- guint i;
-
- gchar *str_url;
- gint len_url;
- gchar *str_path;
-
- str_url = url->str;
- len_url = url->len;
-
- *item = NULL;
- i=*position;
-
-
- /* find a '#' */
- while ((i<len_url) && (str_url[i] != '#') && (str_url[i] != '?')) i++;
-
- /*i has not been incremented at all, there is no path */
- if (i == *position) return FALSE;
-
- str_path = g_strndup(str_url+ *position, i - *position);
- *item = g_string_new(str_path);
- *position=i;
-
-
- return TRUE;
-}
-
-
-/* to tests this file :
- gcc -o test_url_util `glib-config --cflags` -DTEST_URL_UTIL url-util.c `glib-config --libs`
- ./test_url_util URL
-*/
-#ifdef TEST_URL_UTIL
-
-
-
-int
-main (int argc, char **argv)
-{
-
- GString *url;
- GString *protocol;
- GString *user;
- GString *passwd;
- GString *host;
- GString *port;
- GString *path;
- guint position=0;
- gboolean error;
- gboolean found;
- guint i;
- guint i_pos;
-
-#define NB_STEP_TEST 6
- FindStepStruct test_step[NB_STEP_TEST] = {
- { "protocol", &protocol, find_protocol},
- { "user", &user, find_user},
- { "password", &passwd, find_passwd},
- { "host", &host, find_host},
- { "port", &port, find_port},
- { "path", &path, find_path}
- };
- url = g_string_new(argv[1]);
- printf("URL to test : %s\n\n", url->str);
- for (i=0; i<NB_STEP_TEST; i++) {
- found = test_step[i].find_func(url,
- test_step[i].item_value,
- &position,
- &error);
- if (found) {
- printf("\t\t\t\t** %s found : %s\n",
- test_step[i].item_name,
- (*test_step[i].item_value)->str);
- } else printf("** %s not found in URL\n", test_step[i].item_name);
- printf("next item position:\n");
- printf("%s\n", url->str);
- for(i_pos=0; i_pos<position; i_pos++) printf(" ");
- printf("^\n");
-
- }
-
-}
-
-#endif /* TEST_URL_UTIL */