diff options
author | Not Zed <NotZed@Ximian.com> | 2004-09-24 10:50:45 +0800 |
---|---|---|
committer | Michael Zucci <zucchi@src.gnome.org> | 2004-09-24 10:50:45 +0800 |
commit | 2223bc36fa7b6b16ff7ea83e39e64e9375e3ebc1 (patch) | |
tree | 47094ce1777a4c6fe98bfc81e70a07a6f9f5414a /camel/camel-tcp-stream.c | |
parent | 6883c5737127983d776b7071c258ae74c9bfb4c1 (diff) | |
download | gsoc2013-evolution-2223bc36fa7b6b16ff7ea83e39e64e9375e3ebc1.tar gsoc2013-evolution-2223bc36fa7b6b16ff7ea83e39e64e9375e3ebc1.tar.gz gsoc2013-evolution-2223bc36fa7b6b16ff7ea83e39e64e9375e3ebc1.tar.bz2 gsoc2013-evolution-2223bc36fa7b6b16ff7ea83e39e64e9375e3ebc1.tar.lz gsoc2013-evolution-2223bc36fa7b6b16ff7ea83e39e64e9375e3ebc1.tar.xz gsoc2013-evolution-2223bc36fa7b6b16ff7ea83e39e64e9375e3ebc1.tar.zst gsoc2013-evolution-2223bc36fa7b6b16ff7ea83e39e64e9375e3ebc1.zip |
** 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
Diffstat (limited to 'camel/camel-tcp-stream.c')
-rw-r--r-- | camel/camel-tcp-stream.c | 89 |
1 files changed, 24 insertions, 65 deletions
diff --git a/camel/camel-tcp-stream.c b/camel/camel-tcp-stream.c index fbbcbec451..3aa2d0d368 100644 --- a/camel/camel-tcp-stream.c +++ b/camel/camel-tcp-stream.c @@ -35,12 +35,11 @@ static CamelStreamClass *parent_class = NULL; /* Returns the class for a CamelTcpStream */ #define CTS_CLASS(so) CAMEL_TCP_STREAM_CLASS (CAMEL_OBJECT_GET_CLASS(so)) -static int tcp_connect (CamelTcpStream *stream, struct hostent *host, int port); +static int tcp_connect (CamelTcpStream *stream, struct addrinfo *host); static int tcp_getsockopt (CamelTcpStream *stream, CamelSockOptData *data); static int tcp_setsockopt (CamelTcpStream *stream, const CamelSockOptData *data); -static CamelTcpAddress *tcp_get_local_address (CamelTcpStream *stream); -static CamelTcpAddress *tcp_get_remote_address (CamelTcpStream *stream); - +static struct sockaddr *tcp_get_local_address (CamelTcpStream *stream, socklen_t *len); +static struct sockaddr *tcp_get_remote_address (CamelTcpStream *stream, socklen_t *len); static void camel_tcp_stream_class_init (CamelTcpStreamClass *camel_tcp_stream_class) @@ -84,7 +83,7 @@ camel_tcp_stream_get_type (void) static int -tcp_connect (CamelTcpStream *stream, struct hostent *host, int port) +tcp_connect (CamelTcpStream *stream, struct addrinfo *host) { w(g_warning ("CamelTcpStream::connect called on default implementation")); return -1; @@ -93,22 +92,21 @@ tcp_connect (CamelTcpStream *stream, struct hostent *host, int port) /** * camel_tcp_stream_connect: * @stream: a CamelTcpStream object. - * @host: a hostent value - * @port: port + * @host: A linked list of addrinfo structures to try to connect, in + * the order of most likely to least likely to work. * * Create a socket and connect based upon the data provided. * * Return value: zero on success or -1 on fail. **/ int -camel_tcp_stream_connect (CamelTcpStream *stream, struct hostent *host, int port) +camel_tcp_stream_connect (CamelTcpStream *stream, struct addrinfo *host) { g_return_val_if_fail (CAMEL_IS_TCP_STREAM (stream), -1); - return CTS_CLASS (stream)->connect (stream, host, port); + return CTS_CLASS (stream)->connect (stream, host); } - static int tcp_getsockopt (CamelTcpStream *stream, CamelSockOptData *data) { @@ -116,7 +114,6 @@ tcp_getsockopt (CamelTcpStream *stream, CamelSockOptData *data) return -1; } - /** * camel_tcp_stream_getsockopt: * @stream: tcp stream object @@ -134,7 +131,6 @@ camel_tcp_stream_getsockopt (CamelTcpStream *stream, CamelSockOptData *data) return CTS_CLASS (stream)->getsockopt (stream, data); } - static int tcp_setsockopt (CamelTcpStream *stream, const CamelSockOptData *data) { @@ -142,7 +138,6 @@ tcp_setsockopt (CamelTcpStream *stream, const CamelSockOptData *data) return -1; } - /** * camel_tcp_stream_setsockopt: * @stream: tcp stream object @@ -160,9 +155,8 @@ camel_tcp_stream_setsockopt (CamelTcpStream *stream, const CamelSockOptData *dat return CTS_CLASS (stream)->setsockopt (stream, data); } - -static CamelTcpAddress * -tcp_get_local_address (CamelTcpStream *stream) +static struct sockaddr * +tcp_get_local_address (CamelTcpStream *stream, socklen_t *len) { w(g_warning ("CamelTcpStream::get_local_address called on default implementation")); return NULL; @@ -171,23 +165,24 @@ tcp_get_local_address (CamelTcpStream *stream) /** * camel_tcp_stream_get_local_address: * @stream: tcp stream object + * @len: Pointer to address length which must be supplied. * * Get the local address of @stream. * * Return value: the stream's local address (which must be freed with - * camel_tcp_address_free()) if the stream is connected, or %NULL if not. + * g_free()) if the stream is connected, or %NULL if not. **/ -CamelTcpAddress * -camel_tcp_stream_get_local_address (CamelTcpStream *stream) +struct sockaddr * +camel_tcp_stream_get_local_address (CamelTcpStream *stream, socklen_t *len) { g_return_val_if_fail (CAMEL_IS_TCP_STREAM (stream), NULL); + g_return_val_if_fail(len != NULL, NULL); - return CTS_CLASS (stream)->get_local_address (stream); + return CTS_CLASS (stream)->get_local_address (stream, len); } - -static CamelTcpAddress * -tcp_get_remote_address (CamelTcpStream *stream) +static struct sockaddr * +tcp_get_remote_address (CamelTcpStream *stream, socklen_t *len) { w(g_warning ("CamelTcpStream::get_remote_address called on default implementation")); return NULL; @@ -196,54 +191,18 @@ tcp_get_remote_address (CamelTcpStream *stream) /** * camel_tcp_stream_get_remote_address: * @stream: tcp stream object + * @len: Pointer to address length, which must be supplied. * * Get the remote address of @stream. * * Return value: the stream's remote address (which must be freed with - * camel_tcp_address_free()) if the stream is connected, or %NULL if not. + * g_free()) if the stream is connected, or %NULL if not. **/ -CamelTcpAddress * -camel_tcp_stream_get_remote_address (CamelTcpStream *stream) +struct sockaddr * +camel_tcp_stream_get_remote_address (CamelTcpStream *stream, socklen_t *len) { g_return_val_if_fail (CAMEL_IS_TCP_STREAM (stream), NULL); - - return CTS_CLASS (stream)->get_remote_address (stream); -} + g_return_val_if_fail(len != NULL, NULL); - -/** - * camel_tcp_address_new: - * @family: the address family - * @port: the port number (in network byte order) - * @length: the length of @address - * @address: the address data (family dependent, in network byte order) - * - * Return value: a new CamelTcpAddress. - **/ -CamelTcpAddress * -camel_tcp_address_new (CamelTcpAddressFamily family, gushort port, - gushort length, gpointer address) -{ - CamelTcpAddress *addr; - - addr = g_malloc (sizeof (CamelTcpAddress) + length - 1); - addr->family = family; - addr->port = port; - addr->length = length; - memcpy (&addr->address, address, length); - - return addr; -} - - -/** - * camel_tcp_address_free: - * @address: the address - * - * Frees @address. - **/ -void -camel_tcp_address_free (CamelTcpAddress *address) -{ - g_free (address); + return CTS_CLASS (stream)->get_remote_address (stream, len); } |