Changeset 080c43a


Ignore:
Timestamp:
2012-09-16T13:52:19Z (7 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
79bb7e4
Parents:
f9258ae
Message:

Some more tweaks: Should show up online now, and be able to send and receive
messages. Seeing online state is still a problem due to the protocol#: gunk.

Location:
protocols/msn
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • protocols/msn/msn.c

    rf9258ae r080c43a  
    191191                md->away_state = msn_away_state_list + 1;
    192192       
    193         if( !msn_ns_write( ic, -1, "CHG %d %s\r\n", ++md->trId, md->away_state->code ) )
     193        if( !msn_ns_write( ic, -1, "CHG %d %s %d:%02d\r\n", ++md->trId, md->away_state->code, MSN_CAP1, MSN_CAP2 ) )
    194194                return;
    195195       
    196         uux = g_markup_printf_escaped( "<Data><PSM>%s</PSM><CurrentMedia></CurrentMedia>"
    197                                        "</Data>", message ? message : "" );
     196        uux = g_markup_printf_escaped( "<EndpointData><Capabilities>%d:%02d"
     197                                       "</Capabilities></EndpointData>",
     198                                       MSN_CAP1, MSN_CAP2 );
     199        msn_ns_write( ic, -1, "UUX %d %zd\r\n%s", ++md->trId, strlen( uux ), uux );
     200        g_free( uux );
     201       
     202        uux = g_markup_printf_escaped( "<PrivateEndpointData><EpName>%s</EpName>"
     203                                       "<Idle>%s</Idle><ClientType>%d</ClientType>"
     204                                       "<State>%s</State></PrivateEndpointData>",
     205                                       md->uuid,
     206                                       strcmp( md->away_state->code, "IDL" ) ? "false" : "true",
     207                                       1, /* ? */
     208                                       md->away_state->code );
     209        msn_ns_write( ic, -1, "UUX %d %zd\r\n%s", ++md->trId, strlen( uux ), uux );
     210        g_free( uux );
     211       
     212        uux = g_markup_printf_escaped( "<Data><DDP></DDP><PSM>%s</PSM>"
     213                                       "<CurrentMedia></CurrentMedia>"
     214                                       "<MachineGuid>%s</MachineGuid></Data>",
     215                                       message ? message : "", md->uuid );
    198216        msn_ns_write( ic, -1, "UUX %d %zd\r\n%s", ++md->trId, strlen( uux ), uux );
    199217        g_free( uux );
  • protocols/msn/msn.h

    rf9258ae r080c43a  
    6464
    6565#define MSN_SB_NEW         -24062002
     66
     67#define MSN_CAP1        0xC000
     68#define MSN_CAP2        0x0000
    6669
    6770#define MSN_MESSAGE_HEADERS "MIME-Version: 1.0\r\n" \
  • protocols/msn/ns.c

    rf9258ae r080c43a  
    574574        {
    575575                /* Status message. */
    576                 if( num_parts >= 4 )
    577                         handler->msglen = atoi( cmd[3] );
     576                if( num_parts >= 3 )
     577                        handler->msglen = atoi( cmd[2] );
    578578        }
    579579        else if( strcmp( cmd[0], "NOT" ) == 0 )
  • protocols/msn/sb.c

    rf9258ae r080c43a  
    308308        struct msn_switchboard *sb = data;
    309309        struct im_connection *ic;
     310        struct msn_data *md;
    310311        char buf[1024];
    311312       
     
    315316       
    316317        ic = sb->ic;
     318        md = ic->proto_data;
    317319       
    318320        if( source != sb->fd )
     
    332334       
    333335        if( sb->session == MSN_SB_NEW )
    334                 g_snprintf( buf, sizeof( buf ), "USR %d %s %s\r\n", ++sb->trId, ic->acc->user, sb->key );
     336                g_snprintf( buf, sizeof( buf ), "USR %d %s;{%s} %s\r\n", ++sb->trId, ic->acc->user, md->uuid, sb->key );
    335337        else
    336                 g_snprintf( buf, sizeof( buf ), "ANS %d %s %s %d\r\n", ++sb->trId, ic->acc->user, sb->key, sb->session );
     338                g_snprintf( buf, sizeof( buf ), "ANS %d %s;{%s} %s %d\r\n", ++sb->trId, ic->acc->user, md->uuid, sb->key, sb->session );
    337339       
    338340        if( msn_sb_write( sb, "%s", buf ) )
     
    462464                        }
    463465                       
    464                         imcb_chat_add_buddy( sb->chat, cmd[4] );
     466                        /* For as much as I understand this MPOP stuff now, a
     467                           switchboard has two (or more) roster entries per
     468                           participant. One "bare JID" and one JID;UUID. Ignore
     469                           the latter. */
     470                        if( !strchr( cmd[4], ';' ) )
     471                                imcb_chat_add_buddy( sb->chat, cmd[4] );
    465472                       
    466473                        if( num == tot )
     
    506513                        return( 0 );
    507514                }
     515               
     516                /* See IRO above. Handle "bare JIDs" only. */
     517                if( strchr( cmd[1], ';' ) )
     518                        return 1;
    508519               
    509520                if( sb->who && g_strcasecmp( cmd[1], sb->who ) == 0 )
     
    541552                        return( st );
    542553                }
     554                else if( strcmp( cmd[1], ic->acc->user ) == 0 )
     555                {
     556                        /* Well, gee thanks. Thanks for letting me know I've arrived.. */
     557                }
    543558                else if( sb->who )
    544559                {
Note: See TracChangeset for help on using the changeset viewer.