aboutsummaryrefslogtreecommitdiffstats
path: root/lib/ftutil.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ftutil.c')
-rw-r--r--lib/ftutil.c110
1 files changed, 50 insertions, 60 deletions
diff --git a/lib/ftutil.c b/lib/ftutil.c
index 3b29d2f4..7606890f 100644
--- a/lib/ftutil.c
+++ b/lib/ftutil.c
@@ -28,117 +28,107 @@
#include "lib/ftutil.h"
#define ASSERTSOCKOP(op, msg) \
- if( (op) == -1 ) {\
- g_snprintf( errmsg, sizeof( errmsg ), msg ": %s", strerror( errno ) ); \
+ if ((op) == -1) { \
+ g_snprintf(errmsg, sizeof(errmsg), msg ": %s", strerror(errno)); \
return -1; }
/*
* Creates a listening socket and returns it in saddr_ptr.
*/
-int ft_listen( struct sockaddr_storage *saddr_ptr, char *host, char *port, int copy_fd, int for_bitlbee_client, char **errptr )
+int ft_listen(struct sockaddr_storage *saddr_ptr, char *host, char *port, int copy_fd, int for_bitlbee_client,
+ char **errptr)
{
int fd, gret, saddrlen;
struct addrinfo hints, *rp;
- socklen_t ssize = sizeof( struct sockaddr_storage );
+ socklen_t ssize = sizeof(struct sockaddr_storage);
struct sockaddr_storage saddrs, *saddr = &saddrs;
static char errmsg[1024];
char *ftlisten = global.conf->ft_listen;
- if( errptr )
+ if (errptr) {
*errptr = errmsg;
+ }
- strcpy( port, "0" );
+ strcpy(port, "0");
/* Format is <IP-A>[:<Port-A>];<IP-B>[:<Port-B>] where
* A is for connections with the bitlbee client (DCC)
* and B is for connections with IM peers.
*/
- if( ftlisten )
- {
- char *scolon = strchr( ftlisten, ';' );
+ if (ftlisten) {
+ char *scolon = strchr(ftlisten, ';');
char *colon;
- if( scolon )
- {
- if( for_bitlbee_client )
- {
+ if (scolon) {
+ if (for_bitlbee_client) {
*scolon = '\0';
- strncpy( host, ftlisten, HOST_NAME_MAX );
+ strncpy(host, ftlisten, HOST_NAME_MAX);
*scolon = ';';
+ } else {
+ strncpy(host, scolon + 1, HOST_NAME_MAX);
}
- else
- {
- strncpy( host, scolon + 1, HOST_NAME_MAX );
- }
- }
- else
- {
- strncpy( host, ftlisten, HOST_NAME_MAX );
+ } else {
+ strncpy(host, ftlisten, HOST_NAME_MAX);
}
- if( ( colon = strchr( host, ':' ) ) )
- {
+ if ((colon = strchr(host, ':'))) {
*colon = '\0';
- strncpy( port, colon + 1, 5 );
+ strncpy(port, colon + 1, 5);
}
- }
- else if( copy_fd >= 0 && getsockname( copy_fd, (struct sockaddr*) &saddrs, &ssize ) == 0 &&
- ( saddrs.ss_family == AF_INET || saddrs.ss_family == AF_INET6 ) &&
- getnameinfo( (struct sockaddr*) &saddrs, ssize, host, HOST_NAME_MAX,
- NULL, 0, NI_NUMERICHOST ) == 0 )
- {
+ } else if (copy_fd >= 0 && getsockname(copy_fd, (struct sockaddr*) &saddrs, &ssize) == 0 &&
+ (saddrs.ss_family == AF_INET || saddrs.ss_family == AF_INET6) &&
+ getnameinfo((struct sockaddr*) &saddrs, ssize, host, HOST_NAME_MAX,
+ NULL, 0, NI_NUMERICHOST) == 0) {
/* We just took our local address on copy_fd, which is likely to be a
sensible address from which we can do a file transfer now - the
most sensible we can get easily. */
- }
- else
- {
- ASSERTSOCKOP( gethostname( host, HOST_NAME_MAX + 1 ), "gethostname()" );
+ } else {
+ ASSERTSOCKOP(gethostname(host, HOST_NAME_MAX + 1), "gethostname()");
}
- memset( &hints, 0, sizeof( struct addrinfo ) );
+ memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_NUMERICSERV;
- if ( ( gret = getaddrinfo( host, port, &hints, &rp ) ) != 0 )
- {
- sprintf( errmsg, "getaddrinfo() failed: %s", gai_strerror( gret ) );
+ if ((gret = getaddrinfo(host, port, &hints, &rp)) != 0) {
+ sprintf(errmsg, "getaddrinfo() failed: %s", gai_strerror(gret));
return -1;
}
saddrlen = rp->ai_addrlen;
- memcpy( saddr, rp->ai_addr, saddrlen );
+ memcpy(saddr, rp->ai_addr, saddrlen);
- freeaddrinfo( rp );
+ freeaddrinfo(rp);
- ASSERTSOCKOP( fd = socket( saddr->ss_family, SOCK_STREAM, 0 ), "Opening socket" );
- ASSERTSOCKOP( bind( fd, ( struct sockaddr *)saddr, saddrlen ), "Binding socket" );
- ASSERTSOCKOP( listen( fd, 1 ), "Making socket listen" );
+ ASSERTSOCKOP(fd = socket(saddr->ss_family, SOCK_STREAM, 0), "Opening socket");
+ ASSERTSOCKOP(bind(fd, ( struct sockaddr *) saddr, saddrlen), "Binding socket");
+ ASSERTSOCKOP(listen(fd, 1), "Making socket listen");
- if ( !inet_ntop( saddr->ss_family, saddr->ss_family == AF_INET ?
- ( void * )&( ( struct sockaddr_in * ) saddr )->sin_addr.s_addr :
- ( void * )&( ( struct sockaddr_in6 * ) saddr )->sin6_addr.s6_addr,
- host, HOST_NAME_MAX ) )
- {
- strcpy( errmsg, "inet_ntop failed on listening socket" );
+ if (!inet_ntop(saddr->ss_family, saddr->ss_family == AF_INET ?
+ ( void * ) &(( struct sockaddr_in * ) saddr)->sin_addr.s_addr :
+ ( void * ) &(( struct sockaddr_in6 * ) saddr)->sin6_addr.s6_addr,
+ host, HOST_NAME_MAX)) {
+ strcpy(errmsg, "inet_ntop failed on listening socket");
return -1;
}
- ssize = sizeof( struct sockaddr_storage );
- ASSERTSOCKOP( getsockname( fd, ( struct sockaddr *)saddr, &ssize ), "Getting socket name" );
+ ssize = sizeof(struct sockaddr_storage);
+ ASSERTSOCKOP(getsockname(fd, ( struct sockaddr *) saddr, &ssize), "Getting socket name");
- if( saddr->ss_family == AF_INET )
- g_snprintf( port, 6, "%d", ntohs( ( (struct sockaddr_in *) saddr )->sin_port ) );
- else
- g_snprintf( port, 6, "%d", ntohs( ( (struct sockaddr_in6 *) saddr )->sin6_port ) );
+ if (saddr->ss_family == AF_INET) {
+ g_snprintf(port, 6, "%d", ntohs(((struct sockaddr_in *) saddr)->sin_port));
+ } else {
+ g_snprintf(port, 6, "%d", ntohs(((struct sockaddr_in6 *) saddr)->sin6_port));
+ }
- if( saddr_ptr )
- memcpy( saddr_ptr, saddr, saddrlen );
+ if (saddr_ptr) {
+ memcpy(saddr_ptr, saddr, saddrlen);
+ }
/* I hate static-length strings.. */
- host[HOST_NAME_MAX-1] = '\0';
+ host[HOST_NAME_MAX - 1] = '\0';
port[5] = '\0';
-
+
return fd;
}