Changeset 2f13222


Ignore:
Timestamp:
2006-06-25T19:55:18Z (19 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
3f9440d, 471573f
Parents:
9b63df6
Message:

IRC protocol compliance fixes (closes: #158, #159, #160).

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • irc.c

    r9b63df6 r2f13222  
    657657                c = conv_findchannel( channel );
    658658       
    659         /* RFC's say there is no error reply allowed on NAMES, so when the
     659        /* RFCs say there is no error reply allowed on NAMES, so when the
    660660           channel is invalid, just give an empty reply. */
    661661       
     
    671671                                        s = "";
    672672                               
    673                                 irc_reply( irc, 353, "@ %s :%s%s", channel, s, u->nick );
     673                                irc_reply( irc, 353, "= %s :%s%s", channel, s, u->nick );
    674674                        }
    675675                        else if( !u->gc )
     
    682682                                        s = "";
    683683                               
    684                                 irc_reply( irc, 353, "@ %s :%s%s", channel, s, u->nick );
     684                                irc_reply( irc, 353, "= %s :%s%s", channel, s, u->nick );
    685685                        }
    686686                }
     
    697697                for( l = c->in_room; l; l = l->next )
    698698                        if( ( u = user_findhandle( c->gc, l->data ) ) )
    699                                 irc_reply( irc, 353, "@ %s :%s%s", channel, "", u->nick );
     699                                irc_reply( irc, 353, "= %s :%s%s", channel, "", u->nick );
    700700        }
    701701       
     
    735735        irc_reply( irc,   5, "PREFIX=(ov)@+ CHANTYPES=#& CHANMODES=,,,%s NICKLEN=%d NETWORK=BitlBee CASEMAPPING=rfc1459 MAXTARGETS=1 WATCH=128 :are supported by this server", CMODES, MAX_NICK_LENGTH - 1 );
    736736        irc_motd( irc );
     737        irc->umode[0] = '\0';
    737738        irc_umode_set( irc, "+" UMODE, 1 );
    738739
     
    842843        char m[256], st = 1, *t;
    843844        int i;
     845        char changes[512], *p, st2 = 2;
     846        char badflag = 0;
    844847       
    845848        memset( m, 0, sizeof( m ) );
     
    847850        for( t = irc->umode; *t; t ++ )
    848851                m[(int)*t] = 1;
    849        
     852
     853        p = changes;
    850854        for( t = s; *t; t ++ )
    851855        {
     
    853857                        st = *t == '+';
    854858                else if( st == 0 || ( strchr( UMODES, *t ) || ( allow_priv && strchr( UMODES_PRIV, *t ) ) ) )
     859                {
     860                        if( m[(int)*t] != st)
     861                        {
     862                                if( st != st2 )
     863                                        st2 = st, *p++ = st ? '+' : '-';
     864                                *p++ = *t;
     865                        }
    855866                        m[(int)*t] = st;
    856         }
     867                }
     868                else
     869                        badflag = 1;
     870        }
     871        *p = '\0';
    857872       
    858873        memset( irc->umode, 0, sizeof( irc->umode ) );
     
    862877                        irc->umode[strlen(irc->umode)] = i;
    863878       
    864         irc_reply( irc, 221, "+%s", irc->umode );
     879        if( badflag )
     880                irc_reply( irc, 501, ":Unknown MODE flag" );
     881        /* Deliberately no !user@host on the prefix here */
     882        if( *changes )
     883                irc_write( irc, ":%s MODE %s %s", irc->nick, irc->nick, changes );
    865884}
    866885
  • irc_commands.c

    r9b63df6 r2f13222  
    119119                        if( cmd[2] )
    120120                                irc_umode_set( irc, cmd[2], 0 );
     121                        else
     122                                irc_reply( irc, 221, "+%s", irc->umode );
    121123                }
    122124                else
     
    637639                        }
    638640                       
    639                         break;
    640                 }
    641 }
     641                        return;
     642                }
     643       
     644        if( irc->status >= USTATUS_LOGGED_IN )
     645                irc_reply( irc, 421, "%s :Unknown command", cmd[0] );
     646}
Note: See TracChangeset for help on using the changeset viewer.