Changeset 4107fea


Ignore:
Timestamp:
2015-05-31T02:40:04Z (9 years ago)
Author:
dequis <dx@…>
Children:
ef9ee0e
Parents:
85dabae
git-author:
dequis <dx@…> (18-04-15 22:09:46)
git-committer:
dequis <dx@…> (31-05-15 02:40:04)
Message:

msn: start implementing basic MSNP24 login

Not working yet since it's missing the UIC

Location:
protocols/msn
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • protocols/msn/gw.c

    r85dabae r4107fea  
    154154void msn_gw_open(struct msn_gw *gw)
    155155{
    156         msn_gw_dorequest(gw, "Action=open&Server=NS");
     156        msn_gw_dorequest(gw, "Action=open&Server=NS&Protocol=mtp&Version=1");
    157157}
    158158
  • protocols/msn/msn.c

    r85dabae r4107fea  
    7676        md->domaintree = g_tree_new(msn_domaintree_cmp);
    7777        md->fd = -1;
    78         md->is_http = TRUE;
     78        md->is_http = FALSE;
    7979
    8080        msn_connections = g_slist_prepend(msn_connections, ic);
  • protocols/msn/ns.c

    r85dabae r4107fea  
    5656
    5757        if (getenv("BITLBEE_DEBUG")) {
    58                 fprintf(stderr, "\x1b[91m>>>[NS] %s\n\x1b[97m", out);
     58                fprintf(stderr, "\n\x1b[91m>>>[NS] %s\n\x1b[97m", out);
    5959        }
    6060
     
    148148        }
    149149
    150         if (msn_ns_write(ic, "VER %d %s CVR0\r\n", ++md->trId, MSNP_VER)) {
     150        if (msn_ns_write_cmd(ic, "CNT", "CON", "<connect><ver>2</ver><agent><os>winnt</os><osVer>5.2</osVer><proc>x86</proc><lcid>en-us</lcid></agent></connect>")) {
    151151                if (!md->is_http) {
    152152                        md->inpa = b_input_add(md->fd, B_EV_IO_READ, msn_ns_callback, md);
     
    215215{
    216216        struct im_connection *ic = md->ic;
    217 
    218         if (num_parts == 0) {
    219                 /* Hrrm... Empty command...? Ignore? */
    220                 return(1);
    221         }
    222 
    223         if (strcmp(cmd[0], "VER") == 0) {
    224                 if (cmd[2] && strncmp(cmd[2], MSNP_VER, 5) != 0) {
    225                         imcb_error(ic, "Unsupported protocol");
    226                         imc_logout(ic, FALSE);
    227                         return(0);
    228                 }
    229 
    230                 return(msn_ns_write(ic, "CVR %d 0x0409 mac 10.2.0 ppc macmsgs 3.5.1 macmsgs %s VmVyc2lvbjogMQ0KWGZyQ291bnQ6IDINClhmclNlbnRVVENUaW1lOiA2MzU2MTQ3OTU5NzgzOTAwMDANCklzR2VvWGZyOiB0cnVlDQo=\r\n",
    231                                     ++md->trId, ic->acc->user));
    232         } else if (strcmp(cmd[0], "CVR") == 0) {
    233                 /* We don't give a damn about the information we just received */
    234                 return msn_ns_write(ic, "USR %d SSO I %s\r\n", ++md->trId, ic->acc->user);
    235         } else if (strcmp(cmd[0], "XFR") == 0) {
    236                 char *server;
    237                 int port;
    238 
    239                 if (num_parts >= 6 && strcmp(cmd[2], "NS") == 0) {
    240                         b_event_remove(md->inpa);
    241                         md->inpa = -1;
    242 
    243                         server = strchr(cmd[3], ':');
    244                         if (!server) {
    245                                 imcb_error(ic, "Syntax error");
    246                                 imc_logout(ic, TRUE);
    247                                 return(0);
    248                         }
    249                         *server = 0;
    250                         port = atoi(server + 1);
    251                         server = cmd[3];
    252 
    253                         imcb_log(ic, "Transferring to other server");
    254                         return msn_ns_connect(ic, server, port);
    255                 } else {
    256                         imcb_error(ic, "Syntax error");
    257                         imc_logout(ic, TRUE);
    258                         return(0);
    259                 }
    260         } else if (strcmp(cmd[0], "USR") == 0) {
    261                 if (num_parts >= 6 && strcmp(cmd[2], "SSO") == 0 &&
    262                     strcmp(cmd[3], "S") == 0) {
    263                         g_free(md->pp_policy);
    264                         md->pp_policy = g_strdup(cmd[4]);
    265                         msn_soap_passport_sso_request(ic, cmd[5]);
    266                 } else if (strcmp(cmd[2], "OK") == 0) {
    267                         /* If the number after the handle is 0, the e-mail
    268                            address is unverified, which means we can't change
    269                            the display name. */
    270                         if (cmd[4][0] == '0') {
    271                                 md->flags |= MSN_EMAIL_UNVERIFIED;
    272                         }
    273 
    274                         imcb_log(ic, "Authenticated, getting buddy list");
    275                         msn_soap_memlist_request(ic);
    276                 } else {
    277                         imcb_error(ic, "Unknown authentication type");
    278                         imc_logout(ic, FALSE);
    279                         return(0);
    280                 }
     217        struct xt_node *xml;
     218
     219        if (strcmp(cmd[0], "XFR") == 0) {
     220                struct xt_node *target;
     221                char *server, *p;
     222                int port, st;
     223
     224                if (!(xml = xt_from_string(msg + 2, msglen - 2)) ||
     225                    !(target = xt_find_node(xml->children, "target")) ||
     226                    !(server = target->text) ||
     227                    !(p = strchr(server, ':'))) {
     228                        return 1;
     229                }
     230               
     231                server = target->text;
     232                *p = 0;
     233                port = atoi(p + 1);
     234
     235                b_event_remove(md->inpa);
     236                md->inpa = -1;
     237
     238                imcb_log(ic, "Transferring to other server");
     239
     240                st = msn_ns_connect(ic, server, port);
     241
     242                xt_free_node(xml);
     243
     244                return st;
     245
     246        } else if (strcmp(cmd[0], "CNT") == 0) {
     247                msn_soap_passport_sso_request(ic);
     248
     249                /* continues in msn_auth_got_passport_token */
     250
     251        } else if (strcmp(cmd[0], "ATH") == 0) {
     252                char *payload;
     253
     254                payload = g_markup_printf_escaped(
     255                        "<msgr><ver>1</ver><client><name>Skype</name><ver>2/4.3.0.37/174</ver></client>"
     256                        "<epid>%s</epid></msgr>\r\n",
     257                        md->uuid);
     258
     259                msn_ns_write_cmd(ic, "BND", "CON\\MSGR", payload);
     260
     261                g_free(payload);
     262
     263        } else if (strcmp(cmd[0], "BND") == 0) {
     264                imcb_log(ic, "Authenticated, getting buddy list");
     265                msn_soap_memlist_request(ic);
     266
    281267        } else if (strcmp(cmd[0], "ADL") == 0) {
    282268                if (num_parts >= 3 && strcmp(cmd[2], "OK") == 0) {
     
    562548{
    563549        struct msn_data *md;
     550        char *payload = NULL;
    564551
    565552        /* Dead connection? */
     
    570557        md = ic->proto_data;
    571558
    572         if (token) {
    573                 msn_ns_write(ic, "USR %d SSO S %s %s {%s}\r\n", ++md->trId, md->tokens[0], token, md->uuid);
    574         } else {
     559        if (!token) {
    575560                imcb_error(ic, "Error during Passport authentication: %s", error);
    576561                imc_logout(ic, TRUE);
    577562        }
     563
     564        // ATH
     565        payload = g_markup_printf_escaped(
     566                "<user><ssl-compact-ticket>%s</ssl-compact-ticket>"
     567                "<ssl-site-name>chatservice.live.com</ssl-site-name></user>",
     568                md->tokens[0]);
     569
     570        msn_ns_write_cmd(ic, "ATH", "CON\\USER", payload);
     571
     572        g_free(payload);
     573
     574        /* continues in msn_ns_command */
    578575}
    579576
Note: See TracChangeset for help on using the changeset viewer.