Changeset 4aa8a04


Ignore:
Timestamp:
2010-09-04T15:54:52Z (9 years ago)
Author:
Wilmer van der Gaast <wilmer@…>
Branches:
master
Children:
27053b5
Parents:
bae0617
Message:

This works (includes some token sabotage code to ease testing), but I just
realised there's probably no need for the additional temporary NS connection.

Location:
protocols/msn
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • protocols/msn/msn.c

    rbae0617 r4aa8a04  
    6464        md->away_state = msn_away_state_list;
    6565        md->domaintree = g_tree_new( msn_domaintree_cmp );
     66        md->ns->fd = md->auth->fd = -1;
    6667       
    6768        msn_connections = g_slist_prepend( msn_connections, ic );
     
    180181        struct msn_data *md = ic->proto_data;
    181182       
     183        strcpy( md->tokens[1], md->tokens[2] );
     184       
    182185        if( state == NULL )
    183186                md->away_state = msn_away_state_list;
     
    281284static void msn_rem_permit( struct im_connection *ic, char *who )
    282285{
    283         msn_buddy_list_remove( ic, MSN_BUDDY_AL, who, NULL );
     286        //msn_buddy_list_remove( ic, MSN_BUDDY_AL, who, NULL );
    284287}
    285288
     
    299302static void msn_rem_deny( struct im_connection *ic, char *who )
    300303{
    301         msn_buddy_list_remove( ic, MSN_BUDDY_BL, who, NULL );
     304        //msn_buddy_list_remove( ic, MSN_BUDDY_BL, who, NULL );
    302305}
    303306
  • protocols/msn/msn.h

    rbae0617 r4aa8a04  
    108108        int trId;
    109109        char *tokens[4];
    110         char *lock_key;
    111        
    112         GSList *msgq, *grpq;
     110        char *lock_key, *pp_policy;
     111       
     112        GSList *msgq, *grpq, *soapq;
    113113        GSList *switchboards;
    114114        int sb_failures;
  • protocols/msn/ns.c

    rbae0617 r4aa8a04  
    111111        handler->rxq = g_new0( char, 1 );
    112112       
    113         if( msn_ns_write( ic, -1, "VER %d %s CVR0\r\n", ++md->trId, MSNP_VER ) )
     113        if( msn_ns_write( ic, source, "VER %d %s CVR0\r\n", ++md->trId, MSNP_VER ) )
    114114        {
    115115                handler->inpa = b_input_add( handler->fd, B_EV_IO_READ, msn_ns_callback, handler );
     
    173173                }
    174174               
    175                 return( msn_ns_write( ic, -1, "CVR %d 0x0409 mac 10.2.0 ppc macmsgs 3.5.1 macmsgs %s\r\n",
     175                return( msn_ns_write( ic, handler->fd, "CVR %d 0x0409 mac 10.2.0 ppc macmsgs 3.5.1 macmsgs %s\r\n",
    176176                                      ++md->trId, ic->acc->user ) );
    177177        }
     
    179179        {
    180180                /* We don't give a damn about the information we just received */
    181                 return msn_ns_write( ic, -1, "USR %d SSO I %s\r\n", ++md->trId, ic->acc->user );
     181                return msn_ns_write( ic, handler->fd, "USR %d SSO I %s\r\n", ++md->trId, ic->acc->user );
    182182        }
    183183        else if( strcmp( cmd[0], "XFR" ) == 0 )
     
    272272                    strcmp( cmd[3], "S" ) == 0 )
    273273                {
    274                         msn_soap_passport_sso_request( ic, cmd[4], cmd[5] );
     274                        g_free( md->pp_policy );
     275                        md->pp_policy = g_strdup( cmd[4] );
     276                        msn_soap_passport_sso_request( ic, cmd[5] );
     277                        if( handler == md->auth )
     278                        {
     279                                msn_ns_close( md->auth );
     280                                return 0;
     281                        }
    275282                }
    276283                else if( strcmp( cmd[2], "OK" ) == 0 )
  • protocols/msn/soap.c

    rbae0617 r4aa8a04  
    137137        {
    138138                struct xt_parser *parser;
     139                struct xt_node *err;
    139140               
    140141                parser = xt_new( soap_req->xml_parser, soap_req );
    141142                xt_feed( parser, http_req->reply_body, http_req->body_size );
     143                if( http_req->status_code == 500 &&
     144                    ( err = xt_find_path( parser->root, "soap:Body/soap:Fault/detail/errorcode" ) ) &&
     145                    err->text_len > 0 && strcmp( err->text, "PassportAuthFail" ) == 0 )
     146                {
     147                        struct msn_data *md = soap_req->ic->proto_data;
     148                       
     149                        xt_free( parser );
     150                        if( md->auth->fd == -1 )
     151                                msn_ns_connect( soap_req->ic, md->auth, MSN_NS_HOST, MSN_NS_PORT );
     152                        md->soapq = g_slist_prepend( md->soapq, soap_req );
     153                       
     154                        return;
     155                }
     156               
    142157                xt_handle( parser, NULL, -1 );
    143158                xt_free( parser );
     
    202217}
    203218
     219static int msn_soapq_empty( struct im_connection *ic )
     220{
     221        struct msn_data *md = ic->proto_data;
     222       
     223        while( md->soapq )
     224        {
     225                msn_soap_send_request( (struct msn_soap_req_data*) md->soapq->data );
     226                md->soapq = g_slist_remove( md->soapq, md->soapq->data );
     227        }
     228       
     229        return MSN_SOAP_OK;
     230}
     231
    204232
    205233/* passport_sso: Authentication MSNP15+ */
     
    207235struct msn_soap_passport_sso_data
    208236{
    209         char *policy;
    210237        char *nonce;
    211238        char *secret;
     
    217244        struct msn_soap_passport_sso_data *sd = soap_req->data;
    218245        struct im_connection *ic = soap_req->ic;
     246        struct msn_data *md = ic->proto_data;
    219247       
    220248        if( g_str_has_suffix( ic->acc->user, "@msn.com" ) )
     
    224252       
    225253        soap_req->payload = g_markup_printf_escaped( SOAP_PASSPORT_SSO_PAYLOAD,
    226                 ic->acc->user, ic->acc->pass, sd->policy );
     254                ic->acc->user, ic->acc->pass, md->pp_policy );
    227255       
    228256        return MSN_SOAP_OK;
     
    301329        struct msn_soap_passport_sso_data *sd = soap_req->data;
    302330        struct im_connection *ic = soap_req->ic;
     331        struct msn_data *md = ic->proto_data;
    303332        char *key1, *key2, *key3, *blurb64;
    304333        int key1_len;
     
    326355        };
    327356       
     357        if( md->soapq )
     358                return msn_soapq_empty( ic );
     359       
    328360        if( sd->secret == NULL )
    329361        {
     
    364396        struct msn_soap_passport_sso_data *sd = soap_req->data;
    365397       
    366         g_free( sd->policy );
    367398        g_free( sd->nonce );
    368399        g_free( sd->secret );
     
    372403}
    373404
    374 int msn_soap_passport_sso_request( struct im_connection *ic, const char *policy, const char *nonce )
     405int msn_soap_passport_sso_request( struct im_connection *ic, const char *nonce )
    375406{
    376407        struct msn_soap_passport_sso_data *sd = g_new0( struct msn_soap_passport_sso_data, 1 );
    377408       
    378         sd->policy = g_strdup( policy );
    379409        sd->nonce = g_strdup( nonce );
    380410       
  • protocols/msn/soap.h

    rbae0617 r4aa8a04  
    139139"</Envelope>"
    140140
    141 int msn_soap_passport_sso_request( struct im_connection *ic, const char *policy, const char *nonce );
     141int msn_soap_passport_sso_request( struct im_connection *ic, const char *nonce );
    142142
    143143
Note: See TracChangeset for help on using the changeset viewer.