| 928 gboolean |
928 gboolean |
| 929 pidgin_parse_x_im_contact(const char *msg, gboolean all_accounts, |
929 pidgin_parse_x_im_contact(const char *msg, gboolean all_accounts, |
| 930 PurpleAccount **ret_account, char **ret_protocol, |
930 PurpleAccount **ret_account, char **ret_protocol, |
| 931 char **ret_username, char **ret_alias) |
931 char **ret_username, char **ret_alias) |
| 932 { |
932 { |
| 933 char *protocol_id = NULL; |
933 char *protocol = NULL; |
| 934 char *username = NULL; |
934 char *username = NULL; |
| 935 char *alias = NULL; |
935 char *alias = NULL; |
| 936 char *str; |
936 char *str; |
| 937 char *s; |
937 char *s; |
| 938 gboolean valid; |
938 gboolean valid; |
| 939 |
939 |
| 940 g_return_val_if_fail(msg != NULL, FALSE); |
940 g_return_val_if_fail(msg != NULL, FALSE); |
| 979 if (strchr(key, ':') != NULL) |
979 if (strchr(key, ':') != NULL) |
| 980 { |
980 { |
| 981 if (!g_ascii_strcasecmp(key, "X-IM-Username:")) |
981 if (!g_ascii_strcasecmp(key, "X-IM-Username:")) |
| 982 username = g_strdup(value); |
982 username = g_strdup(value); |
| 983 else if (!g_ascii_strcasecmp(key, "X-IM-Protocol:")) |
983 else if (!g_ascii_strcasecmp(key, "X-IM-Protocol:")) |
| 984 protocol_id = g_strdup(value); |
984 protocol = g_strdup(value); |
| 985 else if (!g_ascii_strcasecmp(key, "X-IM-Alias:")) |
985 else if (!g_ascii_strcasecmp(key, "X-IM-Alias:")) |
| 986 alias = g_strdup(value); |
986 alias = g_strdup(value); |
| 987 } |
987 } |
| 988 } |
988 } |
| 989 |
989 |
| 990 if (username != NULL && protocol_id != NULL) |
990 if (username != NULL && protocol != NULL) |
| 991 { |
991 { |
| 992 valid = TRUE; |
992 valid = TRUE; |
| 993 |
993 |
| 994 *ret_username = username; |
994 *ret_username = username; |
| 995 *ret_protocol = protocol_id; |
995 *ret_protocol = protocol; |
| 996 |
996 |
| 997 if (ret_alias != NULL) |
997 if (ret_alias != NULL) |
| 998 *ret_alias = alias; |
998 *ret_alias = alias; |
| 999 |
999 |
| 1000 /* Check for a compatible account. */ |
1000 /* Check for a compatible account. */ |
| 1011 list = purple_connections_get_all(); |
1011 list = purple_connections_get_all(); |
| 1012 |
1012 |
| 1013 for (l = list; l != NULL; l = l->next) |
1013 for (l = list; l != NULL; l = l->next) |
| 1014 { |
1014 { |
| 1015 PurpleConnection *gc; |
1015 PurpleConnection *gc; |
| 1016 PurpleProtocol *protocol = NULL; |
1016 PurpleProtocol *proto = NULL; |
| 1017 |
1017 |
| 1018 if (all_accounts) |
1018 if (all_accounts) |
| 1019 { |
1019 { |
| 1020 account = (PurpleAccount *)l->data; |
1020 account = (PurpleAccount *)l->data; |
| 1021 |
1021 |
| 1022 protocol = purple_protocols_find( |
1022 proto = purple_protocols_find( |
| 1023 purple_account_get_protocol_id(account)); |
1023 purple_account_get_protocol_id(account)); |
| 1024 |
1024 |
| 1025 if (protocol == NULL) |
1025 if (proto == NULL) |
| 1026 { |
1026 { |
| 1027 account = NULL; |
1027 account = NULL; |
| 1028 |
1028 |
| 1029 continue; |
1029 continue; |
| 1030 } |
1030 } |
| 1032 else |
1032 else |
| 1033 { |
1033 { |
| 1034 gc = (PurpleConnection *)l->data; |
1034 gc = (PurpleConnection *)l->data; |
| 1035 account = purple_connection_get_account(gc); |
1035 account = purple_connection_get_account(gc); |
| 1036 |
1036 |
| 1037 protocol = purple_connection_get_protocol(gc); |
1037 proto = purple_connection_get_protocol(gc); |
| 1038 } |
1038 } |
| 1039 |
1039 |
| 1040 protoname = purple_protocol_class_list_icon(protocol, account, NULL); |
1040 protoname = purple_protocol_class_list_icon(proto, account, NULL); |
| 1041 |
1041 |
| 1042 if (!strcmp(protoname, protocol_id)) |
1042 if (!strcmp(protoname, protocol)) |
| 1043 break; |
1043 break; |
| 1044 |
1044 |
| 1045 account = NULL; |
1045 account = NULL; |
| 1046 } |
1046 } |
| 1047 |
1047 |
| 1048 /* Special case for AIM and ICQ */ |
1048 /* Special case for AIM and ICQ */ |
| 1049 if (account == NULL && (!strcmp(protocol_id, "aim") || |
1049 if (account == NULL && (!strcmp(protocol, "aim") || |
| 1050 !strcmp(protocol_id, "icq"))) |
1050 !strcmp(protocol, "icq"))) |
| 1051 { |
1051 { |
| 1052 for (l = list; l != NULL; l = l->next) |
1052 for (l = list; l != NULL; l = l->next) |
| 1053 { |
1053 { |
| 1054 PurpleConnection *gc; |
1054 PurpleConnection *gc; |
| 1055 PurpleProtocol *protocol = NULL; |
1055 PurpleProtocol *proto = NULL; |
| 1056 |
1056 |
| 1057 if (all_accounts) |
1057 if (all_accounts) |
| 1058 { |
1058 { |
| 1059 account = (PurpleAccount *)l->data; |
1059 account = (PurpleAccount *)l->data; |
| 1060 |
1060 |
| 1061 protocol = purple_protocols_find( |
1061 proto = purple_protocols_find( |
| 1062 purple_account_get_protocol_id(account)); |
1062 purple_account_get_protocol_id(account)); |
| 1063 |
1063 |
| 1064 if (protocol == NULL) |
1064 if (proto == NULL) |
| 1065 { |
1065 { |
| 1066 account = NULL; |
1066 account = NULL; |
| 1067 |
1067 |
| 1068 continue; |
1068 continue; |
| 1069 } |
1069 } |
| 1071 else |
1071 else |
| 1072 { |
1072 { |
| 1073 gc = (PurpleConnection *)l->data; |
1073 gc = (PurpleConnection *)l->data; |
| 1074 account = purple_connection_get_account(gc); |
1074 account = purple_connection_get_account(gc); |
| 1075 |
1075 |
| 1076 protocol = purple_connection_get_protocol(gc); |
1076 proto = purple_connection_get_protocol(gc); |
| 1077 } |
1077 } |
| 1078 |
1078 |
| 1079 protoname = purple_protocol_class_list_icon(protocol, account, NULL); |
1079 protoname = purple_protocol_class_list_icon(proto, account, NULL); |
| 1080 |
1080 |
| 1081 if (!strcmp(protoname, "aim") || !strcmp(protoname, "icq")) |
1081 if (!strcmp(protoname, "aim") || !strcmp(protoname, "icq")) |
| 1082 break; |
1082 break; |
| 1083 |
1083 |
| 1084 account = NULL; |
1084 account = NULL; |