libpurple/protocols/qq/qq_network.c

branch
soc.2008.masterpassword
changeset 33992
a4299c59c1b0
parent 24044
3fd74bed3968
child 33997
035d8594b66a
--- a/libpurple/protocols/qq/qq_network.c	Thu Aug 14 19:47:00 2008 +0000
+++ b/libpurple/protocols/qq/qq_network.c	Fri Aug 15 03:39:45 2008 +0000
@@ -564,15 +564,41 @@
 
 /* the callback function after socket is built
  * we setup the qq protocol related configuration here */
+typedef struct _ConnectInfo
+{
+	PurpleConnection * gc;
+	gint source;
+	const gchar * error;
+} ConnectInfo;
+static void qq_connect_cb_continue(PurpleAccount * account, char * password, GError * error, gpointer data);
+
 static void qq_connect_cb(gpointer data, gint source, const gchar *error_message)
 {
+	ConnectInfo * info;
+	PurpleAccount * account;
+
+	info = g_malloc(sizeof(ConnectInfo));
+	info->gc = (PurpleConnection *) data;
+	info->source = source;
+	info->error =error_message;
+	
+	account = purple_connection_get_account(info->gc);
+
+	purple_account_get_password_async(account, qq_connect_cb_continue, info);
+
+	g_free(info);
+}
+static void qq_connect_cb_continue(PurpleAccount * account,
+				   char * passwd,
+				   GError * error,
+				   gpointer data)
+{
+	ConnectInfo * info = (ConnectInfo *)data;
+	gint source			= info->source;
+	const gchar *error_message	= info->error;
+	PurpleConnection *gc		= info->gc;
 	qq_data *qd;
-	PurpleConnection *gc;
 	gchar *conn_msg;
-	const gchar *passwd;
-	PurpleAccount *account ;
-
-	gc = (PurpleConnection *) data;
 
 	if (!PURPLE_CONNECTION_IS_VALID(gc)) {
 		purple_debug(PURPLE_DEBUG_INFO, "QQ_CONN", "Invalid connection\n");
@@ -583,7 +609,6 @@
 	g_return_if_fail(gc != NULL && gc->proto_data != NULL);
 
 	qd = (qq_data *) gc->proto_data;
-	account = purple_connection_get_account(gc);
 
 	/* Connect is now complete; clear the PurpleProxyConnectData */
 	qd->connect_data = NULL;
@@ -603,10 +628,9 @@
 	qd->fd = source;
 	qd->logged_in = FALSE;
 	qd->channel = 1;
-	qd->uid = strtol(purple_account_get_username(purple_connection_get_account(gc)), NULL, 10);
+	qd->uid = strtol(purple_account_get_username(account), NULL, 10);
 
 	/* now generate md5 processed passwd */
-	passwd = purple_account_get_password(purple_connection_get_account(gc));
 
 	/* use twice-md5 of user password as session key since QQ 2003iii */
 	qq_get_md5(qd->password_twice_md5, sizeof(qd->password_twice_md5),

mercurial