Mercurial > pidgin.yaz
comparison libpurple/protocols/qq/buddy_opt.c @ 25298:e35115192593
Finished struct hiding in bonjour and qq
author | Gary Kramlich <grim@reaperworld.com> |
---|---|
date | Sun, 02 Nov 2008 10:21:19 +0000 |
parents | 2a19984c0005 |
children | 65cfc59858cf 367b3ddcf5c3 |
comparison
equal
deleted
inserted
replaced
25297:b48f6d0ecdf7 | 25298:e35115192593 |
---|---|
99 | 99 |
100 qq_buddy_data *qq_buddy_data_find(PurpleConnection *gc, guint32 uid) | 100 qq_buddy_data *qq_buddy_data_find(PurpleConnection *gc, guint32 uid) |
101 { | 101 { |
102 gchar *who; | 102 gchar *who; |
103 PurpleBuddy *buddy; | 103 PurpleBuddy *buddy; |
104 qq_buddy_data *bd; | |
104 | 105 |
105 g_return_val_if_fail(gc != NULL, NULL); | 106 g_return_val_if_fail(gc != NULL, NULL); |
106 | 107 |
107 who = uid_to_purple_name(uid); | 108 who = uid_to_purple_name(uid); |
108 if (who == NULL) return NULL; | 109 if (who == NULL) return NULL; |
111 | 112 |
112 if (buddy == NULL) { | 113 if (buddy == NULL) { |
113 purple_debug_error("QQ", "Can not find purple buddy of %d\n", uid); | 114 purple_debug_error("QQ", "Can not find purple buddy of %d\n", uid); |
114 return NULL; | 115 return NULL; |
115 } | 116 } |
116 if (buddy->proto_data == NULL) { | 117 |
118 if ((bd = purple_buddy_get_protocol_data(buddy)) == NULL) { | |
117 purple_debug_error("QQ", "Can not find buddy data of %d\n", uid); | 119 purple_debug_error("QQ", "Can not find buddy data of %d\n", uid); |
118 return NULL; | 120 return NULL; |
119 } | 121 } |
120 return (qq_buddy_data *)buddy->proto_data; | 122 return bd; |
121 } | 123 } |
122 | 124 |
123 void qq_buddy_data_free(qq_buddy_data *bd) | 125 void qq_buddy_data_free(qq_buddy_data *bd) |
124 { | 126 { |
125 g_return_if_fail(bd != NULL); | 127 g_return_if_fail(bd != NULL); |
148 | 150 |
149 who = uid_to_purple_name(uid); | 151 who = uid_to_purple_name(uid); |
150 | 152 |
151 purple_debug_info("QQ", "Add new purple buddy: [%s]\n", who); | 153 purple_debug_info("QQ", "Add new purple buddy: [%s]\n", who); |
152 buddy = purple_buddy_new(gc->account, who, NULL); /* alias is NULL */ | 154 buddy = purple_buddy_new(gc->account, who, NULL); /* alias is NULL */ |
153 buddy->proto_data = NULL; | 155 purple_buddy_set_protocol_data(buddy, NULL); |
154 | 156 |
155 g_free(who); | 157 g_free(who); |
156 | 158 |
157 purple_blist_add_buddy(buddy, NULL, group, NULL); | 159 purple_blist_add_buddy(buddy, NULL, group, NULL); |
158 | 160 |
161 return buddy; | 163 return buddy; |
162 } | 164 } |
163 | 165 |
164 static void qq_buddy_free(PurpleBuddy *buddy) | 166 static void qq_buddy_free(PurpleBuddy *buddy) |
165 { | 167 { |
168 qq_buddy_data *bd; | |
169 | |
166 g_return_if_fail(buddy); | 170 g_return_if_fail(buddy); |
167 if (buddy->proto_data) { | 171 |
168 qq_buddy_data_free(buddy->proto_data); | 172 if ((bd = purple_buddy_get_protocol_data(buddy)) != NULL) { |
169 } | 173 qq_buddy_data_free(bd); |
170 buddy->proto_data = NULL; | 174 } |
175 purple_buddy_set_protocol_data(buddy, NULL); | |
171 purple_blist_remove_buddy(buddy); | 176 purple_blist_remove_buddy(buddy); |
172 } | 177 } |
173 | 178 |
174 PurpleBuddy *qq_buddy_find(PurpleConnection *gc, guint32 uid) | 179 PurpleBuddy *qq_buddy_find(PurpleConnection *gc, guint32 uid) |
175 { | 180 { |
185 } | 190 } |
186 | 191 |
187 PurpleBuddy *qq_buddy_find_or_new(PurpleConnection *gc, guint32 uid) | 192 PurpleBuddy *qq_buddy_find_or_new(PurpleConnection *gc, guint32 uid) |
188 { | 193 { |
189 PurpleBuddy *buddy; | 194 PurpleBuddy *buddy; |
195 qq_buddy_data *bd; | |
190 | 196 |
191 g_return_val_if_fail(gc->account != NULL && uid != 0, NULL); | 197 g_return_val_if_fail(gc->account != NULL && uid != 0, NULL); |
192 | 198 |
193 buddy = qq_buddy_find(gc, uid); | 199 buddy = qq_buddy_find(gc, uid); |
194 if (buddy == NULL) { | 200 if (buddy == NULL) { |
196 if (buddy == NULL) { | 202 if (buddy == NULL) { |
197 return NULL; | 203 return NULL; |
198 } | 204 } |
199 } | 205 } |
200 | 206 |
201 if (buddy->proto_data != NULL) { | 207 if (purple_buddy_get_protocol_data(buddy) != NULL) { |
202 return buddy; | 208 return buddy; |
203 } | 209 } |
204 | 210 |
205 buddy->proto_data = qq_buddy_data_new(uid); | 211 bd = qq_buddy_data_new(uid); |
212 purple_buddy_set_protocol_data(buddy, bd); | |
206 return buddy; | 213 return buddy; |
207 } | 214 } |
208 | 215 |
209 /* send packet to remove a buddy from my buddy list */ | 216 /* send packet to remove a buddy from my buddy list */ |
210 static void request_remove_buddy(PurpleConnection *gc, guint32 uid) | 217 static void request_remove_buddy(PurpleConnection *gc, guint32 uid) |
689 | 696 |
690 qd = (qq_data *) gc->proto_data; | 697 qd = (qq_data *) gc->proto_data; |
691 if (!qd->is_login) | 698 if (!qd->is_login) |
692 return; /* IMPORTANT ! */ | 699 return; /* IMPORTANT ! */ |
693 | 700 |
694 uid = purple_name_to_uid(buddy->name); | 701 uid = purple_name_to_uid(purple_buddy_get_name(buddy)); |
695 if (uid > 0) { | 702 if (uid > 0) { |
696 if (qd->client_version > 2005) { | 703 if (qd->client_version > 2005) { |
697 request_add_buddy_no_auth_ex(gc, uid); | 704 request_add_buddy_no_auth_ex(gc, uid); |
698 } else { | 705 } else { |
699 request_add_buddy_no_auth(gc, uid); | 706 request_add_buddy_no_auth(gc, uid); |
780 { | 787 { |
781 qq_data *qd; | 788 qq_data *qd; |
782 gchar **segments; | 789 gchar **segments; |
783 gchar *dest_uid, *reply; | 790 gchar *dest_uid, *reply; |
784 PurpleBuddy *buddy; | 791 PurpleBuddy *buddy; |
792 qq_buddy_data *bd; | |
785 | 793 |
786 g_return_if_fail(data != NULL && data_len != 0); | 794 g_return_if_fail(data != NULL && data_len != 0); |
787 g_return_if_fail(uid != 0); | 795 g_return_if_fail(uid != 0); |
788 | 796 |
789 qd = (qq_data *) gc->proto_data; | 797 qd = (qq_data *) gc->proto_data; |
824 | 832 |
825 buddy = qq_buddy_find(gc, uid); | 833 buddy = qq_buddy_find(gc, uid); |
826 if (buddy == NULL) { | 834 if (buddy == NULL) { |
827 buddy = qq_buddy_new(gc, uid); | 835 buddy = qq_buddy_new(gc, uid); |
828 } | 836 } |
829 if (buddy != NULL && buddy->proto_data != NULL) { | 837 if (buddy != NULL && (bd = purple_buddy_get_protocol_data(buddy)) != NULL) { |
830 /* Not authorized now, free buddy data */ | 838 /* Not authorized now, free buddy data */ |
831 qq_buddy_data_free(buddy->proto_data); | 839 qq_buddy_data_free(bd); |
832 buddy->proto_data = NULL; | 840 purple_buddy_set_protocol_data(buddy, NULL); |
833 } | 841 } |
834 | 842 |
835 add_buddy_authorize_input(gc, uid, NULL, 0); | 843 add_buddy_authorize_input(gc, uid, NULL, 0); |
836 g_strfreev(segments); | 844 g_strfreev(segments); |
837 } | 845 } |
903 | 911 |
904 /* remove a buddy and send packet to QQ server accordingly */ | 912 /* remove a buddy and send packet to QQ server accordingly */ |
905 void qq_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) | 913 void qq_remove_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) |
906 { | 914 { |
907 qq_data *qd; | 915 qq_data *qd; |
916 qq_buddy_data *bd; | |
908 guint32 uid; | 917 guint32 uid; |
909 | 918 |
910 g_return_if_fail(gc != NULL && gc->proto_data != NULL); | 919 g_return_if_fail(gc != NULL && gc->proto_data != NULL); |
911 g_return_if_fail(buddy != NULL); | 920 g_return_if_fail(buddy != NULL); |
912 | 921 |
913 qd = (qq_data *) gc->proto_data; | 922 qd = (qq_data *) gc->proto_data; |
914 if (!qd->is_login) | 923 if (!qd->is_login) |
915 return; | 924 return; |
916 | 925 |
917 uid = purple_name_to_uid(buddy->name); | 926 uid = purple_name_to_uid(purple_buddy_get_name(buddy)); |
918 if (uid > 0 && uid != qd->uid) { | 927 if (uid > 0 && uid != qd->uid) { |
919 if (qd->client_version > 2005) { | 928 if (qd->client_version > 2005) { |
920 qq_request_auth_code(gc, QQ_AUTH_INFO_BUDDY, QQ_AUTH_INFO_REMOVE_BUDDY, uid); | 929 qq_request_auth_code(gc, QQ_AUTH_INFO_BUDDY, QQ_AUTH_INFO_REMOVE_BUDDY, uid); |
921 } else { | 930 } else { |
922 request_remove_buddy(gc, uid); | 931 request_remove_buddy(gc, uid); |
923 request_buddy_remove_me(gc, uid); | 932 request_buddy_remove_me(gc, uid); |
924 } | 933 } |
925 } | 934 } |
926 | 935 |
927 if (buddy->proto_data) { | 936 if ((bd = purple_buddy_get_protocol_data(buddy)) != NULL) { |
928 qq_buddy_data_free(buddy->proto_data); | 937 qq_buddy_data_free(bd); |
929 buddy->proto_data = NULL; | 938 purple_buddy_set_protocol_data(buddy, NULL); |
930 } else { | 939 } else { |
931 purple_debug_warning("QQ", "Empty buddy data of %s\n", buddy->name); | 940 purple_debug_warning("QQ", "Empty buddy data of %s\n", purple_buddy_get_name(buddy)); |
932 } | 941 } |
933 | 942 |
934 /* Do not call purple_blist_remove_buddy, | 943 /* Do not call purple_blist_remove_buddy, |
935 * otherwise purple segmentation fault */ | 944 * otherwise purple segmentation fault */ |
936 } | 945 } |
1214 PurpleBuddy *buddy; | 1223 PurpleBuddy *buddy; |
1215 gchar *msg, *msg_utf8; | 1224 gchar *msg, *msg_utf8; |
1216 gint bytes; | 1225 gint bytes; |
1217 gchar **segments; | 1226 gchar **segments; |
1218 gchar *primary, *secondary; | 1227 gchar *primary, *secondary; |
1228 qq_buddy_data *bd; | |
1219 | 1229 |
1220 g_return_if_fail(from != NULL && to != NULL); | 1230 g_return_if_fail(from != NULL && to != NULL); |
1221 | 1231 |
1222 qq_show_packet("server_buddy_rejected_me", data, data_len); | 1232 qq_show_packet("server_buddy_rejected_me", data, data_len); |
1223 | 1233 |
1253 | 1263 |
1254 uid = strtol(from, NULL, 10); | 1264 uid = strtol(from, NULL, 10); |
1255 g_return_if_fail(uid != 0); | 1265 g_return_if_fail(uid != 0); |
1256 | 1266 |
1257 buddy = qq_buddy_find(gc, uid); | 1267 buddy = qq_buddy_find(gc, uid); |
1258 if (buddy != NULL && buddy->proto_data != NULL) { | 1268 if (buddy != NULL && (bd = purple_buddy_get_protocol_data(buddy)) != NULL) { |
1259 /* Not authorized now, free buddy data */ | 1269 /* Not authorized now, free buddy data */ |
1260 qq_buddy_data_free(buddy->proto_data); | 1270 qq_buddy_data_free(bd); |
1261 buddy->proto_data = NULL; | 1271 purple_buddy_set_protocol_data(buddy, NULL); |
1262 } | 1272 } |
1263 } | 1273 } |
1264 | 1274 |
1265 void qq_process_buddy_from_server(PurpleConnection *gc, int funct, | 1275 void qq_process_buddy_from_server(PurpleConnection *gc, int funct, |
1266 gchar *from, gchar *to, guint8 *data, gint data_len) | 1276 gchar *from, gchar *to, guint8 *data, gint data_len) |