| 260 elems = g_strsplit(cmd->params[3], ",", 0); |
260 elems = g_strsplit(cmd->params[3], ",", 0); |
| 261 |
261 |
| 262 for (cur = elems; *cur != NULL; cur++) |
262 for (cur = elems; *cur != NULL; cur++) |
| 263 { |
263 { |
| 264 tokens = g_strsplit(*cur, "=", 2); |
264 tokens = g_strsplit(*cur, "=", 2); |
| 265 if(tokens[0]&&tokens[1]) |
265 if(tokens[0] && tokens[1]) |
| 266 { |
266 { |
| 267 purple_debug_info("MSNP14","challenge %p,key:%s,value:%s\n", |
267 purple_debug_info("MSNP14","challenge %p,key:%s,value:%s\n", |
| 268 session->nexus->challenge_data,tokens[0],tokens[1]); |
268 session->nexus->challenge_data,tokens[0],tokens[1]); |
| 269 g_hash_table_insert(session->nexus->challenge_data, tokens[0], tokens[1]); |
269 g_hash_table_insert(session->nexus->challenge_data, tokens[0], tokens[1]); |
| 270 } |
270 /* Don't free each of the tokens, only the array. */ |
| 271 /* Don't free each of the tokens, only the array. */ |
271 g_free(tokens); |
| 272 g_free(tokens); |
272 } else |
| |
273 g_strfreev(tokens); |
| 273 } |
274 } |
| 274 |
275 |
| 275 g_strfreev(elems); |
276 g_strfreev(elems); |
| 276 |
277 |
| 277 msn_session_set_login_step(session, MSN_LOGIN_STEP_AUTH_START); |
278 msn_session_set_login_step(session, MSN_LOGIN_STEP_AUTH_START); |
| 411 } |
412 } |
| 412 else |
413 else |
| 413 { |
414 { |
| 414 g_return_if_fail(cmd->payload_cb != NULL); |
415 g_return_if_fail(cmd->payload_cb != NULL); |
| 415 |
416 |
| 416 purple_debug_info("MSNP14","MSG payload:{%s}\n",cmd->payload); |
417 purple_debug_info("MSNP14","MSG payload:{%.*s}\n",cmd->payload_len, cmd->payload); |
| 417 cmd->payload_cb(cmdproc, cmd, cmd->payload, cmd->payload_len); |
418 cmd->payload_cb(cmdproc, cmd, cmd->payload, cmd->payload_len); |
| 418 } |
419 } |
| 419 } |
420 } |
| 420 |
421 |
| 421 /*send Message to Yahoo Messenger*/ |
422 /*send Message to Yahoo Messenger*/ |
| 462 content_type = msn_message_get_content_type(msg); |
463 content_type = msn_message_get_content_type(msg); |
| 463 purple_debug_info("MSNP14","type:%d\n",content_type); |
464 purple_debug_info("MSNP14","type:%d\n",content_type); |
| 464 if(!strcmp(content_type,"text/plain")){ |
465 if(!strcmp(content_type,"text/plain")){ |
| 465 const char *value; |
466 const char *value; |
| 466 const char *body; |
467 const char *body; |
| 467 char *body_str; |
|
| 468 char *body_enc; |
468 char *body_enc; |
| 469 char *body_final = NULL; |
469 char *body_final = NULL; |
| 470 size_t body_len; |
470 size_t body_len; |
| 471 |
471 |
| 472 body = msn_message_get_bin_data(msg, &body_len); |
472 body = msn_message_get_bin_data(msg, &body_len); |
| 473 body_str = g_strndup(body, body_len); |
473 body_enc = g_markup_escape_text(body, body_len); |
| 474 body_enc = g_markup_escape_text(body_str, -1); |
|
| 475 g_free(body_str); |
|
| 476 |
474 |
| 477 if ((value = msn_message_get_attr(msg, "X-MMS-IM-Format")) != NULL) { |
475 if ((value = msn_message_get_attr(msg, "X-MMS-IM-Format")) != NULL) { |
| 478 char *pre, *post; |
476 char *pre, *post; |
| 479 |
477 |
| 480 msn_parse_format(value, &pre, &post); |
478 msn_parse_format(value, &pre, &post); |
| 483 g_free(pre); |
481 g_free(pre); |
| 484 g_free(post); |
482 g_free(post); |
| 485 } |
483 } |
| 486 g_free(body_enc); |
484 g_free(body_enc); |
| 487 serv_got_im(gc, passport, body_final, 0, time(NULL)); |
485 serv_got_im(gc, passport, body_final, 0, time(NULL)); |
| |
486 g_free(body_final); |
| 488 } |
487 } |
| 489 if(!strcmp(content_type,"text/x-msmsgscontrol")){ |
488 if(!strcmp(content_type,"text/x-msmsgscontrol")){ |
| 490 if(msn_message_get_attr(msg, "TypingUser") != NULL){ |
489 if(msn_message_get_attr(msg, "TypingUser") != NULL){ |
| 491 serv_got_typing(gc, passport, MSN_TYPING_RECV_TIMEOUT, |
490 serv_got_typing(gc, passport, MSN_TYPING_RECV_TIMEOUT, |
| 492 PURPLE_TYPING); |
491 PURPLE_TYPING); |
| 733 trans = msn_transaction_new(cmdproc, "FQY","%d", strlen(payload)); |
732 trans = msn_transaction_new(cmdproc, "FQY","%d", strlen(payload)); |
| 734 msn_transaction_set_payload(trans, payload, strlen(payload)); |
733 msn_transaction_set_payload(trans, payload, strlen(payload)); |
| 735 msn_cmdproc_send_trans(cmdproc, trans); |
734 msn_cmdproc_send_trans(cmdproc, trans); |
| 736 |
735 |
| 737 g_free(payload); |
736 g_free(payload); |
| 738 g_free(tokens); |
737 g_strfreev(tokens); |
| 739 } |
738 } |
| 740 |
739 |
| 741 static void |
740 static void |
| 742 blp_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
741 blp_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) |
| 743 { |
742 { |
| 1410 |
1409 |
| 1411 if ((fd = purple_mkstemp(&session->passport_info.file, FALSE)) == NULL) |
1410 if ((fd = purple_mkstemp(&session->passport_info.file, FALSE)) == NULL) |
| 1412 { |
1411 { |
| 1413 purple_debug_error("msn", |
1412 purple_debug_error("msn", |
| 1414 "Error opening temp passport file: %s\n", |
1413 "Error opening temp passport file: %s\n", |
| 1415 strerror(errno)); |
1414 g_strerror(errno)); |
| 1416 } |
1415 } |
| 1417 else |
1416 else |
| 1418 { |
1417 { |
| 1419 #ifdef _WIN32 |
1418 #ifdef _WIN32 |
| 1420 fputs("<!-- saved from url=(0013)about:internet -->\n", fd); |
1419 fputs("<!-- saved from url=(0013)about:internet -->\n", fd); |
| 1459 |
1458 |
| 1460 if (fclose(fd)) |
1459 if (fclose(fd)) |
| 1461 { |
1460 { |
| 1462 purple_debug_error("msn", |
1461 purple_debug_error("msn", |
| 1463 "Error closing temp passport file: %s\n", |
1462 "Error closing temp passport file: %s\n", |
| 1464 strerror(errno)); |
1463 g_strerror(errno)); |
| 1465 |
1464 |
| 1466 g_unlink(session->passport_info.file); |
1465 g_unlink(session->passport_info.file); |
| 1467 g_free(session->passport_info.file); |
1466 g_free(session->passport_info.file); |
| 1468 session->passport_info.file = NULL; |
1467 session->passport_info.file = NULL; |
| 1469 } |
1468 } |
| 1788 if (strcmp(msg->remote_user, "Hotmail")) |
1787 if (strcmp(msg->remote_user, "Hotmail")) |
| 1789 /* This isn't an official message. */ |
1788 /* This isn't an official message. */ |
| 1790 return; |
1789 return; |
| 1791 |
1790 |
| 1792 /*new a oim session*/ |
1791 /*new a oim session*/ |
| 1793 session->oim = msn_oim_new(session); |
1792 // session->oim = msn_oim_new(session); |
| 1794 // msn_oim_connect(session->oim); |
1793 // msn_oim_connect(session->oim); |
| 1795 |
1794 |
| 1796 table = msn_message_get_hashtable_from_body(msg); |
1795 table = msn_message_get_hashtable_from_body(msg); |
| 1797 |
1796 |
| 1798 mdata = g_hash_table_lookup(table, "Mail-Data"); |
1797 mdata = g_hash_table_lookup(table, "Mail-Data"); |