libpurple/protocols/qq/qq_network.c

branch
soc.2008.masterpassword
changeset 33992
a4299c59c1b0
parent 24044
3fd74bed3968
child 33997
035d8594b66a
equal deleted inserted replaced
33991:0eb45874d73a 33992:a4299c59c1b0
562 return TRUE; /* if return FALSE, timeout callback stops */ 562 return TRUE; /* if return FALSE, timeout callback stops */
563 } 563 }
564 564
565 /* the callback function after socket is built 565 /* the callback function after socket is built
566 * we setup the qq protocol related configuration here */ 566 * we setup the qq protocol related configuration here */
567 typedef struct _ConnectInfo
568 {
569 PurpleConnection * gc;
570 gint source;
571 const gchar * error;
572 } ConnectInfo;
573 static void qq_connect_cb_continue(PurpleAccount * account, char * password, GError * error, gpointer data);
574
567 static void qq_connect_cb(gpointer data, gint source, const gchar *error_message) 575 static void qq_connect_cb(gpointer data, gint source, const gchar *error_message)
568 { 576 {
577 ConnectInfo * info;
578 PurpleAccount * account;
579
580 info = g_malloc(sizeof(ConnectInfo));
581 info->gc = (PurpleConnection *) data;
582 info->source = source;
583 info->error =error_message;
584
585 account = purple_connection_get_account(info->gc);
586
587 purple_account_get_password_async(account, qq_connect_cb_continue, info);
588
589 g_free(info);
590 }
591 static void qq_connect_cb_continue(PurpleAccount * account,
592 char * passwd,
593 GError * error,
594 gpointer data)
595 {
596 ConnectInfo * info = (ConnectInfo *)data;
597 gint source = info->source;
598 const gchar *error_message = info->error;
599 PurpleConnection *gc = info->gc;
569 qq_data *qd; 600 qq_data *qd;
570 PurpleConnection *gc;
571 gchar *conn_msg; 601 gchar *conn_msg;
572 const gchar *passwd;
573 PurpleAccount *account ;
574
575 gc = (PurpleConnection *) data;
576 602
577 if (!PURPLE_CONNECTION_IS_VALID(gc)) { 603 if (!PURPLE_CONNECTION_IS_VALID(gc)) {
578 purple_debug(PURPLE_DEBUG_INFO, "QQ_CONN", "Invalid connection\n"); 604 purple_debug(PURPLE_DEBUG_INFO, "QQ_CONN", "Invalid connection\n");
579 close(source); 605 close(source);
580 return; 606 return;
581 } 607 }
582 608
583 g_return_if_fail(gc != NULL && gc->proto_data != NULL); 609 g_return_if_fail(gc != NULL && gc->proto_data != NULL);
584 610
585 qd = (qq_data *) gc->proto_data; 611 qd = (qq_data *) gc->proto_data;
586 account = purple_connection_get_account(gc);
587 612
588 /* Connect is now complete; clear the PurpleProxyConnectData */ 613 /* Connect is now complete; clear the PurpleProxyConnectData */
589 qd->connect_data = NULL; 614 qd->connect_data = NULL;
590 615
591 if (source < 0) { /* socket returns -1 */ 616 if (source < 0) { /* socket returns -1 */
601 srandom(time(NULL)); 626 srandom(time(NULL));
602 qd->send_seq = random() & 0x0000ffff; 627 qd->send_seq = random() & 0x0000ffff;
603 qd->fd = source; 628 qd->fd = source;
604 qd->logged_in = FALSE; 629 qd->logged_in = FALSE;
605 qd->channel = 1; 630 qd->channel = 1;
606 qd->uid = strtol(purple_account_get_username(purple_connection_get_account(gc)), NULL, 10); 631 qd->uid = strtol(purple_account_get_username(account), NULL, 10);
607 632
608 /* now generate md5 processed passwd */ 633 /* now generate md5 processed passwd */
609 passwd = purple_account_get_password(purple_connection_get_account(gc));
610 634
611 /* use twice-md5 of user password as session key since QQ 2003iii */ 635 /* use twice-md5 of user password as session key since QQ 2003iii */
612 qq_get_md5(qd->password_twice_md5, sizeof(qd->password_twice_md5), 636 qq_get_md5(qd->password_twice_md5, sizeof(qd->password_twice_md5),
613 (guint8 *)passwd, strlen(passwd)); 637 (guint8 *)passwd, strlen(passwd));
614 qq_get_md5(qd->password_twice_md5, sizeof(qd->password_twice_md5), 638 qq_get_md5(qd->password_twice_md5, sizeof(qd->password_twice_md5),

mercurial