comparison libgaim/protocols/qq/qq.c @ 15076:2c93b0620065

[gaim-migrate @ 17859] Fix win32 build for buddy icon changes. Also a couple leak fixes. There really isn't that much actually changed, but also I did some whitespace cleanup at the same time. committer: Tailor Script <tailor@pidgin.im>
author Daniel Atallah <daniel.atallah@gmail.com>
date Thu, 30 Nov 2006 17:45:28 +0000
parents 322d6b5472a4
children c8957b9c6202
comparison
equal deleted inserted replaced
15075:346faf2a5acd 15076:2c93b0620065
93 static void _qq_login(GaimAccount *account) 93 static void _qq_login(GaimAccount *account)
94 { 94 {
95 const gchar *qq_server, *qq_port; 95 const gchar *qq_server, *qq_port;
96 qq_data *qd; 96 qq_data *qd;
97 GaimConnection *gc; 97 GaimConnection *gc;
98 GaimPresence *presence; 98 GaimPresence *presence;
99 gboolean use_tcp; 99 gboolean use_tcp;
100 100
101 g_return_if_fail(account != NULL); 101 g_return_if_fail(account != NULL);
102 102
103 gc = gaim_account_get_connection(account); 103 gc = gaim_account_get_connection(account);
110 gc->proto_data = qd; 110 gc->proto_data = qd;
111 111
112 qq_server = gaim_account_get_string(account, "server", NULL); 112 qq_server = gaim_account_get_string(account, "server", NULL);
113 qq_port = gaim_account_get_string(account, "port", NULL); 113 qq_port = gaim_account_get_string(account, "port", NULL);
114 use_tcp = gaim_account_get_bool(account, "use_tcp", FALSE); 114 use_tcp = gaim_account_get_bool(account, "use_tcp", FALSE);
115 presence = gaim_account_get_presence(account); 115 presence = gaim_account_get_presence(account);
116 116
117 qd->use_tcp = use_tcp; 117 qd->use_tcp = use_tcp;
118 118
119 if(gaim_presence_is_status_primitive_active(presence, GAIM_STATUS_INVISIBLE)) { 119 if(gaim_presence_is_status_primitive_active(presence, GAIM_STATUS_INVISIBLE)) {
120 qd->login_mode = QQ_LOGIN_MODE_HIDDEN; 120 qd->login_mode = QQ_LOGIN_MODE_HIDDEN;
125 qd->login_mode = QQ_LOGIN_MODE_NORMAL; 125 qd->login_mode = QQ_LOGIN_MODE_NORMAL;
126 } 126 }
127 127
128 if (qq_server == NULL || strlen(qq_server) == 0) 128 if (qq_server == NULL || strlen(qq_server) == 0)
129 qq_server = use_tcp ? 129 qq_server = use_tcp ?
130 tcp_server_list[random() % tcp_server_amount] : 130 tcp_server_list[random() % tcp_server_amount] :
131 udp_server_list[random() % udp_server_amount]; 131 udp_server_list[random() % udp_server_amount];
132 132
133 if (qq_port == NULL || strtol(qq_port, NULL, 10) == 0) 133 if (qq_port == NULL || strtol(qq_port, NULL, 10) == 0)
134 qq_port = use_tcp ? QQ_TCP_QUERY_PORT : QQ_UDP_PORT; 134 qq_port = use_tcp ? QQ_TCP_QUERY_PORT : QQ_UDP_PORT;
135 135
136 gaim_connection_update_progress(gc, _("Connecting"), 0, QQ_CONNECT_STEPS); 136 gaim_connection_update_progress(gc, _("Connecting"), 0, QQ_CONNECT_STEPS);
137 137
138 if (qq_connect(account, qq_server, strtol(qq_port, NULL, 10), use_tcp, FALSE) < 0) 138 if (qq_connect(account, qq_server, strtol(qq_port, NULL, 10), use_tcp, FALSE) < 0)
139 gaim_connection_error(gc, _("Unable to connect.")); 139 gaim_connection_error(gc, _("Unable to connect."));
140 } 140 }
141 141
142 /* directly goes for qq_disconnect */ 142 /* directly goes for qq_disconnect */
182 case QQ_BUDDY_ONLINE_INVISIBLE: 182 case QQ_BUDDY_ONLINE_INVISIBLE:
183 g_string_append(status, "Invisible"); 183 g_string_append(status, "Invisible");
184 break; 184 break;
185 default: 185 default:
186 g_string_printf(status, "Unknown-%d", q_bud->status); 186 g_string_printf(status, "Unknown-%d", q_bud->status);
187 } 187 }
188 188
189 return g_string_free(status, FALSE); 189 return g_string_free(status, FALSE);
190 } 190 }
191 191
192 192
203 203
204 if (GAIM_BUDDY_IS_ONLINE(b) && q_bud != NULL) 204 if (GAIM_BUDDY_IS_ONLINE(b) && q_bud != NULL)
205 { 205 {
206 ip_str = gen_ip_str(q_bud->ip); 206 ip_str = gen_ip_str(q_bud->ip);
207 if (strlen(ip_str) != 0) { 207 if (strlen(ip_str) != 0) {
208 g_string_append_printf(tooltip, "\n<b>%s Address:</b> %s:%d", 208 g_string_append_printf(tooltip, "\n<b>%s Address:</b> %s:%d",
209 (q_bud->comm_flag & QQ_COMM_FLAG_TCP_MODE) 209 (q_bud->comm_flag & QQ_COMM_FLAG_TCP_MODE)
210 ? "TCP" : "UDP", ip_str, q_bud->port); 210 ? "TCP" : "UDP", ip_str, q_bud->port);
211 } 211 }
212 g_free(ip_str); 212 g_free(ip_str);
213 g_string_append_printf(tooltip, "\n<b>Age:</b> %d", q_bud->age); 213 g_string_append_printf(tooltip, "\n<b>Age:</b> %d", q_bud->age);
214 switch (q_bud->gender) { 214 switch (q_bud->gender) {
215 case QQ_BUDDY_GENDER_GG: 215 case QQ_BUDDY_GENDER_GG:
216 g_string_append(tooltip, "\n<b>Gender:</b> Male"); 216 g_string_append(tooltip, "\n<b>Gender:</b> Male");
217 break; 217 break;
218 case QQ_BUDDY_GENDER_MM: 218 case QQ_BUDDY_GENDER_MM:
219 g_string_append(tooltip, "\n<b>Gender:</b> Female"); 219 g_string_append(tooltip, "\n<b>Gender:</b> Female");
220 break; 220 break;
221 case QQ_BUDDY_GENDER_UNKNOWN: 221 case QQ_BUDDY_GENDER_UNKNOWN:
222 g_string_append(tooltip, "\n<b>Gender:</b> Unknown"); 222 g_string_append(tooltip, "\n<b>Gender:</b> Unknown");
223 break; 223 break;
224 default: 224 default:
225 g_string_append_printf(tooltip, "\n<b>Gender:</b> ERROR(%d)", q_bud->gender); 225 g_string_append_printf(tooltip, "\n<b>Gender:</b> ERROR(%d)", q_bud->gender);
226 } 226 }
227 /* For debugging */ 227 /* For debugging */
228 /* 228 /*
229 g_string_append_printf(tooltip, "\n<b>Flag:</b> %01x", q_bud->flag1); 229 g_string_append_printf(tooltip, "\n<b>Flag:</b> %01x", q_bud->flag1);
230 g_string_append_printf(tooltip, "\n<b>CommFlag:</b> %01x", q_bud->comm_flag); 230 g_string_append_printf(tooltip, "\n<b>CommFlag:</b> %01x", q_bud->comm_flag);
231 g_string_append_printf(tooltip, "\n<b>Client:</b> %04x", q_bud->client_version); 231 g_string_append_printf(tooltip, "\n<b>Client:</b> %04x", q_bud->client_version);
232 */ 232 */
233 } 233 }
234 } 234 }
235 235
236 /* we can show tiny icons on the four corners of buddy icon, */ 236 /* we can show tiny icons on the four corners of buddy icon, */
237 static void _qq_list_emblems(GaimBuddy *b, const char **se, const char **sw, const char **nw, const char **ne) 237 static void _qq_list_emblems(GaimBuddy *b, const char **se, const char **sw, const char **nw, const char **ne)
238 { 238 {
239 /* each char** are refering to a filename in pixmaps/gaim/status/default/ */ 239 /* each char** are refering to a filename in pixmaps/gaim/status/default/ */
240 240
241 qq_buddy *q_bud = b->proto_data; 241 qq_buddy *q_bud = b->proto_data;
242 const char *emblems[4] = { NULL, NULL, NULL, NULL }; 242 const char *emblems[4] = { NULL, NULL, NULL, NULL };
243 int i = 1; 243 int i = 1;
244 244
245 if (q_bud == NULL) { 245 if (q_bud == NULL) {
246 emblems[0] = "offline"; 246 emblems[0] = "offline";
247 } else { 247 } else {
248 if (q_bud->status == QQ_BUDDY_ONLINE_AWAY) 248 if (q_bud->status == QQ_BUDDY_ONLINE_AWAY)
249 emblems[i++] = "away"; 249 emblems[i++] = "away";
250 /* 250 /*
251 if (q_bud->comm_flag & QQ_COMM_FLAG_QQ_MEMBER) 251 if (q_bud->comm_flag & QQ_COMM_FLAG_QQ_MEMBER)
252 emblems[i++] = "qq_member"; 252 emblems[i++] = "qq_member";
253 */ 253 */
254 if (q_bud->comm_flag & QQ_COMM_FLAG_BIND_MOBILE) 254 if (q_bud->comm_flag & QQ_COMM_FLAG_BIND_MOBILE)
255 emblems[i++] = "wireless"; 255 emblems[i++] = "wireless";
256 /* 256 /*
257 if (q_bud->comm_flag & QQ_COMM_FLAG_VIDEO) 257 if (q_bud->comm_flag & QQ_COMM_FLAG_VIDEO)
258 emblems[i%4] = "video"; 258 emblems[i%4] = "video";
259 */ 259 */
260 260
261 } 261 }
262 262
263 *se = emblems[0]; 263 *se = emblems[0];
264 *sw = emblems[1]; 264 *sw = emblems[1];
265 *nw = emblems[2]; 265 *nw = emblems[2];
266 *ne = emblems[3]; 266 *ne = emblems[3];
267 267
268 return; 268 return;
269 } 269 }
270 270
271 /* QQ away status (used to initiate QQ away packet) */ 271 /* QQ away status (used to initiate QQ away packet) */
272 static GList *_qq_away_states(GaimAccount *ga) 272 static GList *_qq_away_states(GaimAccount *ga)
273 { 273 {
274 GaimStatusType *status; 274 GaimStatusType *status;
275 GList *types = NULL; 275 GList *types = NULL;
276 276
277 status = gaim_status_type_new_full(GAIM_STATUS_AVAILABLE, 277 status = gaim_status_type_new_full(GAIM_STATUS_AVAILABLE,
278 "available", _("QQ: Available"), FALSE, TRUE, FALSE); 278 "available", _("QQ: Available"), FALSE, TRUE, FALSE);
279 types = g_list_append(types, status); 279 types = g_list_append(types, status);
280 280
281 status = gaim_status_type_new_full(GAIM_STATUS_AWAY, 281 status = gaim_status_type_new_full(GAIM_STATUS_AWAY,
282 "away", _("QQ: Away"), FALSE, TRUE, FALSE); 282 "away", _("QQ: Away"), FALSE, TRUE, FALSE);
283 types = g_list_append(types, status); 283 types = g_list_append(types, status);
284 284
285 status = gaim_status_type_new_full(GAIM_STATUS_INVISIBLE, 285 status = gaim_status_type_new_full(GAIM_STATUS_INVISIBLE,
286 "invisible", _("QQ: Invisible"), FALSE, TRUE, FALSE); 286 "invisible", _("QQ: Invisible"), FALSE, TRUE, FALSE);
287 types = g_list_append(types, status); 287 types = g_list_append(types, status);
288 288
289 status = gaim_status_type_new_full(GAIM_STATUS_OFFLINE, 289 status = gaim_status_type_new_full(GAIM_STATUS_OFFLINE,
290 "offline", _("QQ: Offline"), FALSE, TRUE, FALSE); 290 "offline", _("QQ: Offline"), FALSE, TRUE, FALSE);
291 types = g_list_append(types, status); 291 types = g_list_append(types, status);
292 292
293 return types; 293 return types;
294 } 294 }
295 295
296 /* initiate QQ away with proper change_status packet */ 296 /* initiate QQ away with proper change_status packet */
566 { 566 {
567 GList *m; 567 GList *m;
568 568
569 if(GAIM_BLIST_NODE_IS_CHAT(node)) 569 if(GAIM_BLIST_NODE_IS_CHAT(node))
570 return _qq_chat_menu(node); 570 return _qq_chat_menu(node);
571 571
572 m = NULL; 572 m = NULL;
573 return m; 573 return m;
574 } 574 }
575 575
576 /* TODO : not working, temp commented out by gfhuang 576 /* TODO : not working, temp commented out by gfhuang
577 577
578 act = gaim_menu_action_new(_("Block this buddy"), GAIM_CALLBACK(_qq_menu_block_buddy), NULL, NULL); //add NULL by gfhuang 578 act = gaim_menu_action_new(_("Block this buddy"), GAIM_CALLBACK(_qq_menu_block_buddy), NULL, NULL); //add NULL by gfhuang
579 m = g_list_append(m, act); 579 m = g_list_append(m, act);
580 // if (q_bud && is_online(q_bud->status)) { 580 // if (q_bud && is_online(q_bud->status)) {
581 act = gaim_menu_action_new(_("Send File"), GAIM_CALLBACK(_qq_menu_send_file), NULL, NULL); //add NULL by gfhuang 581 act = gaim_menu_action_new(_("Send File"), GAIM_CALLBACK(_qq_menu_send_file), NULL, NULL); //add NULL by gfhuang
602 group = (qq_group *) list->data; 602 group = (qq_group *) list->data;
603 if (group->my_status == QQ_GROUP_MEMBER_STATUS_IS_MEMBER || 603 if (group->my_status == QQ_GROUP_MEMBER_STATUS_IS_MEMBER ||
604 group->my_status == QQ_GROUP_MEMBER_STATUS_IS_ADMIN) 604 group->my_status == QQ_GROUP_MEMBER_STATUS_IS_ADMIN)
605 /* no need to get info time and time again, online members enough */ 605 /* no need to get info time and time again, online members enough */
606 qq_send_cmd_group_get_online_members(gc, group); 606 qq_send_cmd_group_get_online_members(gc, group);
607 607
608 list = list->next; 608 list = list->next;
609 } 609 }
610 610
611 qq_send_packet_keep_alive(gc); 611 qq_send_packet_keep_alive(gc);
612 612
676 _qq_get_chat_buddy_info, /* get_cb_info */ 676 _qq_get_chat_buddy_info, /* get_cb_info */
677 NULL, /* get_cb_away */ 677 NULL, /* get_cb_away */
678 NULL, /* alias_buddy */ 678 NULL, /* alias_buddy */
679 NULL, /* group_buddy */ 679 NULL, /* group_buddy */
680 NULL, /* rename_group */ 680 NULL, /* rename_group */
681 NULL, /* buddy_free */ 681 NULL, /* buddy_free */
682 NULL, /* convo_closed */ 682 NULL, /* convo_closed */
683 NULL, /* normalize */ 683 NULL, /* normalize */
684 qq_set_my_buddy_icon, /* set_buddy_icon */ 684 qq_set_my_buddy_icon, /* set_buddy_icon */
685 NULL, /* remove_group */ 685 NULL, /* remove_group */
686 _qq_get_chat_buddy_real_name, /* get_cb_real_name */ 686 _qq_get_chat_buddy_real_name, /* get_cb_real_name */
689 qq_roomlist_get_list, /* roomlist_get_list */ 689 qq_roomlist_get_list, /* roomlist_get_list */
690 qq_roomlist_cancel, /* roomlist_cancel */ 690 qq_roomlist_cancel, /* roomlist_cancel */
691 NULL, /* roomlist_expand_category */ 691 NULL, /* roomlist_expand_category */
692 NULL, /* can_receive_file */ 692 NULL, /* can_receive_file */
693 qq_send_file, /* send_file */ 693 qq_send_file, /* send_file */
694 NULL, /* new xfer */ 694 NULL, /* new xfer */
695 NULL, /* offline_message */ 695 NULL, /* offline_message */
696 NULL, /* GaimWhiteboardPrplOps */ 696 NULL, /* GaimWhiteboardPrplOps */
697 NULL, /* send_raw */ 697 NULL, /* send_raw */
698 }; 698 };
699 699