X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=mutt_socket.c;h=9029b3e11874f876ba2c4c743ce4eae783a6d4f4;hp=2a48665caf32ffbd30b213f886b9c107372c091a;hb=4f61fa445bff564984acf29fc91858af0ed2725e;hpb=c3e57678c8be193fc137854020f3a90887be97c9 diff --git a/mutt_socket.c b/mutt_socket.c index 2a48665..9029b3e 100644 --- a/mutt_socket.c +++ b/mutt_socket.c @@ -17,12 +17,17 @@ #include "globals.h" #include "mutt_socket.h" #include "mutt_tunnel.h" -#if defined(USE_SSL) || defined(USE_GNUTLS) || defined(USE_NSS) +#if defined(USE_SSL) || defined(USE_GNUTLS) # include "mutt_ssl.h" #endif #include "mutt_idna.h" +#include "lib/mem.h" +#include "lib/intl.h" +#include "lib/str.h" +#include "lib/debug.h" + #include #include #include @@ -39,7 +44,7 @@ static CONNECTION *Connections = NULL; /* forward declarations */ static int socket_preconnect (void); static int socket_connect (int fd, struct sockaddr *sa); -static CONNECTION *socket_new_conn (); +static CONNECTION *socket_new_conn (void); /* Wrappers */ int mutt_socket_open (CONNECTION * conn) @@ -55,9 +60,7 @@ int mutt_socket_close (CONNECTION * conn) int rc = -1; if (conn->fd < 0) - dprint (1, - (debugfile, - "mutt_socket_close: Attempt to close closed connection.\n")); + debug_print (1, ("Attempt to close closed connection.\n")); else rc = conn->conn_close (conn); @@ -72,9 +75,7 @@ int mutt_socket_read (CONNECTION * conn, char *buf, size_t len) int rc; if (conn->fd < 0) { - dprint (1, - (debugfile, - "mutt_socket_read: attempt to read from closed connection\n")); + debug_print (1, ("attempt to read from closed connection\n")); return -1; } @@ -95,28 +96,23 @@ int mutt_socket_write_d (CONNECTION * conn, const char *buf, int dbg) int rc; int len; - dprint (dbg, (debugfile, "> %s", buf)); + debug_print (dbg, ("> %s", buf)); if (conn->fd < 0) { - dprint (1, - (debugfile, - "mutt_socket_write: attempt to write to closed connection\n")); + debug_print (1, ("attempt to write to closed connection\n")); return -1; } - len = mutt_strlen (buf); + len = str_len (buf); if ((rc = conn->conn_write (conn, buf, len)) < 0) { - dprint (1, (debugfile, - "mutt_socket_write: error writing, closing socket\n")); + debug_print (1, ("error writing, closing socket\n")); mutt_socket_close (conn); return -1; } if (rc < len) { - dprint (1, (debugfile, - "mutt_socket_write: ERROR: wrote %d of %d bytes!\n", rc, - len)); + debug_print (1, ("ERROR: wrote %d of %d bytes!\n", rc, len)); } return rc; @@ -130,9 +126,7 @@ int mutt_socket_readchar (CONNECTION * conn, char *c) conn->available = conn->conn_read (conn, conn->inbuf, sizeof (conn->inbuf)); else { - dprint (1, - (debugfile, - "mutt_socket_readchar: attempt to read from closed connection.\n")); + debug_print (1, ("attempt to read from closed connection.\n")); return -1; } conn->bufpos = 0; @@ -173,9 +167,9 @@ int mutt_socket_readln_d (char *buf, size_t buflen, CONNECTION * conn, else buf[i] = '\0'; - dprint (dbg, (debugfile, "< %s\n", buf)); + debug_print (dbg, ("< %s\n", buf)); - /* number of bytes read, not strlen */ + /* number of bytes read, not str_len */ return i + 1; } @@ -195,7 +189,7 @@ void mutt_socket_free (CONNECTION * conn) /* head is special case, doesn't need prev updated */ if (iter == conn) { Connections = iter->next; - FREE (&iter); + mem_free (&iter); return; } @@ -203,7 +197,7 @@ void mutt_socket_free (CONNECTION * conn) if (iter->next == conn) { tmp = iter->next; iter->next = tmp->next; - FREE (&tmp); + mem_free (&tmp); return; } iter = iter->next; @@ -243,12 +237,8 @@ CONNECTION *mutt_conn_find (const CONNECTION * start, const ACCOUNT * account) if (Tunnel && *Tunnel) mutt_tunnel_socket_setup (conn); else if (account->flags & M_ACCT_SSL) { -#ifdef USE_SSL - ssl_socket_setup (conn); -#elif USE_NSS - mutt_nss_socket_setup (conn); -#elif USE_GNUTLS - if (mutt_gnutls_socket_setup (conn) < 0) { +#if defined (USE_SSL) || defined (USE_GNUTLS) + if (mutt_ssl_socket_setup (conn) < 0) { mutt_socket_free (conn); return NULL; } @@ -276,10 +266,10 @@ static int socket_preconnect (void) int rc; int save_errno; - if (mutt_strlen (Preconnect)) { - dprint (2, (debugfile, "Executing preconnect: %s\n", Preconnect)); + if (str_len (Preconnect)) { + debug_print (2, ("Executing preconnect: %s\n", Preconnect)); rc = mutt_system (Preconnect); - dprint (2, (debugfile, "Preconnect result: %d\n", rc)); + debug_print (2, ("Preconnect result: %d\n", rc)); if (rc) { save_errno = errno; mutt_perror (_("Preconnect command failed.")); @@ -305,7 +295,7 @@ static int socket_connect (int fd, struct sockaddr *sa) sa_size = sizeof (struct sockaddr_in6); #endif else { - dprint (1, (debugfile, "Unknown address family!\n")); + debug_print (1, ("Unknown address family!\n")); return -1; } @@ -318,7 +308,7 @@ static int socket_connect (int fd, struct sockaddr *sa) if (connect (fd, sa, sa_size) < 0) { save_errno = errno; - dprint (2, (debugfile, "Connection failed. errno: %d...\n", errno)); + debug_print (2, ("Connection failed. errno: %d...\n", errno)); SigInt = 0; /* reset in case we caught SIGINTR while in connect() */ } @@ -330,11 +320,11 @@ static int socket_connect (int fd, struct sockaddr *sa) } /* socket_new_conn: allocate and initialise a new connection. */ -static CONNECTION *socket_new_conn () +static CONNECTION *socket_new_conn (void) { CONNECTION *conn; - conn = (CONNECTION *) safe_calloc (1, sizeof (CONNECTION)); + conn = (CONNECTION *) mem_calloc (1, sizeof (CONNECTION)); conn->fd = -1; return conn; @@ -414,11 +404,12 @@ int raw_socket_open (CONNECTION * conn) rc = getaddrinfo (host_idna, port, &hints, &res); # ifdef HAVE_LIBIDN - FREE (&host_idna); + mem_free (&host_idna); # endif if (rc) { mutt_error (_("Could not find the host \"%s\""), conn->account.host); + mutt_sleep (2); return -1; } @@ -464,7 +455,7 @@ int raw_socket_open (CONNECTION * conn) if ((he = gethostbyname (host_idna)) == NULL) { # ifdef HAVE_LIBIDN - FREE (&host_idna); + mem_free (&host_idna); # endif mutt_error (_("Could not find the host \"%s\""), conn->account.host); @@ -472,7 +463,7 @@ int raw_socket_open (CONNECTION * conn) } # ifdef HAVE_LIBIDN - FREE (&host_idna); + mem_free (&host_idna); # endif mutt_message (_("Connecting to %s..."), conn->account.host); @@ -484,6 +475,7 @@ int raw_socket_open (CONNECTION * conn) if (fd >= 0) { if ((rc = socket_connect (fd, (struct sockaddr *) &sin)) == 0) { + fcntl (fd, F_SETFD, FD_CLOEXEC); conn->fd = fd; break; }