aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dcc.c24
-rw-r--r--protocols/jabber/s5bytestream.c11
2 files changed, 24 insertions, 11 deletions
diff --git a/dcc.c b/dcc.c
index 2fa3f745..fa5a0f76 100644
--- a/dcc.c
+++ b/dcc.c
@@ -583,11 +583,17 @@ file_transfer_t *dcc_request( struct im_connection *ic, char *line )
regex_t re;
file_transfer_t *ft;
dcc_file_transfer_t *df;
-
- if( regcomp( &re, pattern, REG_EXTENDED ) )
- return NULL;
- if( regexec( &re, line, 9, pmatch, 0 ) )
+ char errbuf[256];
+ int regerrcode, gret;
+
+ if( ( regerrcode = regcomp( &re, pattern, REG_EXTENDED ) ) ||
+ ( regerrcode = regexec( &re, line, 9, pmatch, 0 ) ) ) {
+ regerror( regerrcode,&re,errbuf,sizeof( errbuf ) );
+ imcb_log( ic,
+ "DCC: error parsing 'DCC SEND': %s, line: %s",
+ errbuf, line );
return NULL;
+ }
if( ( pmatch[1].rm_so > 0 ) &&
( pmatch[4].rm_so > 0 ) &&
@@ -615,7 +621,7 @@ file_transfer_t *dcc_request( struct im_connection *ic, char *line )
/* number means ipv4, something else means ipv6 */
if ( pmatch[5].rm_so > 0 )
{
- struct in_addr ipaddr = { htonl( atoi( input + pmatch[5].rm_so ) ) };
+ struct in_addr ipaddr = { .s_addr = htonl( atoi( input + pmatch[5].rm_so ) ) };
host = inet_ntoa( ipaddr );
} else
{
@@ -630,9 +636,13 @@ file_transfer_t *dcc_request( struct im_connection *ic, char *line )
filesize = atoll( input + pmatch[8].rm_so );
memset( &hints, 0, sizeof ( struct addrinfo ) );
- if ( getaddrinfo( host, port, &hints, &rp ) )
+ if ( ( gret = getaddrinfo( host, port, &hints, &rp ) ) )
{
g_free( input );
+ imcb_log( ic, "DCC: getaddrinfo() failed with %s "
+ "when parsing incoming 'DCC SEND': "
+ "host %s, port %s",
+ gai_strerror( gret ), host, port );
return NULL;
}
@@ -649,6 +659,8 @@ file_transfer_t *dcc_request( struct im_connection *ic, char *line )
return ft;
}
+ imcb_log( ic, "DCC: couldnt parse 'DCC SEND' line: %s", line );
+
return NULL;
}
diff --git a/protocols/jabber/s5bytestream.c b/protocols/jabber/s5bytestream.c
index 0abc2c1b..1008f162 100644
--- a/protocols/jabber/s5bytestream.c
+++ b/protocols/jabber/s5bytestream.c
@@ -352,6 +352,7 @@ gboolean jabber_bs_recv_handshake( gpointer data, gint fd, b_input_condition con
struct bs_transfer *bt = data;
short revents;
+ int gret;
if ( ( fd != 0 ) && !jabber_bs_poll( bt, fd, &revents ) )
return FALSE;
@@ -365,8 +366,8 @@ gboolean jabber_bs_recv_handshake( gpointer data, gint fd, b_input_condition con
memset( &hints, 0, sizeof( struct addrinfo ) );
hints.ai_socktype = SOCK_STREAM;
- if ( getaddrinfo( bt->sh->host, bt->sh->port, &hints, &rp ) != 0 )
- return jabber_bs_abort( bt, "getaddrinfo() failed: %s", strerror( errno ) );
+ if ( ( gret = getaddrinfo( bt->sh->host, bt->sh->port, &hints, &rp ) ) != 0 )
+ return jabber_bs_abort( bt, "getaddrinfo() failed: %s", gai_strerror( gret ) );
ASSERTSOCKOP( bt->tf->fd = fd = socket( rp->ai_family, rp->ai_socktype, 0 ), "Opening socket" );
@@ -922,7 +923,7 @@ gboolean jabber_bs_send_handshake_abort(struct bs_transfer *bt, char *error )
gboolean jabber_bs_send_listen( struct bs_transfer *bt, struct sockaddr_storage *saddr, char *host, char *port )
{
struct jabber_transfer *tf = bt->tf;
- int fd;
+ int fd,gret;
char hostname[ HOST_NAME_MAX + 1 ];
struct addrinfo hints, *rp;
socklen_t ssize = sizeof( struct sockaddr_storage );
@@ -935,8 +936,8 @@ gboolean jabber_bs_send_listen( struct bs_transfer *bt, struct sockaddr_storage
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_NUMERICSERV;
- if ( getaddrinfo( hostname, "0", &hints, &rp ) != 0 )
- return jabber_bs_abort( bt, "getaddrinfo()" );
+ if ( ( gret = getaddrinfo( hostname, "0", &hints, &rp ) ) != 0 )
+ return jabber_bs_abort( bt, "getaddrinfo() failed: %s", gai_strerror( gret ) );
memcpy( saddr, rp->ai_addr, rp->ai_addrlen );