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