Changeset 523fb23 for protocols/msn/ns.c


Ignore:
Timestamp:
2010-08-11T08:08:39Z (10 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
7f34ce2
Parents:
7db65b7
Message:

Implement MSNP15 SSO (Sadistic Sign-On).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • protocols/msn/ns.c

    r7db65b7 r523fb23  
    3535static int msn_ns_message( gpointer data, char *msg, int msglen, char **cmd, int num_parts );
    3636
    37 static void msn_auth_got_passport_token( struct msn_auth_data *mad );
    3837static gboolean msn_ns_got_display_name( struct im_connection *ic, char *name );
    3938
     
    7473        md->handler->rxq = g_new0( char, 1 );
    7574       
    76         g_snprintf( s, sizeof( s ), "VER %d MSNP14 CVR0\r\n", ++md->trId );
     75        g_snprintf( s, sizeof( s ), "VER %d MSNP15 CVR0\r\n", ++md->trId );
    7776        if( msn_write( ic, s, strlen( s ) ) )
    7877        {
     
    114113        if( strcmp( cmd[0], "VER" ) == 0 )
    115114        {
    116                 if( cmd[2] && strncmp( cmd[2], "MSNP14", 5 ) != 0 )
     115                if( cmd[2] && strncmp( cmd[2], "MSNP15", 5 ) != 0 )
    117116                {
    118117                        imcb_error( ic, "Unsupported protocol" );
     
    128127        {
    129128                /* We don't give a damn about the information we just received */
    130                 g_snprintf( buf, sizeof( buf ), "USR %d TWN I %s\r\n", ++md->trId, ic->acc->user );
     129                g_snprintf( buf, sizeof( buf ), "USR %d SSO I %s\r\n", ++md->trId, ic->acc->user );
    131130                return( msn_write( ic, buf, strlen( buf ) ) );
    132131        }
     
    221220        else if( strcmp( cmd[0], "USR" ) == 0 )
    222221        {
    223                 if( num_parts == 5 && strcmp( cmd[2], "TWN" ) == 0 && strcmp( cmd[3], "S" ) == 0 )
    224                 {
    225                         /* Time for some Passport black magic... */
    226                         if( !passport_get_token( msn_auth_got_passport_token, ic, ic->acc->user, ic->acc->pass, cmd[4] ) )
    227                         {
    228                                 imcb_error( ic, "Error while contacting Passport server" );
    229                                 imc_logout( ic, TRUE );
    230                                 return( 0 );
    231                         }
     222                if( num_parts >= 6 && strcmp( cmd[2], "SSO" ) == 0 &&
     223                    strcmp( cmd[3], "S" ) == 0 )
     224                {
     225                        msn_soap_passport_sso_request( ic, cmd[4], cmd[5] );
    232226                }
    233227                else if( strcmp( cmd[2], "OK" ) == 0 )
     
    775769}
    776770
    777 static void msn_auth_got_passport_token( struct msn_auth_data *mad )
     771void msn_auth_got_passport_token( struct im_connection *ic, char *token )
    778772{
    779         struct im_connection *ic = mad->data;
    780773        struct msn_data *md;
    781774       
     
    785778       
    786779        md = ic->proto_data;
    787         if( mad->token )
     780       
    788781        {
    789782                char buf[1024];
    790783               
    791                 md->passport_token = g_strdup( mad->token );
    792                
    793                 g_snprintf( buf, sizeof( buf ), "USR %d TWN S %s\r\n", ++md->trId, mad->token );
     784                g_snprintf( buf, sizeof( buf ), "USR %d SSO S %s %s\r\n", ++md->trId, md->tokens[0], token );
    794785                msn_write( ic, buf, strlen( buf ) );
    795         }
    796         else
    797         {
    798                 imcb_error( ic, "Error during Passport authentication: %s", mad->error );
    799                 imc_logout( ic, TRUE );
    800786        }
    801787}
Note: See TracChangeset for help on using the changeset viewer.