From 1d03dc888f0d73416a0cbc1ade3242f87fd21780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Date: Wed, 18 Feb 2015 17:51:01 +0100 Subject: soup-server: add non-GSocket fallbacks for client context If the SoupSocket doesn't have a GSocket, it may still have addresses filled. https://bugzilla.gnome.org/show_bug.cgi?id=744186 --- libsoup/soup-server.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'libsoup') diff --git a/libsoup/soup-server.c b/libsoup/soup-server.c index b88e485f..69cd48fb 100644 --- a/libsoup/soup-server.c +++ b/libsoup/soup-server.c @@ -2146,10 +2146,18 @@ soup_client_context_get_address (SoupClientContext *client) GSocketAddress * soup_client_context_get_remote_address (SoupClientContext *client) { + GSocket *sock; + g_return_val_if_fail (client != NULL, NULL); - if (!client->remote_addr) - client->remote_addr = g_socket_get_remote_address (soup_client_context_get_gsocket (client), NULL); + if (client->remote_addr) + return client->remote_addr; + + sock = soup_client_context_get_gsocket (client); + client->remote_addr = sock ? + g_socket_get_remote_address (sock, NULL) : + soup_address_get_gsockaddr (soup_socket_get_remote_address (client->sock)); + return client->remote_addr; } @@ -2169,10 +2177,18 @@ soup_client_context_get_remote_address (SoupClientContext *client) GSocketAddress * soup_client_context_get_local_address (SoupClientContext *client) { + GSocket *sock; + g_return_val_if_fail (client != NULL, NULL); - if (!client->local_addr) - client->local_addr = g_socket_get_local_address (soup_client_context_get_gsocket (client), NULL); + if (client->local_addr) + return client->local_addr; + + sock = soup_client_context_get_gsocket (client); + client->local_addr = sock ? + g_socket_get_local_address (sock, NULL) : + soup_address_get_gsockaddr (soup_socket_get_local_address (client->sock)); + return client->local_addr; } -- cgit v1.2.1