comparison libpurple/protocols/msn/slp.c @ 20409:7c0a2ef88018

propagate from branch 'im.pidgin.pidgin' (head cf7db89f6020ededb2d5c948c11c3fd0ef30bba5) to branch 'im.pidgin.cpw.khc.msnp14' (head 6875bbea39f4f9d8251516b02893429d347e3d82)
author Ka-Hing Cheung <khc@hxbc.us>
date Wed, 02 May 2007 06:12:13 +0000
parents 1122d47583a1 9634df5bbc6c
children 522ade544156
comparison
equal deleted inserted replaced
20408:14b8fb8d27b3 20409:7c0a2ef88018
248 const char *euf_guid, const char *context) 248 const char *euf_guid, const char *context)
249 { 249 {
250 if (!strcmp(euf_guid, "A4268EEC-FEC5-49E5-95C3-F126696BDBF6")) 250 if (!strcmp(euf_guid, "A4268EEC-FEC5-49E5-95C3-F126696BDBF6"))
251 { 251 {
252 /* Emoticon or UserDisplay */ 252 /* Emoticon or UserDisplay */
253 char *content;
254 gsize len;
253 MsnSlpSession *slpsession; 255 MsnSlpSession *slpsession;
254 MsnSlpLink *slplink; 256 MsnSlpLink *slplink;
255 MsnSlpMessage *slpmsg; 257 MsnSlpMessage *slpmsg;
256 MsnObject *obj; 258 MsnObject *obj;
257 char *msnobj_data; 259 char *msnobj_data;
258 const char *file_name; 260 PurpleStoredImage *img;
259 char *content;
260 gsize len;
261 int type; 261 int type;
262 262
263 /* Send Ok */ 263 /* Send Ok */
264 content = g_strdup_printf("SessionID: %lu\r\n\r\n", 264 content = g_strdup_printf("SessionID: %lu\r\n\r\n",
265 slpcall->session_id); 265 slpcall->session_id);
281 purple_debug_error("msn", "Wrong object?\n"); 281 purple_debug_error("msn", "Wrong object?\n");
282 msn_object_destroy(obj); 282 msn_object_destroy(obj);
283 g_return_if_reached(); 283 g_return_if_reached();
284 } 284 }
285 285
286 file_name = msn_object_get_real_location(obj); 286 img = msn_object_get_image(obj);
287 287 if (img == NULL)
288 if (file_name == NULL)
289 { 288 {
290 purple_debug_error("msn", "Wrong object.\n"); 289 purple_debug_error("msn", "Wrong object.\n");
291 msn_object_destroy(obj); 290 msn_object_destroy(obj);
292 g_return_if_reached(); 291 g_return_if_reached();
293 } 292 }
314 slpmsg->slpsession = slpsession; 313 slpmsg->slpsession = slpsession;
315 slpmsg->flags = 0x20; 314 slpmsg->flags = 0x20;
316 #ifdef MSN_DEBUG_SLP 315 #ifdef MSN_DEBUG_SLP
317 slpmsg->info = "SLP DATA"; 316 slpmsg->info = "SLP DATA";
318 #endif 317 #endif
319 msn_slpmsg_open_file(slpmsg, file_name); 318 msn_slpmsg_set_image(slpmsg, img);
320 msn_slplink_queue_slpmsg(slplink, slpmsg); 319 msn_slplink_queue_slpmsg(slplink, slpmsg);
321 } 320 }
322 else if (!strcmp(euf_guid, "5D3E02AB-6190-11D3-BBBB-00C04F795683")) 321 else if (!strcmp(euf_guid, "5D3E02AB-6190-11D3-BBBB-00C04F795683"))
323 { 322 {
324 /* File Transfer */ 323 /* File Transfer */
445 MsnDirectConn *directconn; 444 MsnDirectConn *directconn;
446 /* const char *ip_addr; */ 445 /* const char *ip_addr; */
447 char *ip_port; 446 char *ip_port;
448 int port; 447 int port;
449 448
450 /* ip_addr = purple_prefs_get_string("/core/ft/public_ip"); */ 449 /* ip_addr = purple_prefs_get_string("/purple/ft/public_ip"); */
451 ip_port = "5190"; 450 ip_port = "5190";
452 listening = "true"; 451 listening = "true";
453 nonce = rand_guid(); 452 nonce = rand_guid();
454 453
455 directconn = msn_directconn_new(slplink); 454 directconn = msn_directconn_new(slplink);
869 868
870 buddy = purple_find_buddy(account, msn_object_get_creator(obj)); 869 buddy = purple_find_buddy(account, msn_object_get_creator(obj));
871 if (buddy == NULL) 870 if (buddy == NULL)
872 return FALSE; 871 return FALSE;
873 872
874 old = purple_blist_node_get_string((PurpleBlistNode *)buddy, "icon_checksum"); 873 old = purple_buddy_icons_get_checksum_for_user(buddy);
875 new = msn_object_get_sha1(obj); 874 new = msn_object_get_sha1(obj);
876 875
877 if (new == NULL) 876 if (new == NULL)
878 return FALSE; 877 return FALSE;
879 878
880 /* If the old and new checksums are the same, and the file actually exists, 879 /* If the old and new checksums are the same, and the file actually exists,
881 * then return TRUE */ 880 * then return TRUE */
882 if (old != NULL && !strcmp(old, new) && (purple_buddy_icons_find(account, purple_buddy_get_name(buddy)) != NULL)) 881 if (old != NULL && !strcmp(old, new))
883 return TRUE; 882 return TRUE;
884 883
885 return FALSE; 884 return FALSE;
886 } 885 }
887 886
955 954
956 obj = msn_user_get_object(user); 955 obj = msn_user_get_object(user);
957 956
958 if (obj == NULL) 957 if (obj == NULL)
959 { 958 {
960 /* It seems the user has not set a msnobject */ 959 /* TODO purple_buddy_icons_set_for_user(account, user->passport, NULL, 0, NULL); */
961 GSList *sl, *list;
962
963 list = purple_find_buddies(account, user->passport);
964
965 for (sl = list; sl != NULL; sl = sl->next)
966 {
967 PurpleBuddy *buddy = (PurpleBuddy *)sl->data;
968 if (buddy->icon)
969 purple_blist_node_remove_setting((PurpleBlistNode*)buddy, "icon_checksum");
970 }
971 g_slist_free(list);
972
973 /* TODO: I think we need better buddy icon core functions. */
974 purple_buddy_icons_set_for_user(account, user->passport, NULL, 0);
975
976 return; 960 return;
977 } 961 }
978 962
979 if (!buddy_icon_cached(account->gc, obj)) 963 if (!buddy_icon_cached(account->gc, obj))
980 { 964 {
1000 const guchar *data, gsize size) 984 const guchar *data, gsize size)
1001 { 985 {
1002 MsnUserList *userlist; 986 MsnUserList *userlist;
1003 const char *info; 987 const char *info;
1004 PurpleAccount *account; 988 PurpleAccount *account;
1005 GSList *sl, *list;
1006 989
1007 g_return_if_fail(slpcall != NULL); 990 g_return_if_fail(slpcall != NULL);
1008 991
1009 info = slpcall->data_info; 992 info = slpcall->data_info;
1010 #ifdef MSN_DEBUG_UD 993 #ifdef MSN_DEBUG_UD
1012 #endif 995 #endif
1013 996
1014 userlist = slpcall->slplink->session->userlist; 997 userlist = slpcall->slplink->session->userlist;
1015 account = slpcall->slplink->session->account; 998 account = slpcall->slplink->session->account;
1016 999
1017 /* TODO: I think we need better buddy icon core functions. */
1018 purple_buddy_icons_set_for_user(account, slpcall->slplink->remote_user, 1000 purple_buddy_icons_set_for_user(account, slpcall->slplink->remote_user,
1019 (void *)data, size); 1001 g_memdup(data, size), size, info);
1020
1021 list = purple_find_buddies(account, slpcall->slplink->remote_user);
1022
1023 for (sl = list; sl != NULL; sl = sl->next)
1024 {
1025 PurpleBuddy *buddy = (PurpleBuddy *)sl->data;
1026 purple_blist_node_set_string((PurpleBlistNode*)buddy, "icon_checksum", info);
1027 }
1028 g_slist_free(list);
1029 1002
1030 #if 0 1003 #if 0
1031 /* Free one window slot */ 1004 /* Free one window slot */
1032 userlist->buddy_icon_window++; 1005 userlist->buddy_icon_window++;
1033 1006
1100 end_user_display, obj); 1073 end_user_display, obj);
1101 } 1074 }
1102 else 1075 else
1103 { 1076 {
1104 MsnObject *my_obj = NULL; 1077 MsnObject *my_obj = NULL;
1105 gchar *data = NULL; 1078 gconstpointer data = NULL;
1106 gsize len = 0; 1079 size_t len = 0;
1107 GSList *sl, *list;
1108 1080
1109 #ifdef MSN_DEBUG_UD 1081 #ifdef MSN_DEBUG_UD
1110 purple_debug_info("msn", "Requesting our own user display\n"); 1082 purple_debug_info("msn", "Requesting our own user display\n");
1111 #endif 1083 #endif
1112 1084
1113 my_obj = msn_user_get_object(session->user); 1085 my_obj = msn_user_get_object(session->user);
1114 1086
1115 if (my_obj != NULL) 1087 if (my_obj != NULL)
1116 { 1088 {
1117 const char *filename = msn_object_get_real_location(my_obj); 1089 PurpleStoredImage *img = msn_object_get_image(my_obj);
1118 1090 data = purple_imgstore_get_data(img);
1119 if (filename != NULL) 1091 len = purple_imgstore_get_size(img);
1120 g_file_get_contents(filename, &data, &len, NULL); 1092 }
1121 } 1093
1122 1094 purple_buddy_icons_set_for_user(account, user->passport, g_memdup(data, len), len, info);
1123 /* TODO: I think we need better buddy icon core functions. */
1124 purple_buddy_icons_set_for_user(account, user->passport, (void *)data, len);
1125 g_free(data);
1126
1127 list = purple_find_buddies(account, user->passport);
1128
1129 for (sl = list; sl != NULL; sl = sl->next)
1130 {
1131 PurpleBuddy *buddy = (PurpleBuddy *)sl->data;
1132 purple_blist_node_set_string((PurpleBlistNode*)buddy, "icon_checksum", info);
1133 }
1134 g_slist_free(list);
1135 1095
1136 /* Free one window slot */ 1096 /* Free one window slot */
1137 session->userlist->buddy_icon_window++; 1097 session->userlist->buddy_icon_window++;
1138 1098
1139 #ifdef MSN_DEBUG_UD 1099 #ifdef MSN_DEBUG_UD