annotate Plugins/Input/wma/libffwma/uri.c @ 1458:f12d7e208b43 trunk

[svn] Update FSF address in copyright notices. Update autotools templates.
author chainsaw
date Wed, 02 Aug 2006 15:44:07 -0700
parents 93c0af9bb521
children 705d4c089fce
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1410
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
1 /* GNet - Networking library
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
2 * Copyright (C) 2000-2003 David Helder, David Bolcsfoldi, Eric Williams
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
3 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
4 * This library is free software; you can redistribute it and/or
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
5 * modify it under the terms of the GNU Library General Public
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
6 * License as published by the Free Software Foundation; either
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
7 * version 2 of the License, or (at your option) any later version.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
8 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
9 * This library is distributed in the hope that it will be useful,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
12 * Library General Public License for more details.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
13 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
14 * You should have received a copy of the GNU Library General Public
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
15 * License along with this library; if not, write to the
1458
f12d7e208b43 [svn] Update FSF address in copyright notices. Update autotools templates.
chainsaw
parents: 1410
diff changeset
16 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
1410
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
17 * Boston, MA 02111-1307, USA.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
18 */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
19
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
20 /* FIXME: #include "gnet-private.h" */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
21 #include <glib.h>
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
22 #include <string.h>
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
23 #include <malloc.h>
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
24 #include <ctype.h>
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
25
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
26 #include "uri.h"
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
27 #include <string.h>
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
28
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
29 static void field_unescape (char *str);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
30 static char* field_escape (char* str, unsigned char mask);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
31
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
32 #define USERINFO_ESCAPE_MASK 0x01
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
33 #define PATH_ESCAPE_MASK 0x02
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
34 #define QUERY_ESCAPE_MASK 0x04
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
35 #define FRAGMENT_ESCAPE_MASK 0x08
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
36
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
37 /* #define FALSE 0 */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
38 /* #define TRUE (!FALSE) */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
39
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
40 static unsigned char neednt_escape_table[] =
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
41 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
42 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
43 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
44 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
45 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
46 0x00, 0x0f, 0x00, 0x00, 0x0f, 0x00, 0x0f, 0x0f,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
47 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0e,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
48 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
49 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x00, 0x0c,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
50 0x0e, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
51 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
52 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
53 0x0f, 0x0f, 0x0f, 0x00, 0x0f, 0x00, 0x00, 0x0f,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
54 0x00, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
55 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
56 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
57 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
58 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
59 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
60 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
61 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
62 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
63 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
64 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
65 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
66 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
67 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
68 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
69 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
70 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
71 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
72 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
73 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
74 };
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
75
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
76
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
77 /*
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
78 Perl code to generate above table:
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
79
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
80 #!/usr/bin/perl
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
81
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
82 $ok = "abcdefghijklmnopqrstuvwxyz" .
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
83 "ABCDEFGHIJKLMNOPQRSTUVWXYZ" .
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
84 "0123456789" .
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
85 "-_.!~*'()";
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
86 $userinfo_ok = ';:&=+\$,';
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
87 $path_ok = ':\@&=+\$,;/';
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
88 $query_ok = ';/?:\@&=+\$,';
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
89 $fragment_ok = ';/?:\@&=+\$,';
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
90
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
91 for ($i = 0; $i < 32; $i++)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
92 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
93 print " ";
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
94 for ($j = 0; $j < 8; $j++)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
95 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
96 $num = 0;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
97 $letter = chr(($i * 8) + $j);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
98
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
99 $num |= 0b0001 if (index($userinfo_ok, $letter) != -1);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
100 $num |= 0b0010 if (index($path_ok, $letter) != -1);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
101 $num |= 0b0100 if (index($query_ok, $letter) != -1);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
102 $num |= 0b1000 if (index($fragment_ok, $letter) != -1);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
103 $num |= 0b1111 if (index($ok, $letter) != -1);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
104
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
105 printf "0x%02x, ", $num;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
106 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
107 print "\n";
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
108 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
109 */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
110
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
111
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
112 /* our own ISSPACE. ANSI isspace is local dependent */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
113 #define ISSPACE(C) (((C) >= 9 && (C) <= 13) || (C) == ' ')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
114
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
115
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
116 static int split_user_passwd(const char* in, char** user, char** passwd)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
117 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
118 char *tmp = strdup(in);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
119
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
120 if(!tmp)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
121 return 0;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
122 *passwd = strchr(tmp, ':');
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
123 if(!(*passwd))
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
124 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
125 free(tmp);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
126 return 0;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
127 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
128 *((*passwd)++) = '\0'; // don't you love C? :)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
129
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
130 *user = strdup(tmp);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
131 if(!*user)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
132 return 0;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
133 *passwd = strdup(*passwd);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
134 if(!*passwd)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
135 return 0;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
136
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
137 free(tmp);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
138 return 1;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
139 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
140
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
141 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
142 * gnet_uri_new
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
143 * @uri: URI string
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
144 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
145 * Creates a #GURI from a string. Empty fields are set to NULL. The
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
146 * parser does not validate the URI -- it will accept some malformed
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
147 * URI. URIs are usually in the form
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
148 * scheme://userinfo@hostname:port/path?query#fragment
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
149 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
150 * URIs created from user input are typically unescaped. URIs
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
151 * created from machine input (e.g. received over the internet) are
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
152 * typically escaped.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
153 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
154 * Returns: a new #GURI, or NULL if there was a failure.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
155 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
156 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
157 GURI*
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
158 gnet_uri_new (const char* uri)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
159 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
160 GURI* guri = NULL;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
161 const char* p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
162 const char* temp;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
163
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
164 g_return_val_if_fail (uri, NULL);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
165
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
166 /* Skip initial whitespace */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
167 p = uri;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
168 while (*p && ISSPACE((int)*p))
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
169 ++p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
170 if (!*p) /* Error if it's just a string of space */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
171 return NULL;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
172
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
173 guri = g_new0 (GURI, 1);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
174
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
175 /* Scheme */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
176 temp = p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
177 while (*p && *p != ':' && *p != '/' && *p != '?' && *p != '#')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
178 ++p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
179 if (*p == ':')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
180 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
181 guri->scheme = g_strndup (temp, p - temp);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
182 ++p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
183 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
184 else /* This char is NUL, /, ?, or # */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
185 p = temp;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
186
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
187 /* Authority */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
188 if (*p == '/' && p[1] == '/')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
189 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
190 char *userinfo;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
191 p += 2;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
192
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
193 /* Userinfo */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
194 temp = p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
195 while (*p && *p != '@' && *p != '/' ) /* Look for @ or / */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
196 ++p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
197 if (*p == '@') /* Found userinfo */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
198 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
199 userinfo = g_strndup (temp, p - temp);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
200 if(!split_user_passwd(userinfo, &guri->user, &guri->passwd))
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
201 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
202 free(userinfo);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
203 goto error;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
204 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
205 free(userinfo);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
206 ++p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
207 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
208 else
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
209 p = temp;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
210
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
211 /* Hostname */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
212
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
213 /* Check for IPv6 canonical hostname in brackets */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
214 if (*p == '[')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
215 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
216 p++; /* Skip [ */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
217 temp = p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
218 while (*p && *p != ']') ++p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
219 if ((p - temp) == 0)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
220 goto error;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
221 guri->hostname = g_strndup (temp, p - temp);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
222 if (*p)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
223 p++; /* Skip ] (if there) */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
224 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
225 else
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
226 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
227 temp = p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
228 while (*p && *p != '/' && *p != '?' && *p != '#' && *p != ':') ++p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
229 if ((p - temp) == 0)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
230 goto error;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
231 guri->hostname = g_strndup (temp, p - temp);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
232 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
233
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
234 /* Port */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
235 if (*p == ':')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
236 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
237 for (++p; isdigit((int)*p); ++p)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
238 guri->port = guri->port * 10 + (*p - '0');
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
239 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
240
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
241 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
242
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
243 /* Path (we are liberal and won't check if it starts with /) */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
244 temp = p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
245 while (*p && *p != '?' && *p != '#')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
246 ++p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
247 if (p != temp)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
248 guri->path = g_strndup(temp, p - temp);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
249
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
250 /* Query */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
251 if (*p == '?')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
252 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
253 temp = p + 1;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
254 while (*p && *p != '#')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
255 ++p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
256 guri->query = g_strndup (temp, p - temp);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
257 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
258
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
259 /* Fragment */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
260 if (*p == '#')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
261 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
262 ++p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
263 guri->fragment = g_strdup (p);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
264 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
265
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
266 return guri;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
267
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
268 error:
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
269 gnet_uri_delete (guri);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
270 return NULL;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
271 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
272
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
273
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
274 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
275 * gnet_uri_new_fields
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
276 * @scheme: scheme
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
277 * @hostname: host name
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
278 * @port: port
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
279 * @path: path
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
280 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
281 * Creates a #GURI from the fields. This function uses the most
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
282 * common fields. Use gnet_uri_new_fields_all() to specify all
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
283 * fields.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
284 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
285 * Returns: a new #GURI.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
286 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
287 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
288 GURI*
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
289 gnet_uri_new_fields (const char* scheme, const char* hostname,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
290 const gint port, const char* path)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
291 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
292 GURI* uri = NULL;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
293
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
294 uri = g_new0 (GURI, 1);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
295 if (scheme) uri->scheme = g_strdup (scheme);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
296 if (hostname) uri->hostname = g_strdup (hostname);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
297 uri->port = port;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
298 if (path) uri->path = g_strdup (path);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
299
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
300 return uri;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
301 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
302
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
303
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
304 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
305 * gnet_uri_new_fields_all
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
306 * @scheme: scheme
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
307 * @userinfo: user info
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
308 * @hostname: host name
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
309 * @port: port
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
310 * @path: path
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
311 * @query: query
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
312 * @fragment: fragment
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
313 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
314 * Creates a #GURI from all fields.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
315 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
316 * Returns: a new #GURI.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
317 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
318 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
319 GURI*
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
320 gnet_uri_new_fields_all (const char* scheme, const char* user,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
321 const char* passwd, const char* hostname,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
322 const gint port, const char* path,
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
323 const char* query, const char* fragment)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
324 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
325 GURI* uri = NULL;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
326
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
327 uri = g_new0 (GURI, 1);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
328 if (scheme) uri->scheme = g_strdup (scheme);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
329 if (user) uri->user = g_strdup (user);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
330 if (passwd) uri->passwd = g_strdup (passwd);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
331 if (hostname) uri->hostname = g_strdup (hostname);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
332 uri->port = port;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
333 if (path) uri->path = g_strdup (path);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
334 if (query) uri->query = g_strdup (query);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
335 if (fragment) uri->fragment = g_strdup (fragment);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
336
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
337 return uri;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
338 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
339
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
340
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
341 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
342 * gnet_uri_clone:
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
343 * @uri: a #GURI
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
344 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
345 * Copies a #GURI.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
346 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
347 * Returns: a copy of @uri.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
348 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
349 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
350 GURI*
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
351 gnet_uri_clone (const GURI* uri)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
352 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
353 GURI* uri2;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
354
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
355 g_return_val_if_fail (uri, NULL);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
356
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
357 uri2 = g_new0 (GURI, 1);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
358 uri2->scheme = g_strdup (uri->scheme);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
359 uri2->user = g_strdup (uri->user);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
360 uri2->passwd = g_strdup (uri->passwd);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
361 uri2->hostname = g_strdup (uri->hostname);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
362 uri2->port = uri->port;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
363 uri2->path = g_strdup (uri->path);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
364 uri2->query = g_strdup (uri->query);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
365 uri2->fragment = g_strdup (uri->fragment);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
366
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
367 return uri2;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
368 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
369
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
370
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
371 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
372 * gnet_uri_delete:
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
373 * @uri: a #GURI
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
374 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
375 * Deletes a #GURI.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
376 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
377 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
378 void
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
379 gnet_uri_delete (GURI* uri)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
380 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
381 if (uri)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
382 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
383 g_free (uri->scheme);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
384 g_free (uri->user);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
385 g_free (uri->passwd);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
386 g_free (uri->hostname);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
387 g_free (uri->path);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
388 g_free (uri->query);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
389 g_free (uri->fragment);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
390 g_free (uri);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
391 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
392 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
393
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
394
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
395
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
396
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
397 #define SAFESTRCMP(A,B) (((A)&&(B))?(strcmp((A),(B))):((A)||(B)))
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
398
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
399 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
400 * gnet_uri_equal
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
401 * @p1: a #GURI
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
402 * @p2: another #GURI
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
403 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
404 * Compares two #GURI's for equality.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
405 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
406 * Returns: TRUE if they are equal; FALSE otherwise.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
407 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
408 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
409 int
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
410 gnet_uri_equal (gconstpointer p1, gconstpointer p2)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
411 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
412 const GURI* uri1 = (const GURI*) p1;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
413 const GURI* uri2 = (const GURI*) p2;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
414
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
415 g_return_val_if_fail (uri1, FALSE);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
416 g_return_val_if_fail (uri2, FALSE);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
417
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
418 if (uri1->port == uri2->port &&
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
419 !SAFESTRCMP(uri1->scheme, uri2->scheme) &&
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
420 !SAFESTRCMP(uri1->user, uri2->user) &&
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
421 !SAFESTRCMP(uri1->passwd, uri2->passwd) &&
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
422 !SAFESTRCMP(uri1->hostname, uri2->hostname) &&
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
423 !SAFESTRCMP(uri1->path, uri2->path) &&
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
424 !SAFESTRCMP(uri1->query, uri2->query) &&
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
425 !SAFESTRCMP(uri1->fragment, uri2->fragment))
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
426 return TRUE;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
427
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
428 return FALSE;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
429 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
430
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
431
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
432 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
433 * gnet_uri_hash
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
434 * @p: a #GURI
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
435 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
436 * Creates a hash code for @p for use with GHashTable.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
437 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
438 * Returns: hash code for @p.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
439 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
440 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
441 guint
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
442 gnet_uri_hash (gconstpointer p)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
443 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
444 const GURI* uri = (const GURI*) p;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
445 guint h = 0;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
446
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
447 g_return_val_if_fail (uri, 0);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
448
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
449 if (uri->scheme) h = g_str_hash (uri->scheme);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
450 if (uri->user) h ^= g_str_hash (uri->user);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
451 if (uri->passwd) h ^= g_str_hash (uri->passwd);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
452 if (uri->hostname) h ^= g_str_hash (uri->hostname);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
453 h ^= uri->port;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
454 if (uri->path) h ^= g_str_hash (uri->path);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
455 if (uri->query) h ^= g_str_hash (uri->query);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
456 if (uri->fragment) h ^= g_str_hash (uri->fragment);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
457
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
458 return h;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
459 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
460
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
461
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
462 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
463 * gnet_uri_escape
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
464 * @uri: a #GURI
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
465 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
466 * Escapes the fields in a #GURI. Network protocols use escaped
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
467 * URIs. People use unescaped URIs.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
468 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
469 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
470 void
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
471 gnet_uri_escape (GURI* uri)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
472 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
473 g_return_if_fail (uri);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
474
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
475 uri->user = field_escape (uri->user, USERINFO_ESCAPE_MASK);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
476 uri->passwd = field_escape (uri->passwd, USERINFO_ESCAPE_MASK);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
477 uri->path = field_escape (uri->path, PATH_ESCAPE_MASK);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
478 uri->query = field_escape (uri->query, QUERY_ESCAPE_MASK);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
479 uri->fragment = field_escape (uri->fragment, FRAGMENT_ESCAPE_MASK);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
480 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
481
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
482
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
483 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
484 * gnet_uri_unescape
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
485 * @uri: a #GURI
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
486 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
487 * Unescapes the fields in the URI. Network protocols use escaped
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
488 * URIs. People use unescaped URIs.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
489 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
490 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
491 void
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
492 gnet_uri_unescape (GURI* uri)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
493 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
494 g_return_if_fail (uri);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
495
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
496 if (uri->user)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
497 field_unescape (uri->user);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
498 if (uri->passwd)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
499 field_unescape (uri->passwd);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
500 if (uri->path)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
501 field_unescape (uri->path);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
502 if (uri->query)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
503 field_unescape (uri->query);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
504 if (uri->fragment)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
505 field_unescape (uri->fragment);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
506 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
507
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
508
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
509 static char*
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
510 field_escape (char* str, unsigned char mask)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
511 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
512 gint len;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
513 gint i;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
514 int must_escape = FALSE;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
515 char* dst;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
516 gint j;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
517
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
518 if (str == NULL)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
519 return NULL;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
520
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
521 /* Roughly calculate buffer size */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
522 len = 0;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
523 for (i = 0; str[i]; i++)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
524 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
525 if (neednt_escape_table[(guint) str[i]] & mask)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
526 len++;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
527 else
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
528 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
529 len += 3;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
530 must_escape = TRUE;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
531 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
532 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
533
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
534 /* Don't escape if unnecessary */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
535 if (must_escape == FALSE)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
536 return str;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
537
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
538 /* Allocate buffer */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
539 dst = (char*) g_malloc(len + 1);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
540
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
541 /* Copy */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
542 for (i = j = 0; str[i]; i++, j++)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
543 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
544 /* Unescaped character */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
545 if (neednt_escape_table[(guint) str[i]] & mask)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
546 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
547 dst[j] = str[i];
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
548 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
549
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
550 /* Escaped character */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
551 else
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
552 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
553 dst[j] = '%';
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
554
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
555 if (((str[i] & 0xf0) >> 4) < 10)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
556 dst[j+1] = ((str[i] & 0xf0) >> 4) + '0';
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
557 else
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
558 dst[j+1] = ((str[i] & 0xf0) >> 4) + 'a' - 10;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
559
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
560 if ((str[i] & 0x0f) < 10)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
561 dst[j+2] = (str[i] & 0x0f) + '0';
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
562 else
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
563 dst[j+2] = (str[i] & 0x0f) + 'a' - 10;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
564
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
565 j += 2; /* and j is incremented in loop too */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
566 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
567 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
568 dst[j] = '\0';
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
569
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
570 g_free (str);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
571 return dst;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
572 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
573
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
574
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
575
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
576 static void
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
577 field_unescape (char* s)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
578 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
579 char* src;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
580 char* dst;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
581
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
582 for (src = dst = s; *src; ++src, ++dst)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
583 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
584 if (src[0] == '%' && src[1] != '\0' && src[2] != '\0')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
585 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
586 gint high, low;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
587
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
588 if ('a' <= src[1] && src[1] <= 'f')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
589 high = src[1] - 'a' + 10;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
590 else if ('A' <= src[1] && src[1] <= 'F')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
591 high = src[1] - 'A' + 10;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
592 else if ('0' <= src[1] && src[1] <= '9')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
593 high = src[1] - '0';
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
594 else /* malformed */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
595 goto regular_copy;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
596
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
597 if ('a' <= src[2] && src[2] <= 'f')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
598 low = src[2] - 'a' + 10;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
599 else if ('A' <= src[2] && src[2] <= 'F')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
600 low = src[2] - 'A' + 10;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
601 else if ('0' <= src[2] && src[2] <= '9')
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
602 low = src[2] - '0';
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
603 else /* malformed */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
604 goto regular_copy;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
605
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
606 *dst = (char)((high << 4) + low);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
607 src += 2;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
608 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
609 else
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
610 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
611 regular_copy:
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
612 *dst = *src;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
613 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
614 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
615
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
616 *dst = '\0';
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
617 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
618
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
619
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
620
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
621 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
622 * gnet_uri_get_string
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
623 * @uri: a #GURI
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
624 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
625 * Gets a string representation of a #GURI. This function does not
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
626 * escape or unescape the fields first. Call gnet_uri_escape() or
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
627 * gnet_uri_unescape first if necessary.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
628 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
629 * Returns: a string.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
630 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
631 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
632 char*
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
633 gnet_uri_get_string (const GURI* uri)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
634 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
635 char* rv = NULL;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
636 GString* buffer = NULL;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
637
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
638 g_return_val_if_fail (uri, NULL);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
639
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
640 buffer = g_string_sized_new (16);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
641
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
642 if (uri->scheme)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
643 g_string_sprintfa (buffer, "%s:", uri->scheme);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
644
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
645 if (uri->user || uri->passwd || uri->hostname || uri->port)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
646 g_string_append (buffer, "//");
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
647
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
648 if (uri->user)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
649 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
650 buffer = g_string_append (buffer, uri->user);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
651 buffer = g_string_append_c (buffer, '@');
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
652 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
653 if (uri->passwd)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
654 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
655 buffer = g_string_append (buffer, uri->passwd);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
656 buffer = g_string_append_c (buffer, '@');
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
657 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
658
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
659 /* Add brackets around the hostname if it's IPv6 */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
660 if (uri->hostname)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
661 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
662 if (strchr(uri->hostname, ':') == NULL)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
663 buffer = g_string_append (buffer, uri->hostname);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
664 else
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
665 g_string_sprintfa (buffer, "[%s]", uri->hostname);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
666 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
667
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
668 if (uri->port)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
669 g_string_sprintfa (buffer, ":%d", uri->port);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
670
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
671 if (uri->path)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
672 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
673 if (*uri->path == '/' ||
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
674 !(uri->user || uri->passwd || uri->hostname || uri->port))
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
675 g_string_append (buffer, uri->path);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
676 else
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
677 g_string_sprintfa (buffer, "/%s", uri->path);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
678 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
679
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
680 if (uri->query)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
681 g_string_sprintfa (buffer, "?%s", uri->query);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
682
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
683 if (uri->fragment)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
684 g_string_sprintfa (buffer, "#%s", uri->fragment);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
685
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
686 /* Free only GString not data contained, return the data instead */
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
687 rv = buffer->str;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
688 g_string_free (buffer, FALSE);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
689 return rv;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
690 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
691
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
692
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
693 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
694 * gnet_uri_set_scheme
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
695 * @uri: a #GURI
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
696 * @scheme: scheme
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
697 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
698 * Sets a #GURI's scheme.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
699 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
700 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
701 void
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
702 gnet_uri_set_scheme (GURI* uri, const char* scheme)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
703 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
704 g_return_if_fail (uri);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
705
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
706 if (uri->scheme)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
707 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
708 g_free (uri->scheme);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
709 uri->scheme = NULL;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
710 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
711
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
712 if (scheme)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
713 uri->scheme = g_strdup (scheme);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
714 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
715
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
716
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
717 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
718 * gnet_uri_set_userinfo
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
719 * @uri: a #GURI
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
720 * @userinfo: user info
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
721 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
722 * Sets a #GURI's user info.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
723 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
724 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
725 void
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
726 gnet_uri_set_userinfo (GURI* uri, const char* user, const char* passwd)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
727 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
728 g_return_if_fail (uri);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
729
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
730 if (uri->user)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
731 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
732 g_free (uri->user);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
733 uri->user = NULL;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
734 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
735 if (uri->passwd)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
736 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
737 g_free (uri->passwd);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
738 uri->passwd = NULL;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
739 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
740
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
741 if (user)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
742 uri->user = g_strdup (user);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
743 if (passwd)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
744 uri->passwd = g_strdup (passwd);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
745 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
746
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
747
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
748 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
749 * gnet_uri_set_hostname
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
750 * @uri: a #GURI
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
751 * @hostname: host name
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
752 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
753 * Sets a #GURI's host name.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
754 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
755 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
756 void
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
757 gnet_uri_set_hostname (GURI* uri, const char* hostname)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
758 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
759 g_return_if_fail (uri);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
760
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
761 if (uri->hostname)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
762 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
763 g_free (uri->hostname);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
764 uri->hostname = NULL;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
765 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
766
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
767 if (hostname)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
768 uri->hostname = g_strdup (hostname);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
769 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
770
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
771
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
772 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
773 * gnet_uri_set_port
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
774 * @uri: a #GURI
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
775 * @port: port
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
776 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
777 * Set a #GURI's port.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
778 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
779 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
780 void
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
781 gnet_uri_set_port (GURI* uri, gint port)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
782 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
783 uri->port = port;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
784 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
785
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
786
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
787 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
788 * gnet_uri_set_path
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
789 * @uri: a #GURI
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
790 * @path: path
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
791 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
792 * Set a #GURI's path.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
793 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
794 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
795 void
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
796 gnet_uri_set_path (GURI* uri, const char* path)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
797 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
798 g_return_if_fail (uri);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
799
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
800 if (uri->path)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
801 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
802 g_free (uri->path);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
803 uri->path = NULL;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
804 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
805
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
806 if (path)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
807 uri->path = g_strdup (path);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
808 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
809
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
810
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
811
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
812 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
813 * gnet_uri_set_query
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
814 * @uri: a #GURI
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
815 * @query: query
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
816 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
817 * Set a #GURI's query.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
818 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
819 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
820 void
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
821 gnet_uri_set_query (GURI* uri, const char* query)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
822 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
823 g_return_if_fail (uri);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
824
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
825 if (uri->query)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
826 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
827 g_free (uri->query);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
828 uri->query = NULL;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
829 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
830
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
831 if (query)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
832 uri->query = g_strdup (query);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
833 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
834
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
835
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
836 /**
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
837 * gnet_uri_set_fragment
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
838 * @uri: a #GURI
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
839 * @fragment: fragment
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
840 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
841 * Set a #GURI's fragment.
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
842 *
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
843 **/
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
844 void
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
845 gnet_uri_set_fragment (GURI* uri, const char* fragment)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
846 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
847 g_return_if_fail (uri);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
848
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
849 if (uri->fragment)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
850 {
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
851 g_free (uri->fragment);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
852 uri->fragment = NULL;
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
853 }
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
854
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
855 if (fragment)
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
856 uri->fragment = g_strdup (fragment);
93c0af9bb521 [svn] Add more files from libmms CVS.
chainsaw
parents:
diff changeset
857 }