Changes in irc.c [435f552:823de9d]
Legend:
- Unmodified
- Added
- Removed
-
irc.c
r435f552 r823de9d 29 29 #include "crypting.h" 30 30 #include "ipc.h" 31 #include <sys/types.h> 32 #include <sys/wait.h> 31 33 32 34 static gboolean irc_userping( gpointer _irc, int fd, b_input_condition cond ); 35 static void irc_welcome( irc_t* irc ); 33 36 34 37 GSList *irc_connection_list = NULL; … … 78 81 } 79 82 80 static char *set_eval_away_status( set_t *set, char *value )81 {82 irc_t *irc = set->data;83 account_t *a;84 85 g_free( set->value );86 set->value = g_strdup( value );87 88 for( a = irc->accounts; a; a = a->next )89 {90 struct im_connection *ic = a->ic;91 92 if( ic && ic->flags & OPT_LOGGED_IN )93 imc_away_send_update( ic );94 }95 96 return value;97 }98 99 83 irc_t *irc_new( int fd ) 100 84 { … … 161 145 162 146 irc_connection_list = g_slist_append( irc_connection_list, irc ); 163 164 s = set_add( &irc->set, "away", NULL, set_eval_away_status, irc ); 165 s->flags |= SET_NULL_OK; 166 s = set_add( &irc->set, "away_devoice", "true", set_eval_away_devoice, irc ); 147 167 148 s = set_add( &irc->set, "auto_connect", "true", set_eval_bool, irc ); 168 s = set_add( &irc->set, "auto_reconnect", " true", set_eval_bool, irc );149 s = set_add( &irc->set, "auto_reconnect", "false", set_eval_bool, irc ); 169 150 s = set_add( &irc->set, "auto_reconnect_delay", "5*3<900", set_eval_account_reconnect_delay, irc ); 170 151 s = set_add( &irc->set, "buddy_sendbuffer", "false", set_eval_bool, irc ); 171 152 s = set_add( &irc->set, "buddy_sendbuffer_delay", "200", set_eval_int, irc ); 172 153 s = set_add( &irc->set, "charset", "utf-8", set_eval_charset, irc ); 154 s = set_add( &irc->set, "color_encrypted", "true", set_eval_bool, irc ); 173 155 s = set_add( &irc->set, "debug", "false", set_eval_bool, irc ); 174 156 s = set_add( &irc->set, "default_target", "root", NULL, irc ); 175 157 s = set_add( &irc->set, "display_namechanges", "false", set_eval_bool, irc ); 176 158 s = set_add( &irc->set, "handle_unknown", "root", NULL, irc ); 159 s = set_add( &irc->set, "halfop_buddies", "encrypted", set_eval_halfop_buddies, irc ); 177 160 s = set_add( &irc->set, "lcnicks", "true", set_eval_bool, irc ); 178 s = set_add( &irc->set, "ops", "both", set_eval_ops, irc ); 161 s = set_add( &irc->set, "op_buddies", "trusted", set_eval_op_buddies, irc ); 162 s = set_add( &irc->set, "op_root", "true", set_eval_op_root, irc ); 163 s = set_add( &irc->set, "otr_policy", "oppurtunistic", set_eval_otr_policy, irc ); 179 164 s = set_add( &irc->set, "password", NULL, set_eval_password, irc ); 180 165 s->flags |= SET_NULL_OK; … … 184 169 s = set_add( &irc->set, "save_on_quit", "true", set_eval_bool, irc ); 185 170 s = set_add( &irc->set, "simulate_netsplit", "true", set_eval_bool, irc ); 186 s = set_add( &irc->set, "status", NULL, set_eval_away_status, irc );187 s->flags |= SET_NULL_OK;188 171 s = set_add( &irc->set, "strip_html", "true", NULL, irc ); 189 172 s = set_add( &irc->set, "to_char", ": ", set_eval_to_char, irc ); 190 173 s = set_add( &irc->set, "typing_notice", "false", set_eval_bool, irc ); 174 s = set_add( &irc->set, "voice_buddies", "notaway", set_eval_voice_buddies, irc); 191 175 192 176 conf_loaddefaults( irc ); 193 177 178 irc->otr = otr_new(); 179 194 180 /* Evaluator sets the iconv/oconv structures. */ 195 181 set_eval_charset( set_find( &irc->set, "charset" ), set_getstr( &irc->set, "charset" ) ); … … 343 329 344 330 g_free( irc->last_target ); 331 332 otr_free(irc->otr); 345 333 346 334 g_free( irc ); 347 335 348 336 if( global.conf->runmode == RUNMODE_INETD || 349 337 global.conf->runmode == RUNMODE_FORKDAEMON || … … 430 418 } 431 419 432 if( lines[i] && ( cmd = irc_parse_line( lines[i] ) ) ) 433 { 420 if( lines[i] ) 421 { 422 if( ( cmd = irc_parse_line( lines[i] ) ) == NULL ) 423 continue; 434 424 irc_exec( irc, cmd ); 435 425 g_free( cmd ); … … 506 496 if( line[0] == ':' ) 507 497 { 508 for( i = 0; line[i] && line[i]!= ' '; i ++ );498 for( i = 0; line[i] != ' '; i ++ ); 509 499 line = line + i; 510 500 } … … 714 704 } 715 705 706 const char *user_mode_prefix( irc_t *irc, user_t *u ) 707 { 708 static char op[] = "@"; 709 static char halfop[] = "%"; 710 static char voice[] = "+"; 711 static char none[] = ""; 712 713 int or = set_getbool(&irc->set, "op_root"); 714 int ou = set_getbool(&irc->set, "op_user"); 715 char *ob = set_getstr(&irc->set, "op_buddies"); 716 char *hb = set_getstr(&irc->set, "halfop_buddies"); 717 char *vb = set_getstr(&irc->set, "voice_buddies"); 718 719 if( (!strcmp(u->nick, irc->mynick) && or) || 720 (!strcmp(u->nick, irc->nick) && ou) || 721 (!u->away && !strcmp(ob, "notaway")) || 722 (u->encrypted && !strcmp(ob, "encrypted")) || 723 (u->encrypted>1 && !strcmp(ob, "trusted")) 724 ) 725 return op; 726 else if( (!u->away && !strcmp(hb, "notaway")) || 727 (u->encrypted && !strcmp(hb, "encrypted")) || 728 (u->encrypted>1 && !strcmp(hb, "trusted")) 729 ) 730 return halfop; 731 else if( (!u->away && !strcmp(vb, "notaway")) || 732 (u->encrypted && !strcmp(vb, "encrypted")) || 733 (u->encrypted>1 && !strcmp(vb, "trusted")) 734 ) 735 return voice; 736 else 737 return none; 738 } 739 716 740 void irc_names( irc_t *irc, char *channel ) 717 741 { … … 719 743 char namelist[385] = ""; 720 744 struct groupchat *c = NULL; 721 char *ops = set_getstr( &irc->set, "ops" );722 745 723 746 /* RFCs say there is no error reply allowed on NAMES, so when the … … 734 757 } 735 758 736 if( u->ic && !u->away && set_getbool( &irc->set, "away_devoice" ) ) 737 strcat( namelist, "+" ); 738 else if( ( strcmp( u->nick, irc->mynick ) == 0 && ( strcmp( ops, "root" ) == 0 || strcmp( ops, "both" ) == 0 ) ) || 739 ( strcmp( u->nick, irc->nick ) == 0 && ( strcmp( ops, "user" ) == 0 || strcmp( ops, "both" ) == 0 ) ) ) 740 strcat( namelist, "@" ); 741 759 strcat( namelist, user_mode_prefix(irc, u) ); 742 760 strcat( namelist, u->nick ); 743 761 strcat( namelist, " " ); … … 750 768 /* root and the user aren't in the channel userlist but should 751 769 show up in /NAMES, so list them first: */ 752 sprintf( namelist, "%s%s %s%s ", s trcmp( ops, "root" ) == 0 || strcmp( ops, "both") ? "@" : "", irc->mynick,753 s trcmp( ops, "user" ) == 0 || strcmp( ops, "both") ? "@" : "", irc->nick );770 sprintf( namelist, "%s%s %s%s ", set_getbool(&irc->set, "op_root") ? "@" : "", irc->mynick, 771 set_getbool(&irc->set, "op_user") ? "@" : "", irc->nick ); 754 772 755 773 for( l = c->in_room; l; l = l->next ) if( ( u = user_findhandle( c->ic, l->data ) ) ) … … 761 779 } 762 780 781 strcat( namelist, user_mode_prefix(irc, u) ); 763 782 strcat( namelist, u->nick ); 764 783 strcat( namelist, " " ); … … 802 821 irc_reply( irc, 3, ":%s", IRCD_INFO ); 803 822 irc_reply( irc, 4, "%s %s %s %s", irc->myhost, BITLBEE_VERSION, UMODES UMODES_PRIV, CMODES ); 804 irc_reply( irc, 5, "PREFIX=(ov)@+ CHANTYPES=%s CHANMODES=,,,%s NICKLEN=%d NETWORK=BitlBee " 805 "CASEMAPPING=rfc1459 MAXTARGETS=1 WATCH=128 :are supported by this server", 806 CTYPES, CMODES, MAX_NICK_LENGTH - 1 ); 823 irc_reply( irc, 5, "PREFIX=(ohv)@%%+ CHANTYPES=#& CHANMODES=,,,%s NICKLEN=%d NETWORK=BitlBee CASEMAPPING=rfc1459 MAXTARGETS=1 WATCH=128 :are supported by this server", CMODES, MAX_NICK_LENGTH - 1 ); 807 824 irc_motd( irc ); 808 825 irc->umode[0] = '\0'; 809 826 irc_umode_set( irc, "+" UMODE, 1 ); 810 811 u = user_add( irc, irc->mynick ); 827 u = user_add( irc, irc->mynick ); 812 828 u->host = g_strdup( irc->myhost ); 813 829 u->realname = g_strdup( ROOT_FN ); … … 831 847 irc_spawn( irc, u ); 832 848 833 irc_usermsg( irc, "Welcome to the BitlBee gateway!\n\n" 834 "If you've never used BitlBee before, please do read the help " 835 "information using the \x02help\x02 command. Lots of FAQs are " 836 "answered there.\n" 837 "If you already have an account on this server, just use the " 838 "\x02identify\x02 command to identify yourself." ); 849 irc_welcome( irc ); 839 850 840 851 if( global.conf->runmode == RUNMODE_FORKDAEMON || global.conf->runmode == RUNMODE_DAEMON ) … … 851 862 root_command( irc, send_cmd ); 852 863 g_free( send_cmd[1] ); 864 } 865 } 866 867 static void irc_welcome( irc_t *irc ) 868 { 869 FILE *f; 870 871 f = fopen( global.conf->welcomefile, "r" ); 872 if( !f ) 873 { 874 irc_usermsg( irc, "Welcome to the BitlBee gateway!\n\n" 875 "If you've never used BitlBee before, please do read the help " 876 "information using the \x02help\x02 command. Lots of FAQs are " 877 "answered there.\n" 878 "OTR users please note: Private key files are owned by the user " 879 "BitlBee is running as.\n" 880 "If you already have an account on this server, just use the " 881 "\x02identify\x02 command to identify yourself." ); 882 } 883 else 884 { 885 char linebuf[380]; 886 887 while( fgets( linebuf, 380, f ) ) 888 { 889 irc_usermsg( irc, linebuf ); 890 } 891 892 fclose( f ); 853 893 } 854 894 } … … 1045 1085 user_t *u = NULL; 1046 1086 1047 if( strchr( CTYPES, *nick ))1087 if( *nick == '#' || *nick == '&' ) 1048 1088 { 1049 1089 if( !( c = irc_chat_by_channel( irc, nick ) ) )
Note: See TracChangeset
for help on using the changeset viewer.