Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/jabber/jabber.c

    r89d736a r4ac647d  
    3333#include "jabber.h"
    3434#include "md5.h"
     35#include "base64.h"
    3536
    3637GSList *jabber_connections;
    3738
    38 /* First enty is the default */
    39 static const int jabber_port_list[] = {
    40         5222,
    41         5223,
    42         5220,
    43         5221,
    44         5224,
    45         5225,
    46         5226,
    47         5227,
    48         5228,
    49         5229,
    50         80,
    51         443,
    52         0
    53 };
    54 
    5539static void jabber_init( account_t *acc )
    5640{
    5741        set_t *s;
    58         char str[16];
    59        
    60         g_snprintf( str, sizeof( str ), "%d", jabber_port_list[0] );
    61         s = set_add( &acc->set, "port", str, set_eval_int, acc );
     42       
     43        s = set_add( &acc->set, "port", JABBER_PORT_DEFAULT, set_eval_int, acc );
    6244        s->flags |= ACC_SET_OFFLINE_ONLY;
    6345       
     
    8062        s = set_add( &acc->set, "xmlconsole", "false", set_eval_bool, acc );
    8163        s->flags |= ACC_SET_OFFLINE_ONLY;
     64
     65        s = set_add( &acc->set, "proxy", "<local>;<auto>", NULL, acc );
    8266}
    8367
     
    9074        struct ns_srv_reply *srv = NULL;
    9175        char *connect_to, *s;
    92         int i;
    9376       
    9477        /* For now this is needed in the _connected() handlers if using
     
    196179        imcb_log( ic, "Connecting" );
    197180       
    198         for( i = 0; jabber_port_list[i] > 0; i ++ )
    199                 if( set_getint( &acc->set, "port" ) == jabber_port_list[i] )
    200                         break;
    201 
    202         if( jabber_port_list[i] == 0 )
    203         {
    204                 imcb_log( ic, "Illegal port number" );
     181        if( set_getint( &acc->set, "port" ) < JABBER_PORT_MIN ||
     182            set_getint( &acc->set, "port" ) > JABBER_PORT_MAX )
     183        {
     184                imcb_log( ic, "Incorrect port number, must be in the %d-%d range",
     185                               JABBER_PORT_MIN, JABBER_PORT_MAX );
    205186                imc_logout( ic, FALSE );
    206187                return;
     
    240221}
    241222
    242 /* This generates an unfinished md5_state_t variable. Every time we generate
    243    an ID, we finish the state by adding a sequence number and take the hash. */
    244223static void jabber_generate_id_hash( struct jabber_data *jd )
    245224{
    246         md5_byte_t binbuf[4];
     225        md5_state_t id_hash;
     226        md5_byte_t binbuf[16];
    247227        char *s;
    248228       
    249         md5_init( &jd->cached_id_prefix );
    250         md5_append( &jd->cached_id_prefix, (unsigned char *) jd->username, strlen( jd->username ) );
    251         md5_append( &jd->cached_id_prefix, (unsigned char *) jd->server, strlen( jd->server ) );
     229        md5_init( &id_hash );
     230        md5_append( &id_hash, (unsigned char *) jd->username, strlen( jd->username ) );
     231        md5_append( &id_hash, (unsigned char *) jd->server, strlen( jd->server ) );
    252232        s = set_getstr( &jd->ic->acc->set, "resource" );
    253         md5_append( &jd->cached_id_prefix, (unsigned char *) s, strlen( s ) );
    254         random_bytes( binbuf, 4 );
    255         md5_append( &jd->cached_id_prefix, binbuf, 4 );
     233        md5_append( &id_hash, (unsigned char *) s, strlen( s ) );
     234        random_bytes( binbuf, 16 );
     235        md5_append( &id_hash, binbuf, 16 );
     236        md5_finish( &id_hash, binbuf );
     237       
     238        s = base64_encode( binbuf, 9 );
     239        jd->cached_id_prefix = g_strdup_printf( "%s%s", JABBER_CACHED_ID, s );
     240        g_free( s );
    256241}
    257242
     
    260245        struct jabber_data *jd = ic->proto_data;
    261246       
     247        while( jd->filetransfers )
     248                imcb_file_canceled( ( ( struct jabber_transfer *) jd->filetransfers->data )->ft, "Logging out" );
     249
     250        while( jd->streamhosts )
     251        {
     252                jabber_streamhost_t *sh = jd->streamhosts->data;
     253                jd->streamhosts = g_slist_remove( jd->streamhosts, sh );
     254                g_free( sh->jid );
     255                g_free( sh->host );
     256                g_free( sh );
     257        }
     258
    262259        if( jd->fd >= 0 )
    263260                jabber_end_stream( ic );
     
    284281        xt_free( jd->xt );
    285282       
     283        g_free( jd->cached_id_prefix );
    286284        g_free( jd->away_message );
    287285        g_free( jd->username );
     
    546544        ret->send_typing = jabber_send_typing;
    547545        ret->handle_cmp = g_strcasecmp;
     546        ret->transfer_request = jabber_si_transfer_request;
    548547
    549548        register_protocol( ret );
Note: See TracChangeset for help on using the changeset viewer.