comparison libpurple/protocols/simple/simple.c @ 25100:ede59a571c0a

This is a combination of patches from darkrain42 and Marcus Sundberg to fix some string handling issues in the SIMPLE prpl. It also fixes some buddy name handling issues. Fixes #8128.
author John Bailey <rekkanoryo@rekkanoryo.org>
date Sun, 15 Feb 2009 21:03:40 +0000
parents d378f05079e4
children 4b8c4870b13a 9fcff08ce726
comparison
equal deleted inserted replaced
25099:3c96a644c665 25100:ede59a571c0a
194 194
195 static void simple_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) 195 static void simple_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group)
196 { 196 {
197 struct simple_account_data *sip = (struct simple_account_data *)gc->proto_data; 197 struct simple_account_data *sip = (struct simple_account_data *)gc->proto_data;
198 struct simple_buddy *b; 198 struct simple_buddy *b;
199 if(strcmp("sip:", buddy->name)) { 199 if(strncmp(buddy->name, "sip:", 4)) {
200 gchar *buf = g_strdup_printf("sip:%s", buddy->name); 200 gchar *buf = g_strdup_printf("sip:%s", buddy->name);
201 purple_blist_rename_buddy(buddy, buf); 201 purple_blist_rename_buddy(buddy, buf);
202 g_free(buf); 202 g_free(buf);
203 } 203 }
204 if(!g_hash_table_lookup(sip->buddies, buddy->name)) { 204 if(!g_hash_table_lookup(sip->buddies, buddy->name)) {
832 "Expires: %d\r\n" 832 "Expires: %d\r\n"
833 "Accept: application/pidf+xml, application/xpidf+xml\r\n" 833 "Accept: application/pidf+xml, application/xpidf+xml\r\n"
834 "Event: presence\r\n", 834 "Event: presence\r\n",
835 expiration); 835 expiration);
836 836
837 if(strstr(buddy->name, "sip:")) 837 if(strncmp(buddy->name, "sip:", 4))
838 to = g_strdup_printf("sip:%s", buddy->name);
839 else
838 to = g_strdup(buddy->name); 840 to = g_strdup(buddy->name);
839 else
840 to = g_strdup_printf("sip:%s", buddy->name);
841 841
842 tmp = get_contact(sip); 842 tmp = get_contact(sip);
843 contact = g_strdup_printf("%sContact: %s\r\n", tmp2, tmp); 843 contact = g_strdup_printf("%sContact: %s\r\n", tmp2, tmp);
844 g_free(tmp); 844 g_free(tmp);
845 g_free(tmp2); 845 g_free(tmp2);
879 struct simple_buddy *bs; 879 struct simple_buddy *bs;
880 int len = msg->bodylen; 880 int len = msg->bodylen;
881 881
882 882
883 tmp = sipmsg_find_header(msg, "Event"); 883 tmp = sipmsg_find_header(msg, "Event");
884 if(tmp && !strcmp(tmp, "vnd-microsoft-roaming-contacts")){ 884 if(tmp && !strncmp(tmp, "vnd-microsoft-roaming-contacts", 30)){
885 885
886 purple_debug_info("simple", "simple_add_lcs_contacts->%s-%d\n", msg->body, len); 886 purple_debug_info("simple", "simple_add_lcs_contacts->%s-%d\n", msg->body, len);
887 /*Convert the contact from XML to Purple Buddies*/ 887 /*Convert the contact from XML to Purple Buddies*/
888 isc = xmlnode_from_str(msg->body, len); 888 isc = xmlnode_from_str(msg->body, len);
889 889
1011 } 1011 }
1012 1012
1013 static void simple_send_message(struct simple_account_data *sip, const char *to, const char *msg, const char *type) { 1013 static void simple_send_message(struct simple_account_data *sip, const char *to, const char *msg, const char *type) {
1014 gchar *hdr; 1014 gchar *hdr;
1015 gchar *fullto; 1015 gchar *fullto;
1016 if(strcmp("sip:", to)) { 1016 if(strncmp(to, "sip:", 4))
1017 fullto = g_strdup_printf("sip:%s", to); 1017 fullto = g_strdup_printf("sip:%s", to);
1018 } else { 1018 else
1019 fullto = g_strdup(to); 1019 fullto = g_strdup(to);
1020 } 1020
1021 if(type) { 1021 if(type) {
1022 hdr = g_strdup_printf("Content-Type: %s\r\n", type); 1022 hdr = g_strdup_printf("Content-Type: %s\r\n", type);
1023 } else { 1023 } else {
1024 hdr = g_strdup("Content-Type: text/plain\r\n"); 1024 hdr = g_strdup("Content-Type: text/plain\r\n");
1025 } 1025 }
1048 if(!from) return; 1048 if(!from) return;
1049 1049
1050 purple_debug(PURPLE_DEBUG_MISC, "simple", "got message from %s: %s\n", from, msg->body); 1050 purple_debug(PURPLE_DEBUG_MISC, "simple", "got message from %s: %s\n", from, msg->body);
1051 1051
1052 contenttype = sipmsg_find_header(msg, "Content-Type"); 1052 contenttype = sipmsg_find_header(msg, "Content-Type");
1053 if(!contenttype || !strcmp(contenttype, "text/plain") || !strcmp(contenttype, "text/html")) { 1053 if(!contenttype || !strncmp(contenttype, "text/plain", 10) || !strncmp(contenttype, "text/html", 9)) {
1054 serv_got_im(sip->gc, from, msg->body, 0, time(NULL)); 1054 serv_got_im(sip->gc, from, msg->body, 0, time(NULL));
1055 send_sip_response(sip->gc, msg, 200, "OK", NULL); 1055 send_sip_response(sip->gc, msg, 200, "OK", NULL);
1056 found = TRUE; 1056 found = TRUE;
1057 } 1057 }
1058 else if(!strcmp(contenttype, "application/im-iscomposing+xml")) { 1058 else if(!strncmp(contenttype, "application/im-iscomposing+xml", 30)) {
1059 xmlnode *isc = xmlnode_from_str(msg->body, msg->bodylen); 1059 xmlnode *isc = xmlnode_from_str(msg->body, msg->bodylen);
1060 xmlnode *state; 1060 xmlnode *state;
1061 gchar *statedata; 1061 gchar *statedata;
1062 1062
1063 if(!isc) { 1063 if(!isc) {