Changeset 5a71d9c for set.c


Ignore:
Timestamp:
2008-02-09T17:58:13Z (16 years ago)
Author:
Sven Moritz Hallberg <sm@…>
Branches:
master
Children:
f55cfe9
Parents:
a13855a
Message:
  • add support for setting ops/voice according to OTR msgstate
  • add 'otr trust' user command
  • support non-otr messages during keygen
  • run otr messages through strip_html
  • interpret <b> and <i> tags in html messages
  • record max message size in prpl
  • add 'encrypted' flag to user_t
  • cosmetics
File:
1 edited

Legend:

Unmodified
Added
Removed
  • set.c

    ra13855a r5a71d9c  
    209209}
    210210
    211 char *set_eval_ops( set_t *set, char *value )
     211char *set_eval_op_root( set_t *set, char *value )
    212212{
    213213        irc_t *irc = set->data;
    214        
    215         if( g_strcasecmp( value, "user" ) == 0 )
    216                 irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
    217                                                               irc->channel, "+o-o", irc->nick, irc->mynick );
    218         else if( g_strcasecmp( value, "root" ) == 0 )
    219                 irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
    220                                                               irc->channel, "-o+o", irc->nick, irc->mynick );
    221         else if( g_strcasecmp( value, "both" ) == 0 )
    222                 irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
    223                                                               irc->channel, "+oo", irc->nick, irc->mynick );
    224         else if( g_strcasecmp( value, "none" ) == 0 )
    225                 irc_write( irc, ":%s!%s@%s MODE %s %s %s %s", irc->mynick, irc->mynick, irc->myhost,
    226                                                               irc->channel, "-oo", irc->nick, irc->mynick );
     214        char *ret = set_eval_bool(set, value);
     215        int b = bool2int(ret);
     216       
     217        irc_write( irc, ":%s!%s@%s MODE %s %s %s", irc->mynick, irc->mynick, irc->myhost,
     218                                                   irc->channel, b?"+o":"-o", irc->mynick );
     219        return ret;
     220}
     221
     222char *set_eval_op_user( set_t *set, char *value )
     223{
     224        irc_t *irc = set->data;
     225        char *ret = set_eval_bool(set, value);
     226        int b = bool2int(ret);
     227       
     228        irc_write( irc, ":%s!%s@%s MODE %s %s %s", irc->mynick, irc->mynick, irc->myhost,
     229                                                   irc->channel, b?"+o":"-o", irc->nick );
     230        return ret;
     231}
     232
     233/* generalized version of set_eval_op/voice_buddies */
     234char *set_eval_mode_buddies( set_t *set, char *value, char modeflag )
     235{
     236        irc_t *irc = set->data;
     237        char op[64], deop[64];
     238        int nop=0, ndeop=0;
     239        user_t *u;
     240        int mode;
     241       
     242        if(!strcmp(value, "false"))
     243                mode=0;
     244        else if(!strcmp(value, "encrypted"))
     245                mode=1;
     246        else if(!strcmp(value, "trusted"))
     247                mode=2;
     248        else if(!strcmp(value, "notaway"))
     249                mode=3;
    227250        else
    228251                return NULL;
    229252       
     253        /* sorry for calling them op/deop - too lazy for search+replace :P */
     254        op[0]='\0';
     255        deop[0]='\0';
     256        for(u=irc->users; u; u=u->next) {
     257                /* we're only concerned with online buddies */
     258                if(!u->ic || !u->online)
     259                        continue;
     260
     261                /* just in case... */
     262                if(strlen(u->nick) >= 64)
     263                        continue;
     264               
     265                /* dump out ops/deops when the corresponding name list fills up */
     266                if(strlen(op)+strlen(u->nick)+2 > 64) {
     267                        char *flags = g_strnfill(nop, modeflag);
     268                        irc_write( irc, ":%s!%s@%s MODE %s +%s%s", irc->mynick, irc->mynick, irc->myhost,
     269                                                               irc->channel, flags, op );
     270                    op[0]='\0';
     271                    g_free(flags);
     272                }
     273                if(strlen(deop)+strlen(u->nick)+2 > 64) {
     274                        char *flags = g_strnfill(ndeop, modeflag);
     275                        irc_write( irc, ":%s!%s@%s MODE %s -%s%s", irc->mynick, irc->mynick, irc->myhost,
     276                                                               irc->channel, flags, deop );
     277                    deop[0]='\0';
     278                    g_free(flags);
     279                }
     280               
     281                switch(mode) {
     282                /* "false" */
     283                case 0:
     284                        g_strlcat(deop, " ", 64);
     285                        g_strlcat(deop, u->nick, 64);
     286                        ndeop++;
     287                        break;
     288                /* "encrypted" */
     289                case 1:
     290                        if(u->encrypted) {
     291                                g_strlcat(op, " ", 64);
     292                                g_strlcat(op, u->nick, 64);
     293                                nop++;
     294                        } else {
     295                                g_strlcat(deop, " ", 64);
     296                                g_strlcat(deop, u->nick, 64);
     297                                ndeop++;
     298                        }
     299                        break;
     300                /* "trusted" */
     301                case 2:
     302                        if(u->encrypted > 1) {
     303                                g_strlcat(op, " ", 64);
     304                                g_strlcat(op, u->nick, 64);
     305                                nop++;
     306                        } else {
     307                                g_strlcat(deop, " ", 64);
     308                                g_strlcat(deop, u->nick, 64);
     309                                ndeop++;
     310                        }
     311                        break;
     312                /* "notaway" */
     313                case 3:
     314                        if(u->away) {
     315                                g_strlcat(deop, " ", 64);
     316                                g_strlcat(deop, u->nick, 64);
     317                                ndeop++;
     318                        } else {
     319                                g_strlcat(op, " ", 64);
     320                                g_strlcat(op, u->nick, 64);
     321                                nop++;
     322                        }
     323                }
     324        }
     325        /* dump anything left in op/deop lists */
     326        if(*op) {
     327                char *flags = g_strnfill(nop, modeflag);
     328                irc_write( irc, ":%s!%s@%s MODE %s +%s%s", irc->mynick, irc->mynick, irc->myhost,
     329                                                               irc->channel, flags, op );
     330                g_free(flags);
     331        }
     332        if(*deop) {
     333                char *flags = g_strnfill(ndeop, modeflag);
     334                irc_write( irc, ":%s!%s@%s MODE %s -%s%s", irc->mynick, irc->mynick, irc->myhost,
     335                                                       irc->channel, flags, deop );
     336                g_free(flags);
     337        }
     338       
    230339        return value;
     340}
     341
     342char *set_eval_op_buddies( set_t *set, char *value )
     343{
     344        return set_eval_mode_buddies(set, value, 'o');
     345}
     346
     347char *set_eval_voice_buddies( set_t *set, char *value )
     348{
     349        return set_eval_mode_buddies(set, value, 'v');
    231350}
    232351
Note: See TracChangeset for help on using the changeset viewer.