aboutsummaryrefslogtreecommitdiffstats
path: root/bitlbee.c
diff options
context:
space:
mode:
authorIndent <please@skip.me>2015-02-19 02:47:20 -0300
committerdequis <dx@dxzone.com.ar>2015-02-20 19:50:54 -0300
commit5ebff60479fc7a9f7f50ac03b124c91d4e6ebe11 (patch)
tree9fc0d50cb1f4bc9768d9f00de94eafd876bb55b0 /bitlbee.c
parentaf359b4316f9d392c6b752495a1b2ed631576ed8 (diff)
Reindent everything to K&R style with tabs
Used uncrustify, with the configuration file in ./doc/uncrustify.cfg Commit author set to "Indent <please@skip.me>" so that it's easier to skip while doing git blame.
Diffstat (limited to 'bitlbee.c')
-rw-r--r--bitlbee.c393
1 files changed, 184 insertions, 209 deletions
diff --git a/bitlbee.c b/bitlbee.c
index dae57f93..98f2d9c9 100644
--- a/bitlbee.c
+++ b/bitlbee.c
@@ -1,4 +1,4 @@
- /********************************************************************\
+/********************************************************************\
* BitlBee -- An IRC to other IM-networks gateway *
* *
* Copyright 2002-2004 Wilmer van der Gaast and others *
@@ -33,42 +33,39 @@
#include <stdio.h>
#include <errno.h>
-static gboolean bitlbee_io_new_client( gpointer data, gint fd, b_input_condition condition );
+static gboolean bitlbee_io_new_client(gpointer data, gint fd, b_input_condition condition);
-static gboolean try_listen( struct addrinfo *res )
+static gboolean try_listen(struct addrinfo *res)
{
int i;
-
- global.listen_socket = socket( res->ai_family, res->ai_socktype, res->ai_protocol );
- if( global.listen_socket < 0 )
- {
- log_error( "socket" );
+
+ global.listen_socket = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
+ if (global.listen_socket < 0) {
+ log_error("socket");
return FALSE;
}
-#ifdef IPV6_V6ONLY
- if( res->ai_family == AF_INET6 )
- {
+#ifdef IPV6_V6ONLY
+ if (res->ai_family == AF_INET6) {
i = 0;
- setsockopt( global.listen_socket, IPPROTO_IPV6, IPV6_V6ONLY,
- (char *) &i, sizeof( i ) );
+ setsockopt(global.listen_socket, IPPROTO_IPV6, IPV6_V6ONLY,
+ (char *) &i, sizeof(i));
}
#endif
/* TIME_WAIT (?) sucks.. */
i = 1;
- setsockopt( global.listen_socket, SOL_SOCKET, SO_REUSEADDR, &i, sizeof( i ) );
+ setsockopt(global.listen_socket, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));
- i = bind( global.listen_socket, res->ai_addr, res->ai_addrlen );
- if( i == -1 )
- {
- closesocket( global.listen_socket );
+ i = bind(global.listen_socket, res->ai_addr, res->ai_addrlen);
+ if (i == -1) {
+ closesocket(global.listen_socket);
global.listen_socket = -1;
-
- log_error( "bind" );
+
+ log_error("bind");
return FALSE;
}
-
+
return TRUE;
}
@@ -77,295 +74,273 @@ int bitlbee_daemon_init()
struct addrinfo *res, hints, *addrinfo_bind;
int i;
FILE *fp;
-
- log_link( LOGLVL_ERROR, LOGOUTPUT_CONSOLE );
- log_link( LOGLVL_WARNING, LOGOUTPUT_CONSOLE );
-
- memset( &hints, 0, sizeof( hints ) );
+
+ log_link(LOGLVL_ERROR, LOGOUTPUT_CONSOLE);
+ log_link(LOGLVL_WARNING, LOGOUTPUT_CONSOLE);
+
+ memset(&hints, 0, sizeof(hints));
hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE
#ifdef AI_ADDRCONFIG
- /* Disabled as it may be doing more harm than good: this flag
- ignores IPv6 addresses on lo (which seems reasonable), but
- the result is that some clients (including irssi) try to
- connect to ::1 and fail.
- | AI_ADDRCONFIG */
+ /* Disabled as it may be doing more harm than good: this flag
+ ignores IPv6 addresses on lo (which seems reasonable), but
+ the result is that some clients (including irssi) try to
+ connect to ::1 and fail.
+ | AI_ADDRCONFIG */
#endif
;
- i = getaddrinfo( global.conf->iface_in, global.conf->port, &hints, &addrinfo_bind );
- if( i )
- {
- log_message( LOGLVL_ERROR, "Couldn't parse address `%s': %s",
- global.conf->iface_in, gai_strerror(i) );
+ i = getaddrinfo(global.conf->iface_in, global.conf->port, &hints, &addrinfo_bind);
+ if (i) {
+ log_message(LOGLVL_ERROR, "Couldn't parse address `%s': %s",
+ global.conf->iface_in, gai_strerror(i));
return -1;
}
global.listen_socket = -1;
-
+
/* Try IPv6 first (which will become an IPv6+IPv4 socket). */
- for( res = addrinfo_bind; res; res = res->ai_next )
- if( res->ai_family == AF_INET6 && try_listen( res ) )
+ for (res = addrinfo_bind; res; res = res->ai_next) {
+ if (res->ai_family == AF_INET6 && try_listen(res)) {
break;
-
+ }
+ }
+
/* The rest (so IPv4, I guess). */
- if( res == NULL )
- for( res = addrinfo_bind; res; res = res->ai_next )
- if( res->ai_family != AF_INET6 && try_listen( res ) )
+ if (res == NULL) {
+ for (res = addrinfo_bind; res; res = res->ai_next) {
+ if (res->ai_family != AF_INET6 && try_listen(res)) {
break;
-
- freeaddrinfo( addrinfo_bind );
-
- i = listen( global.listen_socket, 10 );
- if( i == -1 )
- {
- log_error( "listen" );
- return( -1 );
+ }
+ }
+ }
+
+ freeaddrinfo(addrinfo_bind);
+
+ i = listen(global.listen_socket, 10);
+ if (i == -1) {
+ log_error("listen");
+ return(-1);
}
-
- global.listen_watch_source_id = b_input_add( global.listen_socket, B_EV_IO_READ, bitlbee_io_new_client, NULL );
-
- if( !global.conf->nofork )
- {
+
+ global.listen_watch_source_id = b_input_add(global.listen_socket, B_EV_IO_READ, bitlbee_io_new_client, NULL);
+
+ if (!global.conf->nofork) {
i = fork();
- if( i == -1 )
- {
- log_error( "fork" );
- return( -1 );
+ if (i == -1) {
+ log_error("fork");
+ return(-1);
+ } else if (i != 0) {
+ exit(0);
}
- else if( i != 0 )
- exit( 0 );
-
+
setsid();
- i = chdir( "/" );
+ i = chdir("/");
/* Don't use i, just make gcc happy. :-/ */
-
- if( getenv( "_BITLBEE_RESTART_STATE" ) == NULL )
- for( i = 0; i < 3; i ++ )
- if( close( i ) == 0 )
- {
+
+ if (getenv("_BITLBEE_RESTART_STATE") == NULL) {
+ for (i = 0; i < 3; i++) {
+ if (close(i) == 0) {
/* Keep something bogus on those fd's just in case. */
- open( "/dev/null", O_WRONLY );
+ open("/dev/null", O_WRONLY);
}
+ }
+ }
+ }
+
+ if (global.conf->runmode == RUNMODE_FORKDAEMON) {
+ ipc_master_load_state(getenv("_BITLBEE_RESTART_STATE"));
}
-
- if( global.conf->runmode == RUNMODE_FORKDAEMON )
- ipc_master_load_state( getenv( "_BITLBEE_RESTART_STATE" ) );
- if( global.conf->runmode == RUNMODE_DAEMON || global.conf->runmode == RUNMODE_FORKDAEMON )
+ if (global.conf->runmode == RUNMODE_DAEMON || global.conf->runmode == RUNMODE_FORKDAEMON) {
ipc_master_listen_socket();
-
- if( ( fp = fopen( global.conf->pidfile, "w" ) ) )
- {
- fprintf( fp, "%d\n", (int) getpid() );
- fclose( fp );
}
- else
- {
- log_message( LOGLVL_WARNING, "Warning: Couldn't write PID to `%s'", global.conf->pidfile );
+
+ if ((fp = fopen(global.conf->pidfile, "w"))) {
+ fprintf(fp, "%d\n", (int) getpid());
+ fclose(fp);
+ } else {
+ log_message(LOGLVL_WARNING, "Warning: Couldn't write PID to `%s'", global.conf->pidfile);
}
-
- if( !global.conf->nofork )
- {
- log_link( LOGLVL_ERROR, LOGOUTPUT_SYSLOG );
- log_link( LOGLVL_WARNING, LOGOUTPUT_SYSLOG );
+
+ if (!global.conf->nofork) {
+ log_link(LOGLVL_ERROR, LOGOUTPUT_SYSLOG);
+ log_link(LOGLVL_WARNING, LOGOUTPUT_SYSLOG);
}
-
- return( 0 );
+
+ return(0);
}
-
+
int bitlbee_inetd_init()
{
- if( !irc_new( 0 ) )
- return( 1 );
-
- return( 0 );
+ if (!irc_new(0)) {
+ return(1);
+ }
+
+ return(0);
}
-gboolean bitlbee_io_current_client_read( gpointer data, gint fd, b_input_condition cond )
+gboolean bitlbee_io_current_client_read(gpointer data, gint fd, b_input_condition cond)
{
irc_t *irc = data;
char line[513];
int st;
-
- st = read( irc->fd, line, sizeof( line ) - 1 );
- if( st == 0 )
- {
- irc_abort( irc, 1, "Connection reset by peer" );
+
+ st = read(irc->fd, line, sizeof(line) - 1);
+ if (st == 0) {
+ irc_abort(irc, 1, "Connection reset by peer");
return FALSE;
- }
- else if( st < 0 )
- {
- if( sockerr_again() )
- {
+ } else if (st < 0) {
+ if (sockerr_again()) {
return TRUE;
- }
- else
- {
- irc_abort( irc, 1, "Read error: %s", strerror( errno ) );
+ } else {
+ irc_abort(irc, 1, "Read error: %s", strerror(errno));
return FALSE;
}
}
-
+
line[st] = '\0';
- if( irc->readbuffer == NULL )
- {
- irc->readbuffer = g_strdup( line );
- }
- else
- {
- irc->readbuffer = g_renew( char, irc->readbuffer, strlen( irc->readbuffer ) + strlen ( line ) + 1 );
- strcpy( ( irc->readbuffer + strlen( irc->readbuffer ) ), line );
+ if (irc->readbuffer == NULL) {
+ irc->readbuffer = g_strdup(line);
+ } else {
+ irc->readbuffer = g_renew(char, irc->readbuffer, strlen(irc->readbuffer) + strlen(line) + 1);
+ strcpy((irc->readbuffer + strlen(irc->readbuffer)), line);
}
-
- irc_process( irc );
-
+
+ irc_process(irc);
+
/* Normally, irc_process() shouldn't call irc_free() but irc_abort(). Just in case: */
- if( !g_slist_find( irc_connection_list, irc ) )
- {
- log_message( LOGLVL_WARNING, "Abnormal termination of connection with fd %d.", fd );
+ if (!g_slist_find(irc_connection_list, irc)) {
+ log_message(LOGLVL_WARNING, "Abnormal termination of connection with fd %d.", fd);
return FALSE;
- }
-
+ }
+
/* Very naughty, go read the RFCs! >:) */
- if( irc->readbuffer && ( strlen( irc->readbuffer ) > 1024 ) )
- {
- irc_abort( irc, 0, "Maximum line length exceeded" );
+ if (irc->readbuffer && (strlen(irc->readbuffer) > 1024)) {
+ irc_abort(irc, 0, "Maximum line length exceeded");
return FALSE;
}
-
+
return TRUE;
}
-gboolean bitlbee_io_current_client_write( gpointer data, gint fd, b_input_condition cond )
+gboolean bitlbee_io_current_client_write(gpointer data, gint fd, b_input_condition cond)
{
irc_t *irc = data;
int st, size;
char *temp;
- if( irc->sendbuffer == NULL )
- return FALSE;
-
- size = strlen( irc->sendbuffer );
- st = write( irc->fd, irc->sendbuffer, size );
-
- if( st == 0 || ( st < 0 && !sockerr_again() ) )
- {
- irc_abort( irc, 1, "Write error: %s", strerror( errno ) );
+ if (irc->sendbuffer == NULL) {
return FALSE;
}
- else if( st < 0 ) /* && sockerr_again() */
- {
+
+ size = strlen(irc->sendbuffer);
+ st = write(irc->fd, irc->sendbuffer, size);
+
+ if (st == 0 || (st < 0 && !sockerr_again())) {
+ irc_abort(irc, 1, "Write error: %s", strerror(errno));
+ return FALSE;
+ } else if (st < 0) { /* && sockerr_again() */
return TRUE;
}
-
- if( st == size )
- {
- g_free( irc->sendbuffer );
+
+ if (st == size) {
+ g_free(irc->sendbuffer);
irc->sendbuffer = NULL;
irc->w_watch_source_id = 0;
-
+
return FALSE;
- }
- else
- {
- temp = g_strdup( irc->sendbuffer + st );
- g_free( irc->sendbuffer );
+ } else {
+ temp = g_strdup(irc->sendbuffer + st);
+ g_free(irc->sendbuffer);
irc->sendbuffer = temp;
-
+
return TRUE;
}
}
-static gboolean bitlbee_io_new_client( gpointer data, gint fd, b_input_condition condition )
+static gboolean bitlbee_io_new_client(gpointer data, gint fd, b_input_condition condition)
{
- socklen_t size = sizeof( struct sockaddr_in );
+ socklen_t size = sizeof(struct sockaddr_in);
struct sockaddr_in conn_info;
- int new_socket = accept( global.listen_socket, (struct sockaddr *) &conn_info, &size );
-
- if( new_socket == -1 )
- {
- log_message( LOGLVL_WARNING, "Could not accept new connection: %s", strerror( errno ) );
+ int new_socket = accept(global.listen_socket, (struct sockaddr *) &conn_info, &size);
+
+ if (new_socket == -1) {
+ log_message(LOGLVL_WARNING, "Could not accept new connection: %s", strerror(errno));
return TRUE;
}
-
- if( global.conf->runmode == RUNMODE_FORKDAEMON )
- {
+
+ if (global.conf->runmode == RUNMODE_FORKDAEMON) {
pid_t client_pid = 0;
int fds[2];
-
- if( socketpair( AF_UNIX, SOCK_STREAM, 0, fds ) == -1 )
- {
- log_message( LOGLVL_WARNING, "Could not create IPC socket for client: %s", strerror( errno ) );
+
+ if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) == -1) {
+ log_message(LOGLVL_WARNING, "Could not create IPC socket for client: %s", strerror(errno));
fds[0] = fds[1] = -1;
}
-
- sock_make_nonblocking( fds[0] );
- sock_make_nonblocking( fds[1] );
-
+
+ sock_make_nonblocking(fds[0]);
+ sock_make_nonblocking(fds[1]);
+
client_pid = fork();
-
- if( client_pid > 0 && fds[0] != -1 )
- {
+
+ if (client_pid > 0 && fds[0] != -1) {
struct bitlbee_child *child;
-
+
/* TODO: Stuff like this belongs in ipc.c. */
- child = g_new0( struct bitlbee_child, 1 );
+ child = g_new0(struct bitlbee_child, 1);
child->pid = client_pid;
child->ipc_fd = fds[0];
- child->ipc_inpa = b_input_add( child->ipc_fd, B_EV_IO_READ, ipc_master_read, child );
+ child->ipc_inpa = b_input_add(child->ipc_fd, B_EV_IO_READ, ipc_master_read, child);
child->to_fd = -1;
- child_list = g_slist_append( child_list, child );
-
- log_message( LOGLVL_INFO, "Creating new subprocess with pid %d.", (int) client_pid );
-
+ child_list = g_slist_append(child_list, child);
+
+ log_message(LOGLVL_INFO, "Creating new subprocess with pid %d.", (int) client_pid);
+
/* Close some things we don't need in the parent process. */
- close( new_socket );
- close( fds[1] );
- }
- else if( client_pid == 0 )
- {
+ close(new_socket);
+ close(fds[1]);
+ } else if (client_pid == 0) {
irc_t *irc;
-
+
b_main_init();
-
+
/* Close the listening socket, we're a client. */
- close( global.listen_socket );
- b_event_remove( global.listen_watch_source_id );
-
+ close(global.listen_socket);
+ b_event_remove(global.listen_watch_source_id);
+
/* Make the connection. */
- irc = irc_new( new_socket );
-
+ irc = irc_new(new_socket);
+
/* We can store the IPC fd there now. */
global.listen_socket = fds[1];
- global.listen_watch_source_id = b_input_add( fds[1], B_EV_IO_READ, ipc_child_read, irc );
-
- close( fds[0] );
-
+ global.listen_watch_source_id = b_input_add(fds[1], B_EV_IO_READ, ipc_child_read, irc);
+
+ close(fds[0]);
+
ipc_master_free_all();
}
+ } else {
+ log_message(LOGLVL_INFO, "Creating new connection with fd %d.", new_socket);
+ irc_new(new_socket);
}
- else
- {
- log_message( LOGLVL_INFO, "Creating new connection with fd %d.", new_socket );
- irc_new( new_socket );
- }
-
+
return TRUE;
}
-gboolean bitlbee_shutdown( gpointer data, gint fd, b_input_condition cond )
+gboolean bitlbee_shutdown(gpointer data, gint fd, b_input_condition cond)
{
/* Send the message here with now=TRUE to ensure it arrives */
- irc_write_all( TRUE, "ERROR :Closing link: BitlBee server shutting down" );
+ irc_write_all(TRUE, "ERROR :Closing link: BitlBee server shutting down");
/* Try to save data for all active connections (if desired). */
- while( irc_connection_list != NULL )
- irc_abort( irc_connection_list->data, TRUE, NULL );
-
+ while (irc_connection_list != NULL) {
+ irc_abort(irc_connection_list->data, TRUE, NULL);
+ }
+
/* We'll only reach this point when not running in inetd mode: */
b_main_quit();
-
+
return FALSE;
}