Changes in irc.c [3f9440d:bbb6ffb]
Legend:
- Unmodified
- Added
- Removed
-
irc.c
r3f9440d rbbb6ffb 33 33 GSList *irc_connection_list = NULL; 34 34 35 static char *passchange (irc_t *irc, void *set, char *value) 36 { 37 irc_setpass (irc, value); 38 return (NULL); 35 static char *passchange( set_t *set, char *value ) 36 { 37 irc_t *irc = set->data; 38 39 irc_setpass( irc, value ); 40 irc_usermsg( irc, "Password successfully changed" ); 41 return NULL; 39 42 } 40 43 … … 46 49 char buf[128]; 47 50 #ifdef IPV6 48 struct sockaddr_in6 sock[1]; 49 #else 51 struct sockaddr_in6 sock6[1]; 52 unsigned int i6; 53 #endif 50 54 struct sockaddr_in sock[1]; 51 #endif52 55 53 56 irc = g_new0( irc_t, 1 ); … … 69 72 70 73 i = sizeof( *sock ); 74 #ifdef IPV6 75 i6 = sizeof( *sock6 ); 76 #endif 71 77 72 78 if( global.conf->hostname ) 73 79 irc->myhost = g_strdup( global.conf->hostname ); 74 80 #ifdef IPV6 75 else if( getsockname( irc->fd, (struct sockaddr*) sock , &i ) == 0 && sock->sin6_family == AF_INETx)76 { 77 if( ( peer = gethostbyaddr( (char*) &sock ->sin6_addr, sizeof( sock->sin6_addr ), AF_INETx) ) )81 else if( getsockname( irc->fd, (struct sockaddr*) sock6, &i6 ) == 0 && sock6->sin6_family == AF_INET6 ) 82 { 83 if( ( peer = gethostbyaddr( (char*) &sock6->sin6_addr, sizeof( sock6->sin6_addr ), AF_INET6 ) ) ) 78 84 irc->myhost = g_strdup( peer->h_name ); 79 else if( inet_ntop( AF_INET x, &sock->sin6_addr, buf, sizeof( buf ) - 1 ) != NULL )85 else if( inet_ntop( AF_INET6, &sock6->sin6_addr, buf, sizeof( buf ) - 1 ) != NULL ) 80 86 irc->myhost = g_strdup( ipv6_unwrap( buf ) ); 81 87 } 82 #e lse83 else if( getsockname( irc->fd, (struct sockaddr*) sock, &i ) == 0 && sock->sin_family == AF_INET x)84 { 85 if( ( peer = gethostbyaddr( (char*) &sock->sin_addr, sizeof( sock->sin_addr ), AF_INET x) ) )88 #endif 89 else if( getsockname( irc->fd, (struct sockaddr*) sock, &i ) == 0 && sock->sin_family == AF_INET ) 90 { 91 if( ( peer = gethostbyaddr( (char*) &sock->sin_addr, sizeof( sock->sin_addr ), AF_INET ) ) ) 86 92 irc->myhost = g_strdup( peer->h_name ); 87 else if( inet_ntop( AF_INET x, &sock->sin_addr, buf, sizeof( buf ) - 1 ) != NULL )93 else if( inet_ntop( AF_INET, &sock->sin_addr, buf, sizeof( buf ) - 1 ) != NULL ) 88 94 irc->myhost = g_strdup( buf ); 89 95 } 90 #endif91 96 92 97 i = sizeof( *sock ); 93 98 #ifdef IPV6 94 if( getpeername( irc->fd, (struct sockaddr*) sock, &i ) == 0 && sock->sin6_family == AF_INETx ) 95 { 96 if( ( peer = gethostbyaddr( (char*) &sock->sin6_addr, sizeof( sock->sin6_addr ), AF_INETx ) ) ) 99 i6 = sizeof( *sock6 ); 100 if( getpeername( irc->fd, (struct sockaddr*) sock6, &i6 ) == 0 && sock6->sin6_family == AF_INET6 ) 101 { 102 if( ( peer = gethostbyaddr( (char*) &sock6->sin6_addr, sizeof( sock6->sin6_addr ), AF_INET6 ) ) ) 97 103 irc->host = g_strdup( peer->h_name ); 98 else if( inet_ntop( AF_INET x, &sock->sin6_addr, buf, sizeof( buf ) - 1 ) != NULL )104 else if( inet_ntop( AF_INET6, &sock6->sin6_addr, buf, sizeof( buf ) - 1 ) != NULL ) 99 105 irc->host = g_strdup( ipv6_unwrap( buf ) ); 100 106 } 101 #else 102 if( getpeername( irc->fd, (struct sockaddr*) sock, &i ) == 0 && sock->sin_family == AF_INETx ) 103 { 104 if( ( peer = gethostbyaddr( (char*) &sock->sin_addr, sizeof( sock->sin_addr ), AF_INETx ) ) ) 107 else 108 #endif 109 if( getpeername( irc->fd, (struct sockaddr*) sock, &i ) == 0 && sock->sin_family == AF_INET ) 110 { 111 if( ( peer = gethostbyaddr( (char*) &sock->sin_addr, sizeof( sock->sin_addr ), AF_INET ) ) ) 105 112 irc->host = g_strdup( peer->h_name ); 106 else if( inet_ntop( AF_INET x, &sock->sin_addr, buf, sizeof( buf ) - 1 ) != NULL )113 else if( inet_ntop( AF_INET, &sock->sin_addr, buf, sizeof( buf ) - 1 ) != NULL ) 107 114 irc->host = g_strdup( buf ); 108 115 } 109 #endif110 116 111 117 /* Rare, but possible. */ … … 120 126 irc_connection_list = g_slist_append( irc_connection_list, irc ); 121 127 122 set_add( irc, "away_devoice", "true", set_eval_away_devoice);123 set_add( irc, "auto_connect", "true", set_eval_bool);124 set_add( irc, "auto_reconnect", "false", set_eval_bool);125 set_add( irc, "auto_reconnect_delay", "300", set_eval_int);126 set_add( irc, "buddy_sendbuffer", "false", set_eval_bool);127 set_add( irc, "buddy_sendbuffer_delay", "200", set_eval_int);128 set_add( irc, "charset", "iso8859-1", set_eval_charset);129 set_add( irc, "debug", "false", set_eval_bool);130 set_add( irc, "default_target", "root", NULL);131 set_add( irc, "display_namechanges", "false", set_eval_bool);132 set_add( irc, "handle_unknown", "root", NULL);133 set_add( irc, "lcnicks", "true", set_eval_bool);134 set_add( irc, "ops", "both", set_eval_ops);135 set_add( irc, "private", "true", set_eval_bool);136 set_add( irc, "query_order", "lifo", NULL);137 set_add( irc, "save_on_quit", "true", set_eval_bool);138 set_add( irc, "strip_html", "true", NULL);139 set_add( irc, "to_char", ": ", set_eval_to_char);140 set_add( irc, "typing_notice", "false", set_eval_bool);141 set_add( irc, "password", NULL, passchange);128 set_add( &irc->set, "away_devoice", "true", set_eval_away_devoice, irc ); 129 set_add( &irc->set, "auto_connect", "true", set_eval_bool, irc ); 130 set_add( &irc->set, "auto_reconnect", "false", set_eval_bool, irc ); 131 set_add( &irc->set, "auto_reconnect_delay", "300", set_eval_int, irc ); 132 set_add( &irc->set, "buddy_sendbuffer", "false", set_eval_bool, irc ); 133 set_add( &irc->set, "buddy_sendbuffer_delay", "200", set_eval_int, irc ); 134 set_add( &irc->set, "charset", "iso8859-1", set_eval_charset, irc ); 135 set_add( &irc->set, "debug", "false", set_eval_bool, irc ); 136 set_add( &irc->set, "default_target", "root", NULL, irc ); 137 set_add( &irc->set, "display_namechanges", "false", set_eval_bool, irc ); 138 set_add( &irc->set, "handle_unknown", "root", NULL, irc ); 139 set_add( &irc->set, "lcnicks", "true", set_eval_bool, irc ); 140 set_add( &irc->set, "ops", "both", set_eval_ops, irc ); 141 set_add( &irc->set, "password", NULL, passchange, irc ); 142 set_add( &irc->set, "private", "true", set_eval_bool, irc ); 143 set_add( &irc->set, "query_order", "lifo", NULL, irc ); 144 set_add( &irc->set, "save_on_quit", "true", set_eval_bool, irc ); 145 set_add( &irc->set, "strip_html", "true", NULL, irc ); 146 set_add( &irc->set, "to_char", ": ", set_eval_to_char, irc ); 147 set_add( &irc->set, "typing_notice", "false", set_eval_bool, irc ); 142 148 143 149 conf_loaddefaults( irc ); … … 203 209 void irc_free(irc_t * irc) 204 210 { 205 account_t *account , *accounttmp;211 account_t *account; 206 212 user_t *user, *usertmp; 207 nick_t *nick, *nicktmp;208 213 help_t *helpnode, *helpnodetmp; 209 set_t *setnode, *setnodetmp;210 214 211 215 log_message( LOGLVL_INFO, "Destroying connection with fd %d", irc->fd ); 212 216 213 if( irc->status & USTATUS_IDENTIFIED && set_get int( irc, "save_on_quit" ) )217 if( irc->status & USTATUS_IDENTIFIED && set_getbool( &irc->set, "save_on_quit" ) ) 214 218 if( storage_save( irc, TRUE ) != STORAGE_OK ) 215 219 irc_usermsg( irc, "Error while saving settings!" ); … … 251 255 query_del(irc, irc->queries); 252 256 253 if (irc->accounts != NULL) { 254 account = irc->accounts; 255 while (account != NULL) { 256 g_free(account->user); 257 g_free(account->pass); 258 g_free(account->server); 259 accounttmp = account; 260 account = account->next; 261 g_free(accounttmp); 262 } 263 } 257 while (irc->accounts) 258 account_del(irc, irc->accounts); 259 260 while (irc->set) 261 set_del(&irc->set, irc->set->key); 264 262 265 263 if (irc->users != NULL) { … … 286 284 g_hash_table_destroy(irc->watches); 287 285 288 if (irc->nicks != NULL) {289 nick = irc->nicks;290 while (nick != NULL) {291 g_free(nick->nick);292 g_free(nick->handle);293 294 nicktmp = nick;295 nick = nick->next;296 g_free(nicktmp);297 }298 }299 286 if (irc->help != NULL) { 300 287 helpnode = irc->help; … … 307 294 } 308 295 } 309 if (irc->set != NULL) {310 setnode = irc->set;311 while (setnode != NULL) {312 g_free(setnode->key);313 g_free(setnode->def);314 g_free(setnode->value);315 316 setnodetmp = setnode;317 setnode = setnode->next;318 g_free(setnodetmp);319 }320 }321 296 g_free(irc); 322 297 … … 329 304 void irc_setpass (irc_t *irc, const char *pass) 330 305 { 331 if (irc->password)g_free (irc->password);306 g_free (irc->password); 332 307 333 308 if (pass) { 334 309 irc->password = g_strdup (pass); 335 irc_usermsg (irc, "Password successfully changed");336 310 } else { 337 311 irc->password = NULL; … … 364 338 } 365 339 366 if( ( cs = set_getstr( irc, "charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) )340 if( ( cs = set_getstr( &irc->set, "charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) 367 341 { 368 342 conv[IRC_MAX_LINE] = 0; … … 584 558 585 559 strip_newlines( line ); 586 if( ( cs = set_getstr( irc, "charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) )560 if( ( cs = set_getstr( &irc->set, "charset" ) ) && ( g_strcasecmp( cs, "utf-8" ) != 0 ) ) 587 561 { 588 562 char conv[IRC_MAX_LINE+1]; … … 611 585 the queue. If it's FALSE, we emptied the buffer and saved ourselves some work 612 586 in the event queue. */ 613 if( bitlbee_io_current_client_write( irc, irc->fd, GAIM_INPUT_WRITE ) ) 614 irc->w_watch_source_id = b_input_add( irc->fd, GAIM_INPUT_WRITE, bitlbee_io_current_client_write, irc ); 587 /* Really can't be done as long as the code doesn't do error checking very well: 588 if( bitlbee_io_current_client_write( irc, irc->fd, GAIM_INPUT_WRITE ) ) */ 589 590 /* So just always do it via the event handler. */ 591 irc->w_watch_source_id = b_input_add( irc->fd, GAIM_INPUT_WRITE, bitlbee_io_current_client_write, irc ); 615 592 } 616 593 … … 652 629 char namelist[385] = ""; 653 630 struct conversation *c = NULL; 631 char *ops = set_getstr( &irc->set, "ops" ); 654 632 655 633 /* RFCs say there is no error reply allowed on NAMES, so when the … … 666 644 } 667 645 668 if( u->gc && !u->away && set_get int( irc, "away_devoice" ) )646 if( u->gc && !u->away && set_getbool( &irc->set, "away_devoice" ) ) 669 647 strcat( namelist, "+" ); 648 else if( ( strcmp( u->nick, irc->mynick ) == 0 && ( strcmp( ops, "root" ) == 0 || strcmp( ops, "both" ) == 0 ) ) || 649 ( strcmp( u->nick, irc->nick ) == 0 && ( strcmp( ops, "user" ) == 0 || strcmp( ops, "both" ) == 0 ) ) ) 650 strcat( namelist, "@" ); 670 651 671 652 strcat( namelist, u->nick ); … … 676 657 { 677 658 GList *l; 678 char *ops = set_getstr( irc, "ops" );679 659 680 660 /* root and the user aren't in the channel userlist but should … … 924 904 { 925 905 char *nick, *s; 926 char reason[ 64];906 char reason[128]; 927 907 928 908 if( u->gc && u->gc->flags & OPT_LOGGING_OUT ) 929 909 { 930 if( u->gc-> user->proto_opt[0][0])910 if( u->gc->acc->server ) 931 911 g_snprintf( reason, sizeof( reason ), "%s %s", irc->myhost, 932 u->gc-> user->proto_opt[0]);912 u->gc->acc->server ); 933 913 else if( ( s = strchr( u->gc->username, '@' ) ) ) 934 914 g_snprintf( reason, sizeof( reason ), "%s %s", irc->myhost, … … 936 916 else 937 917 g_snprintf( reason, sizeof( reason ), "%s %s.%s", irc->myhost, 938 u->gc-> prpl->name, irc->myhost );918 u->gc->acc->prpl->name, irc->myhost ); 939 919 940 920 /* proto_opt might contain garbage after the : */ … … 1012 992 else if( g_strncasecmp( s + 1, "TYPING", 6 ) == 0 ) 1013 993 { 1014 if( u && u->gc && u->gc-> prpl->send_typing && strlen( s ) >= 10 )994 if( u && u->gc && u->gc->acc->prpl->send_typing && strlen( s ) >= 10 ) 1015 995 { 1016 996 time_t current_typing_notice = time( NULL ); … … 1018 998 if( current_typing_notice - u->last_typing_notice >= 5 ) 1019 999 { 1020 u->gc-> prpl->send_typing( u->gc, u->handle, s[8] == '1' );1000 u->gc->acc->prpl->send_typing( u->gc, u->handle, s[8] == '1' ); 1021 1001 u->last_typing_notice = current_typing_notice; 1022 1002 } … … 1051 1031 } 1052 1032 } 1053 else if( c && c->gc && c->gc-> prpl )1033 else if( c && c->gc && c->gc->acc && c->gc->acc->prpl ) 1054 1034 { 1055 1035 return( bim_chat_msg( c->gc, c->id, s ) ); … … 1083 1063 if( !u || !u->gc ) return; 1084 1064 1085 if( set_get int( irc, "buddy_sendbuffer" ) && set_getint( irc, "buddy_sendbuffer_delay" ) > 0 )1065 if( set_getbool( &irc->set, "buddy_sendbuffer" ) && set_getint( &irc->set, "buddy_sendbuffer_delay" ) > 0 ) 1086 1066 { 1087 1067 int delay; … … 1110 1090 strcat( u->sendbuf, "\n" ); 1111 1091 1112 delay = set_getint( irc, "buddy_sendbuffer_delay" );1092 delay = set_getint( &irc->set, "buddy_sendbuffer_delay" ); 1113 1093 if( delay <= 5 ) 1114 1094 delay *= 1000; … … 1175 1155 int len = strlen( irc->nick) + 3; 1176 1156 prefix = g_new (char, len ); 1177 g_snprintf( prefix, len, "%s%s", irc->nick, set_getstr( irc, "to_char" ) );1157 g_snprintf( prefix, len, "%s%s", irc->nick, set_getstr( &irc->set, "to_char" ) ); 1178 1158 prefix[len-1] = 0; 1179 1159 }
Note: See TracChangeset
for help on using the changeset viewer.