projects
/
platform
/
upstream
/
glib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
docs: various small fixes
[platform/upstream/glib.git]
/
gio
/
gnetworkaddress.c
diff --git
a/gio/gnetworkaddress.c
b/gio/gnetworkaddress.c
index
2e4042c
..
5cb4c74
100644
(file)
--- a/
gio/gnetworkaddress.c
+++ b/
gio/gnetworkaddress.c
@@
-15,9
+15,7
@@
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General
- * Public License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
- * Boston, MA 02111-1307, USA.
+ * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
#include "config.h"
*/
#include "config.h"
@@
-90,6
+88,7
@@
static GSocketAddressEnumerator *g_network_address_connectable_enumerate
static GSocketAddressEnumerator *g_network_address_connectable_proxy_enumerate (GSocketConnectable *connectable);
G_DEFINE_TYPE_WITH_CODE (GNetworkAddress, g_network_address, G_TYPE_OBJECT,
static GSocketAddressEnumerator *g_network_address_connectable_proxy_enumerate (GSocketConnectable *connectable);
G_DEFINE_TYPE_WITH_CODE (GNetworkAddress, g_network_address, G_TYPE_OBJECT,
+ G_ADD_PRIVATE (GNetworkAddress)
G_IMPLEMENT_INTERFACE (G_TYPE_SOCKET_CONNECTABLE,
g_network_address_connectable_iface_init))
G_IMPLEMENT_INTERFACE (G_TYPE_SOCKET_CONNECTABLE,
g_network_address_connectable_iface_init))
@@
-118,8
+117,6
@@
g_network_address_class_init (GNetworkAddressClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- g_type_class_add_private (klass, sizeof (GNetworkAddressPrivate));
-
gobject_class->set_property = g_network_address_set_property;
gobject_class->get_property = g_network_address_get_property;
gobject_class->finalize = g_network_address_finalize;
gobject_class->set_property = g_network_address_set_property;
gobject_class->get_property = g_network_address_get_property;
gobject_class->finalize = g_network_address_finalize;
@@
-161,8
+158,7
@@
g_network_address_connectable_iface_init (GSocketConnectableIface *connectable_i
static void
g_network_address_init (GNetworkAddress *addr)
{
static void
g_network_address_init (GNetworkAddress *addr)
{
- addr->priv = G_TYPE_INSTANCE_GET_PRIVATE (addr, G_TYPE_NETWORK_ADDRESS,
- GNetworkAddressPrivate);
+ addr->priv = g_network_address_get_instance_private (addr);
}
static void
}
static void
@@
-185,8
+181,7
@@
g_network_address_set_property (GObject *object,
break;
case PROP_SCHEME:
break;
case PROP_SCHEME:
- if (addr->priv->scheme)
- g_free (addr->priv->scheme);
+ g_free (addr->priv->scheme);
addr->priv->scheme = g_value_dup_string (value);
break;
addr->priv->scheme = g_value_dup_string (value);
break;
@@
-251,28
+246,17
@@
g_network_address_set_addresses (GNetworkAddress *addr,
static gboolean
g_network_address_parse_sockaddr (GNetworkAddress *addr)
{
static gboolean
g_network_address_parse_sockaddr (GNetworkAddress *addr)
{
- struct addrinfo hints, *res = NULL;
GSocketAddress *sockaddr;
GSocketAddress *sockaddr;
- gchar port[32];
-
- memset (&hints, 0, sizeof (hints));
- hints.ai_flags = AI_NUMERICHOST
-#ifdef AI_NUMERICSERV
- | AI_NUMERICSERV
-#endif
- ;
- g_snprintf (port, sizeof (port), "%u", addr->priv->port);
- if (getaddrinfo (addr->priv->hostname, port, &hints, &res) != 0)
- return FALSE;
-
- sockaddr = g_socket_address_new_from_native (res->ai_addr, res->ai_addrlen);
- freeaddrinfo (res);
- if (!sockaddr || !G_IS_INET_SOCKET_ADDRESS (sockaddr))
+ sockaddr = g_inet_socket_address_new_from_string (addr->priv->hostname,
+ addr->priv->port);
+ if (sockaddr)
+ {
+ addr->priv->sockaddrs = g_list_prepend (addr->priv->sockaddrs, sockaddr);
+ return TRUE;
+ }
+ else
return FALSE;
return FALSE;
-
- addr->priv->sockaddrs = g_list_prepend (addr->priv->sockaddrs, sockaddr);
- return TRUE;
}
/**
}
/**
@@
-283,7
+267,7
@@
g_network_address_parse_sockaddr (GNetworkAddress *addr)
* Creates a new #GSocketConnectable for connecting to the given
* @hostname and @port.
*
* Creates a new #GSocketConnectable for connecting to the given
* @hostname and @port.
*
- * Return
value
: (transfer full) (type GNetworkAddress): the new #GNetworkAddress
+ * Return
s
: (transfer full) (type GNetworkAddress): the new #GNetworkAddress
*
* Since: 2.22
*/
*
* Since: 2.22
*/
@@
-325,7
+309,7
@@
g_network_address_new (const gchar *hostname,
* is deprecated, because it depends on the contents of /etc/services,
* which is generally quite sparse on platforms other than Linux.)
*
* is deprecated, because it depends on the contents of /etc/services,
* which is generally quite sparse on platforms other than Linux.)
*
- * Return
value
: (transfer full): the new #GNetworkAddress, or %NULL on error
+ * Return
s
: (transfer full): the new #GNetworkAddress, or %NULL on error
*
* Since: 2.22
*/
*
* Since: 2.22
*/
@@
-468,7
+452,7
@@
_g_uri_parse_authority (const char *uri,
char **userinfo)
{
char *tmp_str;
char **userinfo)
{
char *tmp_str;
- const char *start, *p;
+ const char *start, *p
, *at, *delim
;
char c;
g_return_val_if_fail (uri != NULL, FALSE);
char c;
g_return_val_if_fail (uri != NULL, FALSE);
@@
-508,7
+492,14
@@
_g_uri_parse_authority (const char *uri,
start += 2;
start += 2;
- if (strchr (start, '@') != NULL)
+ /* check if the @ sign is part of the authority before attempting to
+ * decode the userinfo */
+ delim = strpbrk (start, "/?#[]");
+ at = strchr (start, '@');
+ if (at && delim && at > delim)
+ at = NULL;
+
+ if (at != NULL)
{
/* Decode userinfo:
* userinfo = *( unreserved / pct-encoded / sub-delims / ":" )
{
/* Decode userinfo:
* userinfo = *( unreserved / pct-encoded / sub-delims / ":" )
@@
-562,6
+553,8
@@
_g_uri_parse_authority (const char *uri,
/* If IPv6 or IPvFuture */
if (*p == '[')
{
/* If IPv6 or IPvFuture */
if (*p == '[')
{
+ gboolean has_scope_id = FALSE, has_bad_scope_id = FALSE;
+
start++;
p++;
while (1)
start++;
p++;
while (1)
@@
-571,6
+564,14
@@
_g_uri_parse_authority (const char *uri,
if (c == ']')
break;
if (c == ']')
break;
+ if (c == '%' && !has_scope_id)
+ {
+ has_scope_id = TRUE;
+ if (p[0] != '2' || p[1] != '5')
+ has_bad_scope_id = TRUE;
+ continue;
+ }
+
/* unreserved / sub-delims */
if (!(g_ascii_isalnum (c) ||
strchr (G_URI_OTHER_UNRESERVED, c) ||
/* unreserved / sub-delims */
if (!(g_ascii_isalnum (c) ||
strchr (G_URI_OTHER_UNRESERVED, c) ||
@@
-579,6
+580,16
@@
_g_uri_parse_authority (const char *uri,
c == '.'))
goto error;
}
c == '.'))
goto error;
}
+
+ if (host)
+ {
+ if (has_bad_scope_id)
+ *host = g_strndup (start, p - start - 1);
+ else
+ *host = g_uri_unescape_segment (start, p - 1, NULL);
+ }
+
+ c = *p++;
}
else
{
}
else
{
@@
-611,14
+622,14
@@
_g_uri_parse_authority (const char *uri,
strchr (G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, c)))
goto error;
}
strchr (G_URI_RESERVED_CHARS_SUBCOMPONENT_DELIMITERS, c)))
goto error;
}
- }
- if (host)
- *host = g_uri_unescape_segment (start, p - 1, NULL);
+ if (host)
+ *host = g_uri_unescape_segment (start, p - 1, NULL);
+ }
if (c == ':')
{
if (c == ':')
{
- /* Decode pot:
+ /* Decode po
r
t:
* port = *DIGIT
*/
guint tmp = 0;
* port = *DIGIT
*/
guint tmp = 0;
@@
-716,7
+727,7
@@
_g_uri_from_authority (const gchar *protocol,
* g_network_address_parse() allows #GSocketClient to determine
* when to use application-specific proxy protocols.
*
* g_network_address_parse() allows #GSocketClient to determine
* when to use application-specific proxy protocols.
*
- * Return
value
: (transfer full): the new #GNetworkAddress, or %NULL on error
+ * Return
s
: (transfer full): the new #GNetworkAddress, or %NULL on error
*
* Since: 2.26
*/
*
* Since: 2.26
*/
@@
-762,7
+773,7
@@
g_network_address_parse_uri (const gchar *uri,
* Gets @addr's hostname. This might be either UTF-8 or ASCII-encoded,
* depending on what @addr was created with.
*
* Gets @addr's hostname. This might be either UTF-8 or ASCII-encoded,
* depending on what @addr was created with.
*
- * Return
value
: @addr's hostname
+ * Return
s
: @addr's hostname
*
* Since: 2.22
*/
*
* Since: 2.22
*/
@@
-780,7
+791,7
@@
g_network_address_get_hostname (GNetworkAddress *addr)
*
* Gets @addr's port number
*
*
* Gets @addr's port number
*
- * Return
value
: @addr's port (which may be 0)
+ * Return
s
: @addr's port (which may be 0)
*
* Since: 2.22
*/
*
* Since: 2.22
*/
@@
-798,7
+809,7
@@
g_network_address_get_port (GNetworkAddress *addr)
*
* Gets @addr's scheme
*
*
* Gets @addr's scheme
*
- * Return
value
: @addr's scheme (%NULL if not built from URI)
+ * Return
s
: @addr's scheme (%NULL if not built from URI)
*
* Since: 2.26
*/
*
* Since: 2.26
*/