Mercurial > pidgin
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 |