Changes in / [ae3dc99:f1b7711]
- Files:
-
- 11 deleted
- 43 edited
Legend:
- Unmodified
- Added
- Removed
-
Makefile
rae3dc99 rf1b7711 10 10 11 11 # Program variables 12 objects = account.o bitlbee.o chat.o crypting.o dcc.ohelp.o ipc.o irc.o irc_commands.o nick.o query.o root_commands.o set.o storage.o $(STORAGE_OBJS) user.o13 headers = account.h bitlbee.h commands.h conf.h config.h crypting.h help.h ipc.h irc.h log.h nick.h query.h set.h sock.h storage.h user.h lib/events.h lib/ ftutil.h lib/http_client.h lib/ini.h lib/md5.h lib/misc.h lib/proxy.h lib/sha1.h lib/ssl_client.h lib/url.h protocols/ft.h protocols/nogaim.h12 objects = account.o bitlbee.o chat.o crypting.o help.o ipc.o irc.o irc_commands.o nick.o query.o root_commands.o set.o storage.o $(STORAGE_OBJS) user.o 13 headers = account.h bitlbee.h commands.h conf.h config.h crypting.h help.h ipc.h irc.h log.h nick.h query.h set.h sock.h storage.h user.h lib/events.h lib/http_client.h lib/ini.h lib/md5.h lib/misc.h lib/proxy.h lib/sha1.h lib/ssl_client.h lib/url.h protocols/nogaim.h 14 14 subdirs = lib protocols 15 15 -
bitlbee.c
rae3dc99 rf1b7711 121 121 } 122 122 123 global.listen_watch_source_id = b_input_add( global.listen_socket, B_EV_IO_READ, bitlbee_io_new_client, NULL );123 global.listen_watch_source_id = b_input_add( global.listen_socket, GAIM_INPUT_READ, bitlbee_io_new_client, NULL ); 124 124 125 125 #ifndef _WIN32 … … 321 321 child->pid = client_pid; 322 322 child->ipc_fd = fds[0]; 323 child->ipc_inpa = b_input_add( child->ipc_fd, B_EV_IO_READ, ipc_master_read, child );323 child->ipc_inpa = b_input_add( child->ipc_fd, GAIM_INPUT_READ, ipc_master_read, child ); 324 324 child_list = g_slist_append( child_list, child ); 325 325 … … 349 349 /* We can store the IPC fd there now. */ 350 350 global.listen_socket = fds[1]; 351 global.listen_watch_source_id = b_input_add( fds[1], B_EV_IO_READ, ipc_child_read, irc );351 global.listen_watch_source_id = b_input_add( fds[1], GAIM_INPUT_READ, ipc_child_read, irc ); 352 352 353 353 close( fds[0] ); -
conf.c
rae3dc99 rf1b7711 63 63 conf->ping_timeout = 300; 64 64 conf->user = NULL; 65 conf->ft_max_size = SIZE_MAX;66 conf->ft_max_kbps = G_MAXUINT;67 conf->ft_listen = NULL;68 65 conf->protocols = NULL; 69 66 proxytype = 0; … … 318 315 conf->user = g_strdup( ini->value ); 319 316 } 320 else if( g_strcasecmp( ini->key, "ft_max_size" ) == 0 )321 {322 size_t ft_max_size;323 if( sscanf( ini->value, "%zu", &ft_max_size ) != 1 )324 {325 fprintf( stderr, "Invalid %s value: %s\n", ini->key, ini->value );326 return 0;327 }328 conf->ft_max_size = ft_max_size;329 }330 else if( g_strcasecmp( ini->key, "ft_max_kbps" ) == 0 )331 {332 if( sscanf( ini->value, "%d", &i ) != 1 )333 {334 fprintf( stderr, "Invalid %s value: %s\n", ini->key, ini->value );335 return 0;336 }337 conf->ft_max_kbps = i;338 }339 else if( g_strcasecmp( ini->key, "ft_listen" ) == 0 )340 {341 g_free( conf->ft_listen );342 conf->ft_listen = g_strdup( ini->value );343 }344 317 else if( g_strcasecmp( ini->key, "protocols" ) == 0 ) 345 318 { -
conf.h
rae3dc99 rf1b7711 50 50 int ping_timeout; 51 51 char *user; 52 size_t ft_max_size;53 int ft_max_kbps;54 char *ft_listen;55 52 char **protocols; 56 53 } conf_t; -
configure
rae3dc99 rf1b7711 27 27 yahoo=1 28 28 twitter=1 29 purple=030 29 31 30 debug=0 … … 69 68 --yahoo=0/1 Disable/enable Yahoo part $yahoo 70 69 --twitter=0/1 Disable/enable Twitter part $twitter 71 72 --purple=0/1 Disable/enable libpurple support $purple73 70 74 71 --debug=0/1 Disable/enable debugging $debug … … 511 508 protoobjs='' 512 509 513 if [ "$purple" = 0 ]; then514 echo '#undef WITH_PURPLE' >> config.h515 else516 if ! $PKG_CONFIG purple; then517 echo518 echo 'Cannot find libpurple development libraries, aborting. (Install libpurple-dev?)'519 exit 1520 fi521 echo '#define WITH_PURPLE' >> config.h522 cat<<EOF>>Makefile.settings523 EFLAGS += $($PKG_CONFIG purple --libs)524 PURPLE_CFLAGS += $($PKG_CONFIG purple --cflags)525 EOF526 protocols=$protocols'purple '527 protoobjs=$protoobjs'purple_mod.o '528 529 # Having both libpurple and native IM modules in one binary may530 # do strange things. Let's not do that.531 msn=0532 jabber=0533 oscar=0534 yahoo=0535 fi536 537 510 if [ "$msn" = 0 ]; then 538 511 echo '#undef WITH_MSN' >> config.h -
debian/rules
rae3dc99 rf1b7711 1 1 #!/usr/bin/make -f 2 2 3 BITLBEE_CONFIGURE_FLAGS ?=4 3 DEBUG ?= 0 5 4 … … 15 14 build-arch-stamp: 16 15 [ -d debian ] 17 ./configure --debug=$(DEBUG) --prefix=/usr --etcdir=/etc/bitlbee --events=libevent $(BITLBEE_CONFIGURE_FLAGS)16 ./configure --debug=$(DEBUG) --prefix=/usr --etcdir=/etc/bitlbee --events=libevent 18 17 $(MAKE) 19 18 # $(MAKE) -C doc/ all -
doc/user-guide/commands.xml
rae3dc99 rf1b7711 1120 1120 1121 1121 </bitlbee-command> 1122 1123 <bitlbee-command name="transfers">1124 <short-description>Monitor, cancel, or reject file transfers</short-description>1125 <syntax>transfers [<cancel> id | <reject>]</syntax>1126 1127 <description>1128 <para>1129 Without parameters the currently pending file transfers and their status will be listed. Available actions are <emphasis>cancel</emphasis> and <emphasis>reject</emphasis>. See <emphasis>help transfers <action></emphasis> for more information.1130 </para>1131 1132 <ircexample>1133 <ircline nick="ulim">transfers</ircline>1134 </ircexample>1135 </description>1136 1137 <bitlbee-command name="cancel">1138 <short-description>Cancels the file transfer with the given id</short-description>1139 <syntax>transfers <cancel> id</syntax>1140 1141 <description>1142 <para>Cancels the file transfer with the given id</para>1143 </description>1144 1145 <ircexample>1146 <ircline nick="ulim">transfers cancel 1</ircline>1147 <ircline nick="root">Canceling file transfer for test</ircline>1148 </ircexample>1149 </bitlbee-command>1150 1151 <bitlbee-command name="reject">1152 <short-description>Rejects all incoming transfers</short-description>1153 <syntax>transfers <reject></syntax>1154 1155 <description>1156 <para>Rejects all incoming (not already transferring) file transfers. Since you probably have only one incoming transfer at a time, no id is neccessary. Or is it?</para>1157 </description>1158 1159 <ircexample>1160 <ircline nick="ulim">transfers reject</ircline>1161 </ircexample>1162 </bitlbee-command>1163 </bitlbee-command>1164 1165 1122 </chapter> -
help.c
rae3dc99 rf1b7711 2 2 * BitlBee -- An IRC to other IM-networks gateway * 3 3 * * 4 * Copyright 2002-200 9Wilmer van der Gaast and others *4 * Copyright 2002-2005 Wilmer van der Gaast and others * 5 5 \********************************************************************/ 6 6 … … 169 169 return NULL; 170 170 } 171 172 int help_add_mem( help_t **help, const char *title, const char *content )173 {174 help_t *h, *l = NULL;175 176 for( h = *help; h; h = h->next )177 {178 if( g_strcasecmp( h->title, title ) == 0 )179 return 0;180 181 l = h;182 }183 184 if( l )185 h = l->next = g_new0( struct help, 1 );186 else187 *help = h = g_new0( struct help, 1 );188 h->fd = -1;189 h->title = g_strdup( title );190 h->length = strlen( content );191 h->offset.mem_offset = g_strdup( content );192 193 return 1;194 } -
help.h
rae3dc99 rf1b7711 46 46 void help_free( help_t **help ); 47 47 char *help_get( help_t **help, char *title ); 48 int help_add_mem( help_t **help, const char *title, const char *content_ );49 48 50 49 #endif -
ipc.c
rae3dc99 rf1b7711 514 514 } 515 515 516 child->ipc_inpa = b_input_add( child->ipc_fd, B_EV_IO_READ, ipc_master_read, child );516 child->ipc_inpa = b_input_add( child->ipc_fd, GAIM_INPUT_READ, ipc_master_read, child ); 517 517 518 518 child_list = g_slist_append( child_list, child ); … … 552 552 } 553 553 554 b_input_add( serversock, B_EV_IO_READ, new_ipc_client, NULL );554 b_input_add( serversock, GAIM_INPUT_READ, new_ipc_client, NULL ); 555 555 556 556 return 1; … … 597 597 return 0; 598 598 } 599 child->ipc_inpa = b_input_add( child->ipc_fd, B_EV_IO_READ, ipc_master_read, child );599 child->ipc_inpa = b_input_add( child->ipc_fd, GAIM_INPUT_READ, ipc_master_read, child ); 600 600 601 601 child_list = g_slist_append( child_list, child ); -
irc.c
rae3dc99 rf1b7711 29 29 #include "crypting.h" 30 30 #include "ipc.h" 31 #include "dcc.h"32 31 33 32 static gboolean irc_userping( gpointer _irc, int fd, b_input_condition cond ); … … 126 125 sock_make_nonblocking( irc->fd ); 127 126 128 irc->r_watch_source_id = b_input_add( irc->fd, B_EV_IO_READ, bitlbee_io_current_client_read, irc );127 irc->r_watch_source_id = b_input_add( irc->fd, GAIM_INPUT_READ, bitlbee_io_current_client_read, irc ); 129 128 130 129 irc->status = USTATUS_OFFLINE; … … 214 213 /* Evaluator sets the iconv/oconv structures. */ 215 214 set_eval_charset( set_find( &irc->set, "charset" ), set_getstr( &irc->set, "charset" ) ); 216 217 nogaim_init();218 215 219 216 return( irc ); … … 698 695 in the event queue. */ 699 696 /* Really can't be done as long as the code doesn't do error checking very well: 700 if( bitlbee_io_current_client_write( irc, irc->fd, B_EV_IO_WRITE ) ) */697 if( bitlbee_io_current_client_write( irc, irc->fd, GAIM_INPUT_WRITE ) ) */ 701 698 702 699 /* So just always do it via the event handler. */ 703 irc->w_watch_source_id = b_input_add( irc->fd, B_EV_IO_WRITE, bitlbee_io_current_client_write, irc );700 irc->w_watch_source_id = b_input_add( irc->fd, GAIM_INPUT_WRITE, bitlbee_io_current_client_write, irc ); 704 701 } 705 702 … … 727 724 if( now ) 728 725 { 729 bitlbee_io_current_client_write( irc, irc->fd, B_EV_IO_WRITE );726 bitlbee_io_current_client_write( irc, irc->fd, GAIM_INPUT_WRITE ); 730 727 } 731 728 temp = temp->next; … … 1128 1125 return( 1 ); 1129 1126 } 1130 else if( g_strncasecmp( s + 1, "DCC", 3 ) == 0 )1131 {1132 if( u && u->ic && u->ic->acc->prpl->transfer_request )1133 {1134 file_transfer_t *ft = dcc_request( u->ic, s + 5 );1135 if ( ft )1136 u->ic->acc->prpl->transfer_request( u->ic, ft, u->handle );1137 }1138 return( 1 );1139 }1140 1127 else 1141 1128 { 1142 irc_usermsg( irc, " Supported CTCPs are ACTION, VERSION, PING, TYPING, DCC" );1129 irc_usermsg( irc, "Non-ACTION CTCP's aren't supported" ); 1143 1130 return( 0 ); 1144 1131 } -
irc.h
rae3dc99 rf1b7711 83 83 struct query *queries; 84 84 struct account *accounts; 85 GSList *file_transfers;86 85 struct chat *chatrooms; 87 86 -
lib/Makefile
rae3dc99 rf1b7711 10 10 11 11 # [SH] Program variables 12 objects = arc.o base64.o $(EVENT_HANDLER) http_client.o ini.o md5.o misc.o proxy.o sha1.o $(SSL_CLIENT) url.o xmltree.o ftutil.o12 objects = arc.o base64.o $(EVENT_HANDLER) http_client.o ini.o md5.o misc.o proxy.o sha1.o $(SSL_CLIENT) url.o xmltree.o 13 13 14 14 CFLAGS += -Wall -
lib/events.h
rae3dc99 rf1b7711 48 48 the given callback function. */ 49 49 typedef enum { 50 B_EV_IO_READ = 1 << 0, 51 B_EV_IO_WRITE = 1 << 1, 52 B_EV_FLAG_FORCE_ONCE = 1 << 16, 53 B_EV_FLAG_FORCE_REPEAT = 1 << 17, 50 GAIM_INPUT_READ = 1 << 1, 51 GAIM_INPUT_WRITE = 1 << 2 54 52 } b_input_condition; 55 53 typedef gboolean (*b_event_handler)(gpointer data, gint fd, b_input_condition cond); -
lib/events_glib.c
rae3dc99 rf1b7711 49 49 b_event_handler function; 50 50 gpointer data; 51 guint flags;52 51 } GaimIOClosure; 53 52 … … 77 76 78 77 if (condition & GAIM_READ_COND) 79 gaim_cond |= B_EV_IO_READ;78 gaim_cond |= GAIM_INPUT_READ; 80 79 if (condition & GAIM_WRITE_COND) 81 gaim_cond |= B_EV_IO_WRITE;80 gaim_cond |= GAIM_INPUT_WRITE; 82 81 83 82 event_debug( "gaim_io_invoke( %d, %d, 0x%x )\n", g_io_channel_unix_get_fd(source), condition, data ); … … 88 87 event_debug( "Returned FALSE, cancelling.\n" ); 89 88 90 if (closure->flags & B_EV_FLAG_FORCE_ONCE) 91 return FALSE; 92 else if (closure->flags & B_EV_FLAG_FORCE_REPEAT) 93 return TRUE; 94 else 95 return st; 89 return st; 96 90 } 97 91 … … 111 105 closure->function = function; 112 106 closure->data = data; 113 closure->flags = condition;114 107 115 if (condition & B_EV_IO_READ)108 if (condition & GAIM_INPUT_READ) 116 109 cond |= GAIM_READ_COND; 117 if (condition & B_EV_IO_WRITE)110 if (condition & GAIM_INPUT_WRITE) 118 111 cond |= GAIM_WRITE_COND; 119 112 -
lib/events_libevent.c
rae3dc99 rf1b7711 60 60 b_event_handler function; 61 61 void *data; 62 guint flags;63 62 }; 64 63 … … 127 126 { 128 127 if( event & EV_READ ) 129 cond |= B_EV_IO_READ;128 cond |= GAIM_INPUT_READ; 130 129 if( event & EV_WRITE ) 131 cond |= B_EV_IO_WRITE;130 cond |= GAIM_INPUT_WRITE; 132 131 } 133 132 … … 151 150 return; 152 151 } 153 else if( !st && !( b_ev->flags & B_EV_FLAG_FORCE_REPEAT ))152 else if( !st ) 154 153 { 155 154 event_debug( "Handler returned FALSE: " ); … … 175 174 event_debug( "b_input_add( %d, %d, 0x%x, 0x%x ) ", fd, condition, function, data ); 176 175 177 if( ( condition & B_EV_IO_READ && ( b_ev = g_hash_table_lookup( read_hash, &fd ) ) ) ||178 ( condition & B_EV_IO_WRITE && ( b_ev = g_hash_table_lookup( write_hash, &fd ) ) ) )176 if( ( condition & GAIM_INPUT_READ && ( b_ev = g_hash_table_lookup( read_hash, &fd ) ) ) || 177 ( condition & GAIM_INPUT_WRITE && ( b_ev = g_hash_table_lookup( write_hash, &fd ) ) ) ) 179 178 { 180 179 /* We'll stick with this libevent entry, but give it a new BitlBee id. */ … … 199 198 200 199 out_cond = EV_PERSIST; 201 if( condition & B_EV_IO_READ )200 if( condition & GAIM_INPUT_READ ) 202 201 out_cond |= EV_READ; 203 if( condition & B_EV_IO_WRITE )202 if( condition & GAIM_INPUT_WRITE ) 204 203 out_cond |= EV_WRITE; 205 204 … … 213 212 } 214 213 215 b_ev->flags = condition;216 214 g_hash_table_insert( id_hash, &b_ev->id, b_ev ); 217 215 return b_ev->id; -
lib/http_client.c
rae3dc99 rf1b7711 149 149 if( req->bytes_written < req->request_length ) 150 150 req->inpa = b_input_add( source, 151 req->ssl ? ssl_getdirection( req->ssl ) : B_EV_IO_WRITE,151 req->ssl ? ssl_getdirection( req->ssl ) : GAIM_INPUT_WRITE, 152 152 http_connected, req ); 153 153 else 154 req->inpa = b_input_add( source, B_EV_IO_READ, http_incoming_data, req );154 req->inpa = b_input_add( source, GAIM_INPUT_READ, http_incoming_data, req ); 155 155 156 156 return FALSE; … … 234 234 /* There will be more! */ 235 235 req->inpa = b_input_add( req->fd, 236 req->ssl ? ssl_getdirection( req->ssl ) : B_EV_IO_READ,236 req->ssl ? ssl_getdirection( req->ssl ) : GAIM_INPUT_READ, 237 237 http_incoming_data, req ); 238 238 -
lib/proxy.c
rae3dc99 rf1b7711 91 91 b_event_remove(phb->inpa); 92 92 if( phb->proxy_func ) 93 phb->proxy_func(phb->proxy_data, -1, B_EV_IO_READ);93 phb->proxy_func(phb->proxy_data, -1, GAIM_INPUT_READ); 94 94 else { 95 phb->func(phb->data, -1, B_EV_IO_READ);95 phb->func(phb->data, -1, GAIM_INPUT_READ); 96 96 g_free(phb); 97 97 } … … 102 102 b_event_remove(phb->inpa); 103 103 if( phb->proxy_func ) 104 phb->proxy_func(phb->proxy_data, source, B_EV_IO_READ);104 phb->proxy_func(phb->proxy_data, source, GAIM_INPUT_READ); 105 105 else { 106 phb->func(phb->data, source, B_EV_IO_READ);106 phb->func(phb->data, source, GAIM_INPUT_READ); 107 107 g_free(phb); 108 108 } … … 147 147 return -1; 148 148 } else { 149 phb->inpa = b_input_add(fd, B_EV_IO_WRITE, gaim_io_connected, phb);149 phb->inpa = b_input_add(fd, GAIM_INPUT_WRITE, gaim_io_connected, phb); 150 150 phb->fd = fd; 151 151 … … 179 179 if ((memcmp(HTTP_GOODSTRING, inputline, strlen(HTTP_GOODSTRING)) == 0) || 180 180 (memcmp(HTTP_GOODSTRING2, inputline, strlen(HTTP_GOODSTRING2)) == 0)) { 181 phb->func(phb->data, source, B_EV_IO_READ);181 phb->func(phb->data, source, GAIM_INPUT_READ); 182 182 g_free(phb->host); 183 183 g_free(phb); … … 186 186 187 187 close(source); 188 phb->func(phb->data, -1, B_EV_IO_READ);188 phb->func(phb->data, -1, GAIM_INPUT_READ); 189 189 g_free(phb->host); 190 190 g_free(phb); … … 204 204 if (getsockopt(source, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { 205 205 close(source); 206 phb->func(phb->data, -1, B_EV_IO_READ);206 phb->func(phb->data, -1, GAIM_INPUT_READ); 207 207 g_free(phb->host); 208 208 g_free(phb); … … 215 215 if (send(source, cmd, strlen(cmd), 0) < 0) { 216 216 close(source); 217 phb->func(phb->data, -1, B_EV_IO_READ);217 phb->func(phb->data, -1, GAIM_INPUT_READ); 218 218 g_free(phb->host); 219 219 g_free(phb); … … 230 230 if (send(source, cmd, strlen(cmd), 0) < 0) { 231 231 close(source); 232 phb->func(phb->data, -1, B_EV_IO_READ);232 phb->func(phb->data, -1, GAIM_INPUT_READ); 233 233 g_free(phb->host); 234 234 g_free(phb); … … 240 240 if (send(source, cmd, strlen(cmd), 0) < 0) { 241 241 close(source); 242 phb->func(phb->data, -1, B_EV_IO_READ);243 g_free(phb->host); 244 g_free(phb); 245 return FALSE; 246 } 247 248 phb->inpa = b_input_add(source, B_EV_IO_READ, http_canread, phb);242 phb->func(phb->data, -1, GAIM_INPUT_READ); 243 g_free(phb->host); 244 g_free(phb); 245 return FALSE; 246 } 247 248 phb->inpa = b_input_add(source, GAIM_INPUT_READ, http_canread, phb); 249 249 250 250 return FALSE; … … 273 273 memset(packet, 0, sizeof(packet)); 274 274 if (read(source, packet, 9) >= 4 && packet[1] == 90) { 275 phb->func(phb->data, source, B_EV_IO_READ);275 phb->func(phb->data, source, GAIM_INPUT_READ); 276 276 g_free(phb->host); 277 277 g_free(phb); … … 280 280 281 281 close(source); 282 phb->func(phb->data, -1, B_EV_IO_READ);282 phb->func(phb->data, -1, GAIM_INPUT_READ); 283 283 g_free(phb->host); 284 284 g_free(phb); … … 299 299 if (getsockopt(source, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { 300 300 close(source); 301 phb->func(phb->data, -1, B_EV_IO_READ);301 phb->func(phb->data, -1, GAIM_INPUT_READ); 302 302 g_free(phb->host); 303 303 g_free(phb); … … 309 309 if (!(hp = gethostbyname(phb->host))) { 310 310 close(source); 311 phb->func(phb->data, -1, B_EV_IO_READ);311 phb->func(phb->data, -1, GAIM_INPUT_READ); 312 312 g_free(phb->host); 313 313 g_free(phb); … … 326 326 if (write(source, packet, 9) != 9) { 327 327 close(source); 328 phb->func(phb->data, -1, B_EV_IO_READ);329 g_free(phb->host); 330 g_free(phb); 331 return FALSE; 332 } 333 334 phb->inpa = b_input_add(source, B_EV_IO_READ, s4_canread, phb);328 phb->func(phb->data, -1, GAIM_INPUT_READ); 329 g_free(phb->host); 330 g_free(phb); 331 return FALSE; 332 } 333 334 phb->inpa = b_input_add(source, GAIM_INPUT_READ, s4_canread, phb); 335 335 336 336 return FALSE; … … 359 359 if (read(source, buf, 10) < 10) { 360 360 close(source); 361 phb->func(phb->data, -1, B_EV_IO_READ);361 phb->func(phb->data, -1, GAIM_INPUT_READ); 362 362 g_free(phb->host); 363 363 g_free(phb); … … 366 366 if ((buf[0] != 0x05) || (buf[1] != 0x00)) { 367 367 close(source); 368 phb->func(phb->data, -1, B_EV_IO_READ);369 g_free(phb->host); 370 g_free(phb); 371 return FALSE; 372 } 373 374 phb->func(phb->data, source, B_EV_IO_READ);368 phb->func(phb->data, -1, GAIM_INPUT_READ); 369 g_free(phb->host); 370 g_free(phb); 371 return FALSE; 372 } 373 374 phb->func(phb->data, source, GAIM_INPUT_READ); 375 375 g_free(phb->host); 376 376 g_free(phb); … … 396 396 if (write(source, buf, (5 + strlen(phb->host) + 2)) < (5 + strlen(phb->host) + 2)) { 397 397 close(source); 398 phb->func(phb->data, -1, B_EV_IO_READ);398 phb->func(phb->data, -1, GAIM_INPUT_READ); 399 399 g_free(phb->host); 400 400 g_free(phb); … … 402 402 } 403 403 404 phb->inpa = b_input_add(source, B_EV_IO_READ, s5_canread_again, phb);404 phb->inpa = b_input_add(source, GAIM_INPUT_READ, s5_canread_again, phb); 405 405 } 406 406 … … 414 414 if (read(source, buf, 2) < 2) { 415 415 close(source); 416 phb->func(phb->data, -1, B_EV_IO_READ);416 phb->func(phb->data, -1, GAIM_INPUT_READ); 417 417 g_free(phb->host); 418 418 g_free(phb); … … 422 422 if ((buf[0] != 0x01) || (buf[1] != 0x00)) { 423 423 close(source); 424 phb->func(phb->data, -1, B_EV_IO_READ);424 phb->func(phb->data, -1, GAIM_INPUT_READ); 425 425 g_free(phb->host); 426 426 g_free(phb); … … 442 442 if (read(source, buf, 2) < 2) { 443 443 close(source); 444 phb->func(phb->data, -1, B_EV_IO_READ);444 phb->func(phb->data, -1, GAIM_INPUT_READ); 445 445 g_free(phb->host); 446 446 g_free(phb); … … 450 450 if ((buf[0] != 0x05) || (buf[1] == 0xff)) { 451 451 close(source); 452 phb->func(phb->data, -1, B_EV_IO_READ);452 phb->func(phb->data, -1, GAIM_INPUT_READ); 453 453 g_free(phb->host); 454 454 g_free(phb); … … 465 465 if (write(source, buf, 3 + i + j) < 3 + i + j) { 466 466 close(source); 467 phb->func(phb->data, -1, B_EV_IO_READ);467 phb->func(phb->data, -1, GAIM_INPUT_READ); 468 468 g_free(phb->host); 469 469 g_free(phb); … … 471 471 } 472 472 473 phb->inpa = b_input_add(source, B_EV_IO_READ, s5_readauth, phb);473 phb->inpa = b_input_add(source, GAIM_INPUT_READ, s5_readauth, phb); 474 474 } else { 475 475 s5_sendconnect(phb, source); … … 491 491 if (getsockopt(source, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { 492 492 close(source); 493 phb->func(phb->data, -1, B_EV_IO_READ);493 phb->func(phb->data, -1, GAIM_INPUT_READ); 494 494 g_free(phb->host); 495 495 g_free(phb); … … 513 513 if (write(source, buf, i) < i) { 514 514 close(source); 515 phb->func(phb->data, -1, B_EV_IO_READ);516 g_free(phb->host); 517 g_free(phb); 518 return FALSE; 519 } 520 521 phb->inpa = b_input_add(source, B_EV_IO_READ, s5_canread, phb);515 phb->func(phb->data, -1, GAIM_INPUT_READ); 516 g_free(phb->host); 517 g_free(phb); 518 return FALSE; 519 } 520 521 phb->inpa = b_input_add(source, GAIM_INPUT_READ, s5_canread, phb); 522 522 523 523 return FALSE; -
lib/ssl_bogus.c
rae3dc99 rf1b7711 59 59 b_input_condition ssl_getdirection( void *conn ) 60 60 { 61 return B_EV_IO_READ;61 return GAIM_INPUT_READ; 62 62 } 63 63 -
lib/ssl_client.h
rae3dc99 rf1b7711 71 71 G_MODULE_EXPORT int ssl_getfd( void *conn ); 72 72 73 /* This function returns B_EV_IO_READ/WRITE. With SSL connections it's73 /* This function returns GAIM_INPUT_READ/WRITE. With SSL connections it's 74 74 possible that something has to be read while actually were trying to 75 75 write something (think about key exchange/refresh/etc). So when an -
lib/ssl_gnutls.c
rae3dc99 rf1b7711 106 106 struct scd *conn = data; 107 107 108 return ssl_connected( conn, conn->fd, B_EV_IO_WRITE );108 return ssl_connected( conn, conn->fd, GAIM_INPUT_WRITE ); 109 109 } 110 110 … … 244 244 { 245 245 return( gnutls_record_get_direction( ((struct scd*)conn)->session ) ? 246 B_EV_IO_WRITE : B_EV_IO_READ );247 } 246 GAIM_INPUT_WRITE : GAIM_INPUT_READ ); 247 } -
lib/ssl_nss.c
rae3dc99 rf1b7711 193 193 { 194 194 /* Just in case someone calls us, let's return the most likely case: */ 195 return B_EV_IO_READ;195 return GAIM_INPUT_READ; 196 196 } -
lib/ssl_openssl.c
rae3dc99 rf1b7711 102 102 struct scd *conn = data; 103 103 104 return ssl_connected( conn, conn->fd, B_EV_IO_WRITE );104 return ssl_connected( conn, conn->fd, GAIM_INPUT_WRITE ); 105 105 } 106 106 … … 270 270 b_input_condition ssl_getdirection( void *conn ) 271 271 { 272 return( ((struct scd*)conn)->lasterr == SSL_ERROR_WANT_WRITE ? B_EV_IO_WRITE : B_EV_IO_READ );273 } 272 return( ((struct scd*)conn)->lasterr == SSL_ERROR_WANT_WRITE ? GAIM_INPUT_WRITE : GAIM_INPUT_READ ); 273 } -
lib/ssl_sspi.c
rae3dc99 rf1b7711 275 275 GaimInputCondition ssl_getdirection( void *conn ) 276 276 { 277 return B_EV_IO_WRITE; /* FIXME: or B_EV_IO_READ */278 } 277 return GAIM_INPUT_WRITE; /* FIXME: or GAIM_INPUT_READ */ 278 } -
protocols/jabber/Makefile
rae3dc99 rf1b7711 10 10 11 11 # [SH] Program variables 12 objects = conference.o io.o iq.o jabber.o jabber_util.o message.o presence.o s 5bytestream.o sasl.o si.o12 objects = conference.o io.o iq.o jabber.o jabber_util.o message.o presence.o sasl.o 13 13 14 14 CFLAGS += -Wall -
protocols/jabber/io.c
rae3dc99 rf1b7711 64 64 most cases it probably won't be necessary.) */ 65 65 if( ( ret = jabber_write_queue( ic ) ) && jd->tx_len > 0 ) 66 jd->w_inpa = b_input_add( jd->fd, B_EV_IO_WRITE, jabber_write_callback, ic );66 jd->w_inpa = b_input_add( jd->fd, GAIM_INPUT_WRITE, jabber_write_callback, ic ); 67 67 } 68 68 else … … 504 504 505 505 if( jd->r_inpa <= 0 ) 506 jd->r_inpa = b_input_add( jd->fd, B_EV_IO_READ, jabber_read_callback, ic );506 jd->r_inpa = b_input_add( jd->fd, GAIM_INPUT_READ, jabber_read_callback, ic ); 507 507 508 508 greet = g_strdup_printf( "%s<stream:stream to=\"%s\" xmlns=\"jabber:client\" " -
protocols/jabber/iq.c
rae3dc99 rf1b7711 91 91 pack = 0; 92 92 } 93 else if( strcmp( s, XMLNS_DISCO _INFO) == 0 )94 { 95 const char *features[] = { XMLNS_DISCO _INFO,93 else if( strcmp( s, XMLNS_DISCOVER ) == 0 ) 94 { 95 const char *features[] = { XMLNS_DISCOVER, 96 96 XMLNS_VERSION, 97 97 XMLNS_TIME, … … 99 99 XMLNS_MUC, 100 100 XMLNS_PING, 101 XMLNS_SI,102 XMLNS_BYTESTREAMS,103 XMLNS_FILETRANSFER,104 101 NULL }; 105 102 const char **f; … … 121 118 { 122 119 xt_free_node( reply ); 123 reply = jabber_make_error_packet( node, "feature-not-implemented", "cancel" , NULL);120 reply = jabber_make_error_packet( node, "feature-not-implemented", "cancel" ); 124 121 pack = 0; 125 122 } … … 127 124 else if( strcmp( type, "set" ) == 0 ) 128 125 { 129 if( ( c = xt_find_node( node->children, "si" ) ) && 130 ( s = xt_find_attr( c, "xmlns" ) ) && 131 ( strcmp( s, XMLNS_SI ) == 0 ) ) 132 { 133 return jabber_si_handle_request( ic, node, c ); 134 } 135 else if( !( c = xt_find_node( node->children, "query" ) ) || 136 !( s = xt_find_attr( c, "xmlns" ) ) ) 126 if( !( c = xt_find_node( node->children, "query" ) ) || 127 !( s = xt_find_attr( c, "xmlns" ) ) ) 137 128 { 138 129 imcb_log( ic, "Warning: Received incomplete IQ-%s packet", type ); 139 130 return XT_HANDLED; 140 131 } 141 else if( strcmp( s, XMLNS_ROSTER ) == 0 ) 142 { 132 143 133 /* This is a roster push. XMPP servers send this when someone 144 134 was added to (or removed from) the buddy list. AFAIK they're 145 135 sent even if we added this buddy in our own session. */ 136 if( strcmp( s, XMLNS_ROSTER ) == 0 ) 137 { 146 138 int bare_len = strlen( ic->acc->user ); 147 139 … … 160 152 161 153 xt_free_node( reply ); 162 reply = jabber_make_error_packet( node, "not-allowed", "cancel" , NULL);154 reply = jabber_make_error_packet( node, "not-allowed", "cancel" ); 163 155 pack = 0; 164 156 } 165 157 } 166 else if( strcmp( s, XMLNS_BYTESTREAMS ) == 0 )167 {168 /* Bytestream Request (stage 2 of file transfer) */169 return jabber_bs_recv_request( ic, node, c );170 }171 158 else 172 159 { 173 160 xt_free_node( reply ); 174 reply = jabber_make_error_packet( node, "feature-not-implemented", "cancel" , NULL);161 reply = jabber_make_error_packet( node, "feature-not-implemented", "cancel" ); 175 162 pack = 0; 176 163 } … … 622 609 return st; 623 610 } 624 625 xt_status jabber_iq_parse_features( struct im_connection *ic, struct xt_node *node, struct xt_node *orig );626 627 xt_status jabber_iq_query_features( struct im_connection *ic, char *bare_jid )628 {629 struct xt_node *node, *query;630 struct jabber_buddy *bud;631 632 if( ( bud = jabber_buddy_by_jid( ic, bare_jid , 0 ) ) == NULL )633 {634 /* Who cares about the unknown... */635 imcb_log( ic, "Couldn't find buddy: %s", bare_jid);636 return XT_HANDLED;637 }638 639 if( bud->features ) /* been here already */640 return XT_HANDLED;641 642 node = xt_new_node( "query", NULL, NULL );643 xt_add_attr( node, "xmlns", XMLNS_DISCO_INFO );644 645 if( !( query = jabber_make_packet( "iq", "get", bare_jid, node ) ) )646 {647 imcb_log( ic, "WARNING: Couldn't generate feature query" );648 xt_free_node( node );649 return XT_HANDLED;650 }651 652 jabber_cache_add( ic, query, jabber_iq_parse_features );653 654 return jabber_write_packet( ic, query ) ? XT_HANDLED : XT_ABORT;655 }656 657 xt_status jabber_iq_parse_features( struct im_connection *ic, struct xt_node *node, struct xt_node *orig )658 {659 struct xt_node *c;660 struct jabber_buddy *bud;661 char *feature, *xmlns, *from;662 663 if( !( from = xt_find_attr( node, "from" ) ) ||664 !( c = xt_find_node( node->children, "query" ) ) ||665 !( xmlns = xt_find_attr( c, "xmlns" ) ) ||666 !( strcmp( xmlns, XMLNS_DISCO_INFO ) == 0 ) )667 {668 imcb_log( ic, "WARNING: Received incomplete IQ-result packet for discover" );669 return XT_HANDLED;670 }671 if( ( bud = jabber_buddy_by_jid( ic, from, 0 ) ) == NULL )672 {673 /* Who cares about the unknown... */674 imcb_log( ic, "Couldn't find buddy: %s", from );675 return XT_HANDLED;676 }677 678 c = c->children;679 while( ( c = xt_find_node( c, "feature" ) ) )680 {681 feature = xt_find_attr( c, "var" );682 if( feature )683 bud->features = g_slist_append( bud->features, g_strdup( feature ) );684 c = c->next;685 }686 687 return XT_HANDLED;688 }689 690 xt_status jabber_iq_parse_server_features( struct im_connection *ic, struct xt_node *node, struct xt_node *orig );691 692 xt_status jabber_iq_query_server( struct im_connection *ic, char *jid, char *xmlns )693 {694 struct xt_node *node, *query;695 struct jabber_data *jd = ic->proto_data;696 697 node = xt_new_node( "query", NULL, NULL );698 xt_add_attr( node, "xmlns", xmlns );699 700 if( !( query = jabber_make_packet( "iq", "get", jid, node ) ) )701 {702 imcb_log( ic, "WARNING: Couldn't generate server query" );703 xt_free_node( node );704 }705 706 jd->have_streamhosts--;707 jabber_cache_add( ic, query, jabber_iq_parse_server_features );708 709 return jabber_write_packet( ic, query ) ? XT_HANDLED : XT_ABORT;710 }711 712 /*713 * Query the server for "items", query each "item" for identities, query each "item" that's a proxy for it's bytestream info714 */715 xt_status jabber_iq_parse_server_features( struct im_connection *ic, struct xt_node *node, struct xt_node *orig )716 {717 struct xt_node *c;718 struct jabber_data *jd = ic->proto_data;719 char *xmlns, *from;720 721 if( !( c = xt_find_node( node->children, "query" ) ) ||722 !( from = xt_find_attr( node, "from" ) ) ||723 !( xmlns = xt_find_attr( c, "xmlns" ) ) )724 {725 imcb_log( ic, "WARNING: Received incomplete IQ-result packet for discover" );726 return XT_HANDLED;727 }728 729 jd->have_streamhosts++;730 731 if( strcmp( xmlns, XMLNS_DISCO_ITEMS ) == 0 )732 {733 char *itemjid;734 735 /* answer from server */736 737 c = c->children;738 while( ( c = xt_find_node( c, "item" ) ) )739 {740 itemjid = xt_find_attr( c, "jid" );741 742 if( itemjid )743 jabber_iq_query_server( ic, itemjid, XMLNS_DISCO_INFO );744 745 c = c->next;746 }747 }748 else if( strcmp( xmlns, XMLNS_DISCO_INFO ) == 0 )749 {750 char *category, *type;751 752 /* answer from potential proxy */753 754 c = c->children;755 while( ( c = xt_find_node( c, "identity" ) ) )756 {757 category = xt_find_attr( c, "category" );758 type = xt_find_attr( c, "type" );759 760 if( type && ( strcmp( type, "bytestreams" ) == 0 ) &&761 category && ( strcmp( category, "proxy" ) == 0 ) )762 jabber_iq_query_server( ic, from, XMLNS_BYTESTREAMS );763 764 c = c->next;765 }766 }767 else if( strcmp( xmlns, XMLNS_BYTESTREAMS ) == 0 )768 {769 char *host, *jid, *port_s;770 int port;771 772 /* answer from proxy */773 774 if( ( c = xt_find_node( c->children, "streamhost" ) ) &&775 ( host = xt_find_attr( c, "host" ) ) &&776 ( port_s = xt_find_attr( c, "port" ) ) &&777 ( sscanf( port_s, "%d", &port ) == 1 ) &&778 ( jid = xt_find_attr( c, "jid" ) ) )779 {780 jabber_streamhost_t *sh = g_new0( jabber_streamhost_t, 1 );781 782 sh->jid = g_strdup( jid );783 sh->host = g_strdup( host );784 g_snprintf( sh->port, sizeof( sh->port ), "%u", port );785 786 imcb_log( ic, "Proxy found: jid %s host %s port %u", jid, host, port );787 jd->streamhosts = g_slist_append( jd->streamhosts, sh );788 }789 }790 791 if( jd->have_streamhosts == 0 )792 jd->have_streamhosts++;793 794 return XT_HANDLED;795 } -
protocols/jabber/jabber.c
rae3dc99 rf1b7711 65 65 66 66 s = set_add( &acc->set, "priority", "0", set_eval_priority, acc ); 67 68 s = set_add( &acc->set, "proxy", "<local>;<auto>", NULL, acc );69 67 70 68 s = set_add( &acc->set, "resource", "BitlBee", NULL, acc ); … … 266 264 struct jabber_data *jd = ic->proto_data; 267 265 268 while( jd->filetransfers )269 imcb_file_canceled( ( ( struct jabber_transfer *) jd->filetransfers->data )->ft, "Logging out" );270 271 while( jd->streamhosts )272 {273 jabber_streamhost_t *sh = jd->streamhosts->data;274 jd->streamhosts = g_slist_remove( jd->streamhosts, sh );275 g_free( sh->jid );276 g_free( sh->host );277 g_free( sh );278 }279 280 266 if( jd->fd >= 0 ) 281 267 jabber_end_stream( ic ); … … 558 544 ret->send_typing = jabber_send_typing; 559 545 ret->handle_cmp = g_strcasecmp; 560 ret->transfer_request = jabber_si_transfer_request;561 546 562 547 register_protocol( ret ); -
protocols/jabber/jabber.h
rae3dc99 rf1b7711 61 61 } jabber_buddy_flags_t; 62 62 63 /* Stores a streamhost's (a.k.a. proxy) data */64 typedef struct65 {66 char *jid;67 char *host;68 char port[6];69 } jabber_streamhost_t;70 71 63 typedef enum 72 64 { … … 99 91 GHashTable *node_cache; 100 92 GHashTable *buddies; 101 102 GSList *filetransfers;103 GSList *streamhosts;104 int have_streamhosts;105 93 }; 106 94 … … 139 127 struct jabber_away_state *away_state; 140 128 char *away_message; 141 GSList *features;142 129 143 130 time_t last_msg; … … 153 140 char *my_full_jid; /* Separate copy because of case sensitivity. */ 154 141 struct jabber_buddy *me; 155 };156 157 struct jabber_transfer158 {159 /* bitlbee's handle for this transfer */160 file_transfer_t *ft;161 162 /* the stream's private handle */163 gpointer streamhandle;164 165 /* timeout for discover queries */166 gint disco_timeout;167 gint disco_timeout_fired;168 169 struct im_connection *ic;170 171 struct jabber_buddy *bud;172 173 int watch_in;174 int watch_out;175 176 char *ini_jid;177 char *tgt_jid;178 char *iq_id;179 char *sid;180 int accepted;181 182 size_t bytesread, byteswritten;183 int fd;184 struct sockaddr_storage saddr;185 142 }; 186 143 … … 210 167 211 168 /* Some supported extensions/legacy stuff */ 212 #define XMLNS_AUTH "jabber:iq:auth" /* XEP-0078 */ 213 #define XMLNS_VERSION "jabber:iq:version" /* XEP-0092 */ 214 #define XMLNS_TIME "jabber:iq:time" /* XEP-0090 */ 215 #define XMLNS_PING "urn:xmpp:ping" /* XEP-0199 */ 216 #define XMLNS_VCARD "vcard-temp" /* XEP-0054 */ 217 #define XMLNS_DELAY "jabber:x:delay" /* XEP-0091 */ 218 #define XMLNS_XDATA "jabber:x:data" /* XEP-0004 */ 219 #define XMLNS_CHATSTATES "http://jabber.org/protocol/chatstates" /* XEP-0085 */ 220 #define XMLNS_DISCO_INFO "http://jabber.org/protocol/disco#info" /* XEP-0030 */ 221 #define XMLNS_DISCO_ITEMS "http://jabber.org/protocol/disco#items" /* XEP-0030 */ 222 #define XMLNS_MUC "http://jabber.org/protocol/muc" /* XEP-0045 */ 223 #define XMLNS_MUC_USER "http://jabber.org/protocol/muc#user" /* XEP-0045 */ 224 #define XMLNS_CAPS "http://jabber.org/protocol/caps" /* XEP-0115 */ 225 #define XMLNS_FEATURE "http://jabber.org/protocol/feature-neg" /* XEP-0020 */ 226 #define XMLNS_SI "http://jabber.org/protocol/si" /* XEP-0095 */ 227 #define XMLNS_FILETRANSFER "http://jabber.org/protocol/si/profile/file-transfer" /* XEP-0096 */ 228 #define XMLNS_BYTESTREAMS "http://jabber.org/protocol/bytestreams" /* XEP-0065 */ 229 #define XMLNS_IBB "http://jabber.org/protocol/ibb" /* XEP-0047 */ 169 #define XMLNS_AUTH "jabber:iq:auth" /* XEP-0078 */ 170 #define XMLNS_VERSION "jabber:iq:version" /* XEP-0092 */ 171 #define XMLNS_TIME "jabber:iq:time" /* XEP-0090 */ 172 #define XMLNS_PING "urn:xmpp:ping" /* XEP-0199 */ 173 #define XMLNS_VCARD "vcard-temp" /* XEP-0054 */ 174 #define XMLNS_DELAY "jabber:x:delay" /* XEP-0091 */ 175 #define XMLNS_CHATSTATES "http://jabber.org/protocol/chatstates" /* 0085 */ 176 #define XMLNS_DISCOVER "http://jabber.org/protocol/disco#info" /* 0030 */ 177 #define XMLNS_MUC "http://jabber.org/protocol/muc" /* XEP-0045 */ 178 #define XMLNS_MUC_USER "http://jabber.org/protocol/muc#user"/* XEP-0045 */ 179 #define XMLNS_CAPS "http://jabber.org/protocol/caps" /* XEP-0115 */ 230 180 231 181 /* iq.c */ … … 237 187 int jabber_add_to_roster( struct im_connection *ic, char *handle, char *name ); 238 188 int jabber_remove_from_roster( struct im_connection *ic, char *handle ); 239 xt_status jabber_iq_query_features( struct im_connection *ic, char *bare_jid );240 xt_status jabber_iq_query_server( struct im_connection *ic, char *jid, char *xmlns );241 242 /* si.c */243 int jabber_si_handle_request( struct im_connection *ic, struct xt_node *node, struct xt_node *sinode );244 void jabber_si_transfer_request( struct im_connection *ic, file_transfer_t *ft, char *who );245 void jabber_si_free_transfer( file_transfer_t *ft);246 247 /* s5bytestream.c */248 int jabber_bs_recv_request( struct im_connection *ic, struct xt_node *node, struct xt_node *qnode);249 gboolean jabber_bs_send_start( struct jabber_transfer *tf );250 gboolean jabber_bs_send_write( file_transfer_t *ft, char *buffer, unsigned int len );251 189 252 190 /* message.c */ … … 262 200 char *set_eval_tls( set_t *set, char *value ); 263 201 struct xt_node *jabber_make_packet( char *name, char *type, char *to, struct xt_node *children ); 264 struct xt_node *jabber_make_error_packet( struct xt_node *orig, char *err_cond, char *err_type , char *err_code);202 struct xt_node *jabber_make_error_packet( struct xt_node *orig, char *err_cond, char *err_type ); 265 203 void jabber_cache_add( struct im_connection *ic, struct xt_node *node, jabber_cache_event func ); 266 204 struct xt_node *jabber_cache_get( struct im_connection *ic, char *id ); -
protocols/jabber/jabber_util.c
rae3dc99 rf1b7711 99 99 } 100 100 101 struct xt_node *jabber_make_error_packet( struct xt_node *orig, char *err_cond, char *err_type , char *err_code)101 struct xt_node *jabber_make_error_packet( struct xt_node *orig, char *err_cond, char *err_type ) 102 102 { 103 103 struct xt_node *node, *c; … … 111 111 c = xt_new_node( "error", NULL, c ); 112 112 xt_add_attr( c, "type", err_type ); 113 114 /* Add the error code, if present */115 if (err_code)116 xt_add_attr( c, "code", err_code );117 113 118 114 /* To make the actual error packet, we copy the original packet and -
protocols/msn/Makefile
rae3dc99 rf1b7711 10 10 11 11 # [SH] Program variables 12 objects = invitation.omsn.o msn_util.o ns.o passport.o sb.o tables.o12 objects = msn.o msn_util.o ns.o passport.o sb.o tables.o 13 13 14 14 CFLAGS += -Wall -
protocols/msn/msn.c
rae3dc99 rf1b7711 79 79 if( md ) 80 80 { 81 while( md->filetransfers ) {82 imcb_file_canceled( md->filetransfers->data, "Closing connection" );83 }84 85 81 if( md->fd >= 0 ) 86 82 closesocket( md->fd ); … … 332 328 ret->send_typing = msn_send_typing; 333 329 ret->handle_cmp = g_strcasecmp; 334 ret->transfer_request = msn_ftp_transfer_request;335 330 336 331 register_protocol(ret); -
protocols/msn/msn.h
rae3dc99 rf1b7711 74 74 int sb_failures; 75 75 time_t first_sb_failure; 76 GSList *filetransfers;77 76 78 77 const struct msn_away_state *away_state; … … 190 189 void msn_sb_stop_keepalives( struct msn_switchboard *sb ); 191 190 192 /* invitation.c */193 void msn_ftp_transfer_request( struct im_connection *ic, file_transfer_t *ft, char *who );194 195 191 #endif //_MSN_H -
protocols/msn/ns.c
rae3dc99 rf1b7711 76 76 if( msn_write( ic, s, strlen( s ) ) ) 77 77 { 78 ic->inpa = b_input_add( md->fd, B_EV_IO_READ, msn_ns_callback, ic );78 ic->inpa = b_input_add( md->fd, GAIM_INPUT_READ, msn_ns_callback, ic ); 79 79 imcb_log( ic, "Connected to server, waiting for reply" ); 80 80 } -
protocols/msn/sb.c
rae3dc99 rf1b7711 29 29 #include "passport.h" 30 30 #include "md5.h" 31 #include "invitation.h"32 31 33 32 static gboolean msn_sb_callback( gpointer data, gint source, b_input_condition cond ); … … 174 173 buf = g_new0( char, i ); 175 174 i = g_snprintf( buf, i, MSN_TYPING_HEADERS, sb->ic->acc->user ); 176 }177 else if( strncmp( text, MSN_INVITE_HEADERS, sizeof( MSN_INVITE_HEADERS ) - 1 ) == 0 )178 {179 buf = g_strdup( text );180 i = strlen( buf );181 175 } 182 176 else if( strcmp( text, SB_KEEPALIVE_MESSAGE ) == 0 ) … … 321 315 322 316 if( msn_sb_write( sb, buf, strlen( buf ) ) ) 323 sb->inp = b_input_add( sb->fd, B_EV_IO_READ, msn_sb_callback, sb );317 sb->inp = b_input_add( sb->fd, GAIM_INPUT_READ, msn_sb_callback, sb ); 324 318 else 325 319 debug( "Error %d while connecting to switchboard server", 2 ); … … 705 699 else if( g_strncasecmp( ct, "text/x-msmsgsinvite", 19 ) == 0 ) 706 700 { 707 char *command = msn_findheader( body, "Invitation-Command:", blen ); 708 char *cookie = msn_findheader( body, "Invitation-Cookie:", blen ); 709 unsigned int icookie; 701 char *itype = msn_findheader( body, "Application-GUID:", blen ); 702 char buf[1024]; 710 703 711 704 g_free( ct ); 712 705 713 /* Every invite should have both a Command and Cookie header */ 714 if( !command || !cookie ) { 715 g_free( command ); 716 g_free( cookie ); 717 imcb_log( ic, "Warning: No command or cookie from %s", sb->who ); 718 return 1; 719 } 720 721 icookie = strtoul( cookie, NULL, 10 ); 722 g_free( cookie ); 723 724 if( g_strncasecmp( command, "INVITE", 6 ) == 0 ) { 725 msn_invitation_invite( sb, cmd[1], icookie, body, blen ); 726 } else if( g_strncasecmp( command, "ACCEPT", 6 ) == 0 ) { 727 msn_invitation_accept( sb, cmd[1], icookie, body, blen ); 728 } else if( g_strncasecmp( command, "CANCEL", 6 ) == 0 ) { 729 msn_invitation_cancel( sb, cmd[1], icookie, body, blen ); 730 } else { 731 imcb_log( ic, "Warning: Received invalid invitation with " 732 "command %s from %s", command, sb->who ); 733 } 734 735 g_free( command ); 736 } 737 else if( g_strncasecmp( ct, "application/x-msnmsgrp2p", 24 ) == 0 ) 738 { 739 imcb_error( sb->ic, "Cannot receive file from %s: BitlBee does not " 740 "support msnmsgrp2p yet.", sb->who ); 741 g_free( ct ); 706 *buf = 0; 707 708 if( !itype ) 709 return( 1 ); 710 711 /* File transfer. */ 712 if( strcmp( itype, "{5D3E02AB-6190-11d3-BBBB-00C04F795683}" ) == 0 ) 713 { 714 char *name = msn_findheader( body, "Application-File:", blen ); 715 char *size = msn_findheader( body, "Application-FileSize:", blen ); 716 717 if( name && size ) 718 { 719 g_snprintf( buf, sizeof( buf ), "<< \x02""BitlBee\x02"" - Filetransfer: `%s', %s bytes >>\n" 720 "Filetransfers are not supported by BitlBee for now...", name, size ); 721 } 722 else 723 { 724 strcpy( buf, "<< \x02""BitlBee\x02"" - Corrupted MSN filetransfer invitation message >>" ); 725 } 726 727 if( name ) g_free( name ); 728 if( size ) g_free( size ); 729 } 730 else 731 { 732 char *iname = msn_findheader( body, "Application-Name:", blen ); 733 734 g_snprintf( buf, sizeof( buf ), "<< \x02""BitlBee\x02"" - Unknown MSN invitation - %s (%s) >>", 735 itype, iname ? iname : "no name" ); 736 737 if( iname ) g_free( iname ); 738 } 739 740 g_free( itype ); 741 742 if( !*buf ) 743 return( 1 ); 744 745 if( sb->who ) 746 { 747 imcb_buddy_msg( ic, cmd[1], buf, 0, 0 ); 748 } 749 else if( sb->chat ) 750 { 751 imcb_chat_msg( sb->chat, cmd[1], buf, 0, 0 ); 752 } 753 else 754 { 755 /* PANIC! */ 756 } 742 757 } 743 758 else if( g_strncasecmp( ct, "text/x-msmsgscontrol", 20 ) == 0 ) -
protocols/nogaim.c
rae3dc99 rf1b7711 117 117 { 118 118 GList *gl; 119 120 for( gl = protocols; gl; gl = gl->next ) 119 for (gl = protocols; gl; gl = gl->next) 121 120 { 122 121 struct prpl *proto = gl->data; 123 124 if( g_strcasecmp( proto->name, name ) == 0 ) 122 if(!g_strcasecmp(proto->name, name)) 125 123 return proto; 126 124 } 127 128 125 return NULL; 129 126 } … … 137 134 extern void jabber_initmodule(); 138 135 extern void twitter_initmodule(); 139 extern void purple_initmodule();140 136 141 137 #ifdef WITH_MSN … … 157 153 #ifdef WITH_TWITTER 158 154 twitter_initmodule(); 159 #endif160 161 #ifdef WITH_PURPLE162 purple_initmodule();163 155 #endif 164 156 -
protocols/nogaim.h
rae3dc99 rf1b7711 45 45 #include "proxy.h" 46 46 #include "query.h" 47 #include "md5.h"48 #include "ft.h"49 47 50 48 #define BUDDY_ALIAS_MAXLEN 388 /* because MSN names can be 387 characters */ … … 134 132 * - The user sees this name ie. when imcb_log() is used. */ 135 133 const char *name; 136 void *data;137 134 138 135 /* Added this one to be able to add per-account settings, don't think … … 231 228 void (* auth_allow) (struct im_connection *, const char *who); 232 229 void (* auth_deny) (struct im_connection *, const char *who); 233 234 /* Incoming transfer request */235 void (* transfer_request) (struct im_connection *, file_transfer_t *ft, char *handle );236 230 }; 237 231 -
protocols/oscar/oscar.c
rae3dc99 rf1b7711 291 291 odata = (struct oscar_data *)ic->proto_data; 292 292 293 if (condition & B_EV_IO_READ) {293 if (condition & GAIM_INPUT_READ) { 294 294 if (aim_get_command(odata->sess, conn) >= 0) { 295 295 aim_rxdispatch(odata->sess); … … 363 363 364 364 aim_conn_completeconnect(sess, conn); 365 ic->inpa = b_input_add(conn->fd, B_EV_IO_READ,365 ic->inpa = b_input_add(conn->fd, GAIM_INPUT_READ, 366 366 oscar_callback, conn); 367 367 … … 493 493 494 494 aim_conn_completeconnect(sess, bosconn); 495 ic->inpa = b_input_add(bosconn->fd, B_EV_IO_READ,495 ic->inpa = b_input_add(bosconn->fd, GAIM_INPUT_READ, 496 496 oscar_callback, bosconn); 497 497 imcb_log(ic, _("Connection established, cookie sent")); … … 669 669 if (pos->modname) 670 670 g_free(pos->modname); 671 pos->inpa = b_input_add(pos->fd, B_EV_IO_READ, damn_you, pos);671 pos->inpa = b_input_add(pos->fd, GAIM_INPUT_READ, damn_you, pos); 672 672 return FALSE; 673 673 } … … 838 838 839 839 aim_conn_completeconnect(sess, tstconn); 840 odata->cnpa = b_input_add(tstconn->fd, B_EV_IO_READ,840 odata->cnpa = b_input_add(tstconn->fd, GAIM_INPUT_READ, 841 841 oscar_callback, tstconn); 842 842 … … 866 866 867 867 aim_conn_completeconnect(sess, tstconn); 868 odata->paspa = b_input_add(tstconn->fd, B_EV_IO_READ,868 odata->paspa = b_input_add(tstconn->fd, GAIM_INPUT_READ, 869 869 oscar_callback, tstconn); 870 870 … … 902 902 aim_conn_completeconnect(sess, ccon->conn); 903 903 ccon->inpa = b_input_add(tstconn->fd, 904 B_EV_IO_READ,904 GAIM_INPUT_READ, 905 905 oscar_callback, tstconn); 906 906 odata->oscar_chats = g_slist_append(odata->oscar_chats, ccon); -
protocols/yahoo/yahoo.c
rae3dc99 rf1b7711 681 681 682 682 inp->d = d; 683 d->tag = inp->h = b_input_add( fd, B_EV_IO_READ, (b_event_handler) byahoo_read_ready_callback, (gpointer) d );683 d->tag = inp->h = b_input_add( fd, GAIM_INPUT_READ, (b_event_handler) byahoo_read_ready_callback, (gpointer) d ); 684 684 } 685 685 else if( cond == YAHOO_INPUT_WRITE ) … … 692 692 693 693 inp->d = d; 694 d->tag = inp->h = b_input_add( fd, B_EV_IO_WRITE, (b_event_handler) byahoo_write_ready_callback, (gpointer) d );694 d->tag = inp->h = b_input_add( fd, GAIM_INPUT_WRITE, (b_event_handler) byahoo_write_ready_callback, (gpointer) d ); 695 695 } 696 696 else -
root_commands.c
rae3dc99 rf1b7711 1154 1154 { 1155 1155 irc_usermsg( irc, "Unknown command: %s %s. Please use \x02help commands\x02 to get a list of available commands.", "chat", cmd[1] ); 1156 }1157 }1158 1159 static void cmd_transfer( irc_t *irc, char **cmd )1160 {1161 GSList *files = irc->file_transfers;1162 enum { LIST, REJECT, CANCEL };1163 int subcmd = LIST;1164 int fid;1165 1166 if( !files )1167 {1168 irc_usermsg( irc, "No pending transfers" );1169 return;1170 }1171 1172 if( cmd[1] && ( strcmp( cmd[1], "reject" ) == 0 ) )1173 {1174 subcmd = REJECT;1175 }1176 else if( cmd[1] && ( strcmp( cmd[1], "cancel" ) == 0 ) &&1177 cmd[2] && ( sscanf( cmd[2], "%d", &fid ) == 1 ) )1178 {1179 subcmd = CANCEL;1180 }1181 1182 for( ; files; files = g_slist_next( files ) )1183 {1184 file_transfer_t *file = files->data;1185 1186 switch( subcmd ) {1187 case LIST:1188 if ( file->status == FT_STATUS_LISTENING )1189 irc_usermsg( irc,1190 "Pending file(id %d): %s (Listening...)", file->local_id, file->file_name);1191 else1192 {1193 int kb_per_s = 0;1194 time_t diff = time( NULL ) - file->started ? : 1;1195 if ( ( file->started > 0 ) && ( file->bytes_transferred > 0 ) )1196 kb_per_s = file->bytes_transferred / 1024 / diff;1197 1198 irc_usermsg( irc,1199 "Pending file(id %d): %s (%10zd/%zd kb, %d kb/s)", file->local_id, file->file_name,1200 file->bytes_transferred/1024, file->file_size/1024, kb_per_s);1201 }1202 break;1203 case REJECT:1204 if( file->status == FT_STATUS_LISTENING )1205 {1206 irc_usermsg( irc, "Rejecting file transfer for %s", file->file_name );1207 imcb_file_canceled( file, "Denied by user" );1208 }1209 break;1210 case CANCEL:1211 if( file->local_id == fid )1212 {1213 irc_usermsg( irc, "Canceling file transfer for %s", file->file_name );1214 imcb_file_canceled( file, "Canceled by user" );1215 }1216 break;1217 }1218 1156 } 1219 1157 } … … 1240 1178 { "join_chat", 2, cmd_join_chat, 0 }, 1241 1179 { "chat", 1, cmd_chat, 0 }, 1242 { "transfer", 0, cmd_transfer, 0 },1243 1180 { NULL } 1244 1181 }; -
set.c
rae3dc99 rf1b7711 29 29 char *SET_INVALID = "nee"; 30 30 31 set_t *set_add( set_t **head, c onst char *key, constchar *def, set_eval eval, void *data )31 set_t *set_add( set_t **head, char *key, char *def, set_eval eval, void *data ) 32 32 { 33 33 set_t *s = set_find( head, key ); … … 63 63 } 64 64 65 set_t *set_find( set_t **head, c onst char *key )65 set_t *set_find( set_t **head, char *key ) 66 66 { 67 67 set_t *s = *head; … … 77 77 } 78 78 79 char *set_getstr( set_t **head, c onst char *key )79 char *set_getstr( set_t **head, char *key ) 80 80 { 81 81 set_t *s = set_find( head, key ); … … 87 87 } 88 88 89 int set_getint( set_t **head, c onst char *key )89 int set_getint( set_t **head, char *key ) 90 90 { 91 91 char *s = set_getstr( head, key ); … … 101 101 } 102 102 103 int set_getbool( set_t **head, c onst char *key )103 int set_getbool( set_t **head, char *key ) 104 104 { 105 105 char *s = set_getstr( head, key ); … … 111 111 } 112 112 113 int set_setstr( set_t **head, c onst char *key, char *value )113 int set_setstr( set_t **head, char *key, char *value ) 114 114 { 115 115 set_t *s = set_find( head, key ); … … 150 150 } 151 151 152 int set_setint( set_t **head, c onst char *key, int value )152 int set_setint( set_t **head, char *key, int value ) 153 153 { 154 154 char s[24]; /* Not quite 128-bit clean eh? ;-) */ … … 158 158 } 159 159 160 void set_del( set_t **head, c onst char *key )160 void set_del( set_t **head, char *key ) 161 161 { 162 162 set_t *s = *head, *t = NULL; … … 182 182 } 183 183 184 int set_reset( set_t **head, c onst char *key )184 int set_reset( set_t **head, char *key ) 185 185 { 186 186 set_t *s; … … 211 211 { 212 212 return is_bool( value ) ? value : SET_INVALID; 213 }214 215 char *set_eval_list( set_t *set, char *value )216 {217 GSList *options = set->eval_data, *opt;218 219 for( opt = options; opt; opt = opt->next )220 if( strcmp( value, opt->data ) == 0 )221 return value;222 223 /* TODO: It'd be nice to show the user a list of allowed values,224 but we don't have enough context here to do that. May225 want to fix that. */226 227 return NULL;228 213 } 229 214 -
set.h
rae3dc99 rf1b7711 69 69 set_setstr() should be able to free() the returned string! */ 70 70 set_eval eval; 71 void *eval_data;72 71 struct set *next; 73 72 } set_t; 74 73 75 74 /* Should be pretty clear. */ 76 set_t *set_add( set_t **head, c onst char *key, constchar *def, set_eval eval, void *data );75 set_t *set_add( set_t **head, char *key, char *def, set_eval eval, void *data ); 77 76 78 77 /* Returns the raw set_t. Might be useful sometimes. */ 79 set_t *set_find( set_t **head, c onst char *key );78 set_t *set_find( set_t **head, char *key ); 80 79 81 80 /* Returns a pointer to the string value of this setting. Don't modify the 82 81 returned string, and don't free() it! */ 83 G_MODULE_EXPORT char *set_getstr( set_t **head, c onst char *key );82 G_MODULE_EXPORT char *set_getstr( set_t **head, char *key ); 84 83 85 84 /* Get an integer. In previous versions set_getint() was also used to read 86 85 boolean values, but this SHOULD be done with set_getbool() now! */ 87 G_MODULE_EXPORT int set_getint( set_t **head, c onst char *key );88 G_MODULE_EXPORT int set_getbool( set_t **head, c onst char *key );86 G_MODULE_EXPORT int set_getint( set_t **head, char *key ); 87 G_MODULE_EXPORT int set_getbool( set_t **head, char *key ); 89 88 90 89 /* set_setstr() strdup()s the given value, so after using this function 91 90 you can free() it, if you want. */ 92 int set_setstr( set_t **head, c onst char *key, char *value );93 int set_setint( set_t **head, c onst char *key, int value );94 void set_del( set_t **head, c onst char *key );95 int set_reset( set_t **head, c onst char *key );91 int set_setstr( set_t **head, char *key, char *value ); 92 int set_setint( set_t **head, char *key, int value ); 93 void set_del( set_t **head, char *key ); 94 int set_reset( set_t **head, char *key ); 96 95 97 96 /* Two very useful generic evaluators. */ 98 97 char *set_eval_int( set_t *set, char *value ); 99 98 char *set_eval_bool( set_t *set, char *value ); 100 101 /* Another more complicated one. */102 char *set_eval_list( set_t *set, char *value );103 99 104 100 /* Some not very generic evaluators that really shouldn't be here... */ -
unix.c
rae3dc99 rf1b7711 56 56 57 57 log_init(); 58 59 58 global.conf_file = g_strdup( CONF_FILE_DEF ); 60 59 global.conf = conf_load( argc, argv ); … … 63 62 64 63 b_main_init(); 64 nogaim_init(); 65 65 66 66 srand( time( NULL ) ^ getpid() ); 67 68 67 global.helpfile = g_strdup( HELP_FILE ); 69 if( help_init( &global.help, global.helpfile ) == NULL )70 log_message( LOGLVL_WARNING, "Error opening helpfile %s.", HELP_FILE );71 72 global.storage = storage_init( global.conf->primary_storage, global.conf->migrate_storage );73 if( global.storage == NULL )74 {75 log_message( LOGLVL_ERROR, "Unable to load storage backend '%s'", global.conf->primary_storage );76 return( 1 );77 }78 68 79 69 if( global.conf->runmode == RUNMODE_INETD ) … … 126 116 setuid( pw->pw_uid ); 127 117 } 118 } 119 120 global.storage = storage_init( global.conf->primary_storage, global.conf->migrate_storage ); 121 if( global.storage == NULL ) 122 { 123 log_message( LOGLVL_ERROR, "Unable to load storage backend '%s'", global.conf->primary_storage ); 124 return( 1 ); 128 125 } 129 126 … … 145 142 if( !getuid() || !geteuid() ) 146 143 log_message( LOGLVL_WARNING, "BitlBee is running with root privileges. Why?" ); 144 if( help_init( &global.help, global.helpfile ) == NULL ) 145 log_message( LOGLVL_WARNING, "Error opening helpfile %s.", HELP_FILE ); 147 146 148 147 b_main_run();
Note: See TracChangeset
for help on using the changeset viewer.