From 2223bc36fa7b6b16ff7ea83e39e64e9375e3ebc1 Mon Sep 17 00:00:00 2001
From: Not Zed <NotZed@Ximian.com>
Date: Fri, 24 Sep 2004 02:50:45 +0000
Subject: ** See bug #47821.

2004-09-13  Not Zed  <NotZed@Ximian.com>

        ** See bug #47821.

        * camel-service.c: removed the old hostent based hostname interfaces.

        * camel-sasl-kerberos4.c (krb4_challenge): new hostname interfaces.

        * camel-sasl-gssapi.c (gssapi_challenge): new hostname interfaces.

        * camel-sasl-digest-md5.c (digest_md5_challenge): use new hostname
        interfaces.
        (generate_response): just take hostname directly, not hostent.

        * camel-mime-utils.c (camel_header_msgid_generate): use new
        hostname interfaces.

        * providers/smtp/camel-smtp-transport.c (connect_to_server): fixed
        to use new addrinfo apis.

        * providers/pop3/camel-pop3-store.c (connect_to_server): fixed to
        use new addrinfo apis.

        * camel-tcp-stream-ssl.c (stream_connect): try all addresses
        supplied.

        * camel-tcp-stream.c (camel_tcp_stream_get_remote_address)
        (camel_tcp_stream_get_local_address): return a sockaddr now, and
        also the address length.  Fixed all implementations and callers.
        (camel_tcp_stream_connect): use addrinfo rather than hostent for
        host AND port info.  Fixed all implementations and callers.

svn path=/trunk/; revision=27352
---
 camel/providers/nntp/camel-nntp-store.c | 34 +++++++++++++++++++++------------
 1 file changed, 22 insertions(+), 12 deletions(-)

(limited to 'camel/providers/nntp')

diff --git a/camel/providers/nntp/camel-nntp-store.c b/camel/providers/nntp/camel-nntp-store.c
index 6d8490d453..e1473f1de1 100644
--- a/camel/providers/nntp/camel-nntp-store.c
+++ b/camel/providers/nntp/camel-nntp-store.c
@@ -162,9 +162,10 @@ connect_to_server (CamelService *service, int ssl_mode, CamelException *ex)
 	gboolean retval = FALSE;
 	unsigned char *buf;
 	unsigned int len;
-	struct hostent *h;
-	int port, ret;
+	int ret;
 	char *path;
+	struct addrinfo *ai, hints = { 0 };
+	char *serv;
 	
 	CAMEL_NNTP_STORE_LOCK(store, command_lock);
 
@@ -181,15 +182,17 @@ connect_to_server (CamelService *service, int ssl_mode, CamelException *ex)
 		camel_data_cache_set_expire_age (store->cache, 60*60*24*14);
 		camel_data_cache_set_expire_access (store->cache, 60*60*24*5);
 	}
-	
-	if (!(h = camel_service_gethost (service, ex)))
-		goto fail;
-	
-	port = service->url->port ? service->url->port : NNTP_PORT;
+
+	if (service->url->port) {
+		serv = g_alloca(16);
+		sprintf(serv, "%d", service->url->port);
+	} else
+		serv = "nntp";
 	
 #ifdef HAVE_SSL
 	if (ssl_mode != USE_SSL_NEVER) {
-		port = service->url->port ? service->url->port : NNTPS_PORT;
+		if (service->url->port == 0)
+			serv = "nntps";
 		tcp_stream = camel_tcp_stream_ssl_new (service->session, service->url->host, CAMEL_TCP_STREAM_SSL_ENABLE_SSL2 | CAMEL_TCP_STREAM_SSL_ENABLE_SSL3);
 	} else {
 		tcp_stream = camel_tcp_stream_raw_new ();
@@ -197,17 +200,24 @@ connect_to_server (CamelService *service, int ssl_mode, CamelException *ex)
 #else
 	tcp_stream = camel_tcp_stream_raw_new ();
 #endif /* HAVE_SSL */
+
+	hints.ai_socktype = SOCK_STREAM;
+	ai = camel_getaddrinfo(service->url->host, serv, &hints, ex);
+	if (ai == NULL) {
+		camel_object_unref(tcp_stream);
+		goto fail;
+	}
 	
-	ret = camel_tcp_stream_connect (CAMEL_TCP_STREAM (tcp_stream), h, port);
-	camel_free_host (h);
+	ret = camel_tcp_stream_connect(CAMEL_TCP_STREAM(tcp_stream), ai);
+	camel_freeaddrinfo(ai);
 	if (ret == -1) {
 		if (errno == EINTR)
 			camel_exception_set (ex, CAMEL_EXCEPTION_USER_CANCEL,
 					     _("Connection cancelled"));
 		else
 			camel_exception_setv (ex, CAMEL_EXCEPTION_SERVICE_UNAVAILABLE,
-					      _("Could not connect to %s (port %d): %s"),
-					      service->url->host, port, g_strerror (errno));
+					      _("Could not connect to %s (port %s): %s"),
+					      service->url->host, serv, g_strerror (errno));
 		
 		camel_object_unref (tcp_stream);
 		
-- 
cgit v1.2.3