libpurple/protocols/jabber/jabber.c

changeset 27215
e26cd0c884ed
parent 27156
24858719952c
parent 27214
36979dac48eb
child 27217
7509acac49de
equal deleted inserted replaced
27164:89f58727e1bd 27215:e26cd0c884ed
770 PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY; 770 PURPLE_CONNECTION_ALLOW_CUSTOM_SMILEY;
771 js = gc->proto_data = g_new0(JabberStream, 1); 771 js = gc->proto_data = g_new0(JabberStream, 1);
772 js->gc = gc; 772 js->gc = gc;
773 js->fd = -1; 773 js->fd = -1;
774 js->iq_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal, 774 js->iq_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal,
775 g_free, g_free);
776 js->disco_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal,
777 g_free, g_free); 775 g_free, g_free);
778 js->buddies = g_hash_table_new_full(g_str_hash, g_str_equal, 776 js->buddies = g_hash_table_new_full(g_str_hash, g_str_equal,
779 g_free, (GDestroyNotify)jabber_buddy_free); 777 g_free, (GDestroyNotify)jabber_buddy_free);
780 js->chats = g_hash_table_new_full(g_str_hash, g_str_equal, 778 js->chats = g_hash_table_new_full(g_str_hash, g_str_equal,
781 g_free, (GDestroyNotify)jabber_chat_free); 779 g_free, (GDestroyNotify)jabber_chat_free);
1094 1092
1095 jabber_iq_set_callback(iq, jabber_registration_result_cb, to); 1093 jabber_iq_set_callback(iq, jabber_registration_result_cb, to);
1096 jabber_iq_send(iq); 1094 jabber_iq_send(iq);
1097 } 1095 }
1098 1096
1097 static const struct {
1098 const char *name;
1099 const char *label;
1100 } registration_fields[] = {
1101 { "email", N_("Email") },
1102 { "nick", N_("Nickname") },
1103 { "first", N_("First name") },
1104 { "last", N_("Last name") },
1105 { "address", N_("Address") },
1106 { "city", N_("City") },
1107 { "state", N_("State") },
1108 { "zip", N_("Postal code") },
1109 { "phone", N_("Phone") },
1110 { "url", N_("URL") },
1111 { "date", N_("Date") },
1112 { NULL, NULL }
1113 };
1114
1099 void jabber_register_parse(JabberStream *js, const char *from, JabberIqType type, 1115 void jabber_register_parse(JabberStream *js, const char *from, JabberIqType type,
1100 const char *id, xmlnode *query) 1116 const char *id, xmlnode *query)
1101 { 1117 {
1102 PurpleAccount *account = purple_connection_get_account(js->gc); 1118 PurpleAccount *account = purple_connection_get_account(js->gc);
1103 PurpleRequestFields *fields; 1119 PurpleRequestFields *fields;
1104 PurpleRequestFieldGroup *group; 1120 PurpleRequestFieldGroup *group;
1105 PurpleRequestField *field; 1121 PurpleRequestField *field;
1106 xmlnode *x, *y; 1122 xmlnode *x, *y, *node;
1107 char *instructions; 1123 char *instructions;
1108 JabberRegisterCBData *cbdata; 1124 JabberRegisterCBData *cbdata;
1109 gboolean registered = FALSE; 1125 gboolean registered = FALSE;
1126 int i;
1110 1127
1111 if (type != JABBER_IQ_RESULT) 1128 if (type != JABBER_IQ_RESULT)
1112 return; 1129 return;
1113 1130
1114 if (!from) 1131 if (!from)
1161 1178
1162 fields = purple_request_fields_new(); 1179 fields = purple_request_fields_new();
1163 group = purple_request_field_group_new(NULL); 1180 group = purple_request_field_group_new(NULL);
1164 purple_request_fields_add_group(fields, group); 1181 purple_request_fields_add_group(fields, group);
1165 1182
1166 if(js->registration) 1183 if((node = xmlnode_get_child(query, "username"))) {
1167 field = purple_request_field_string_new("username", _("Username"), js->user->node, FALSE); 1184 char *data = xmlnode_get_data(node);
1168 else 1185 if(js->registration)
1169 field = purple_request_field_string_new("username", _("Username"), NULL, FALSE); 1186 field = purple_request_field_string_new("username", _("Username"), data ? data : js->user->node, FALSE);
1170 1187 else
1171 purple_request_field_group_add_field(group, field); 1188 field = purple_request_field_string_new("username", _("Username"), data, FALSE);
1172 1189
1173 if(js->registration) 1190 purple_request_field_group_add_field(group, field);
1174 field = purple_request_field_string_new("password", _("Password"), 1191 g_free(data);
1175 purple_connection_get_password(js->gc), FALSE); 1192 }
1176 else 1193 if((node = xmlnode_get_child(query, "password"))) {
1177 field = purple_request_field_string_new("password", _("Password"), NULL, FALSE); 1194 if(js->registration)
1178 1195 field = purple_request_field_string_new("password", _("Password"),
1179 purple_request_field_string_set_masked(field, TRUE); 1196 purple_connection_get_password(js->gc), FALSE);
1180 purple_request_field_group_add_field(group, field); 1197 else {
1181 1198 char *data = xmlnode_get_data(node);
1182 if(xmlnode_get_child(query, "name")) { 1199 field = purple_request_field_string_new("password", _("Password"), data, FALSE);
1200 g_free(data);
1201 }
1202
1203 purple_request_field_string_set_masked(field, TRUE);
1204 purple_request_field_group_add_field(group, field);
1205 }
1206
1207 if((node = xmlnode_get_child(query, "name"))) {
1183 if(js->registration) 1208 if(js->registration)
1184 field = purple_request_field_string_new("name", _("Name"), 1209 field = purple_request_field_string_new("name", _("Name"),
1185 purple_account_get_alias(js->gc->account), FALSE); 1210 purple_account_get_alias(js->gc->account), FALSE);
1186 else 1211 else {
1187 field = purple_request_field_string_new("name", _("Name"), NULL, FALSE); 1212 char *data = xmlnode_get_data(node);
1213 field = purple_request_field_string_new("name", _("Name"), data, FALSE);
1214 g_free(data);
1215 }
1188 purple_request_field_group_add_field(group, field); 1216 purple_request_field_group_add_field(group, field);
1189 } 1217 }
1190 if(xmlnode_get_child(query, "email")) { 1218
1191 field = purple_request_field_string_new("email", _("Email"), NULL, FALSE); 1219 for (i = 0; registration_fields[i].name != NULL; ++i) {
1192 purple_request_field_group_add_field(group, field); 1220 if ((node = xmlnode_get_child(query, registration_fields[i].name))) {
1193 } 1221 char *data = xmlnode_get_data(node);
1194 if(xmlnode_get_child(query, "nick")) { 1222 field = purple_request_field_string_new(registration_fields[i].name,
1195 field = purple_request_field_string_new("nick", _("Nickname"), NULL, FALSE); 1223 _(registration_fields[i].label),
1196 purple_request_field_group_add_field(group, field); 1224 data, FALSE);
1197 } 1225 purple_request_field_group_add_field(group, field);
1198 if(xmlnode_get_child(query, "first")) { 1226 g_free(data);
1199 field = purple_request_field_string_new("first", _("First name"), NULL, FALSE); 1227 }
1200 purple_request_field_group_add_field(group, field); 1228 }
1201 } 1229
1202 if(xmlnode_get_child(query, "last")) {
1203 field = purple_request_field_string_new("last", _("Last name"), NULL, FALSE);
1204 purple_request_field_group_add_field(group, field);
1205 }
1206 if(xmlnode_get_child(query, "address")) {
1207 field = purple_request_field_string_new("address", _("Address"), NULL, FALSE);
1208 purple_request_field_group_add_field(group, field);
1209 }
1210 if(xmlnode_get_child(query, "city")) {
1211 field = purple_request_field_string_new("city", _("City"), NULL, FALSE);
1212 purple_request_field_group_add_field(group, field);
1213 }
1214 if(xmlnode_get_child(query, "state")) {
1215 field = purple_request_field_string_new("state", _("State"), NULL, FALSE);
1216 purple_request_field_group_add_field(group, field);
1217 }
1218 if(xmlnode_get_child(query, "zip")) {
1219 field = purple_request_field_string_new("zip", _("Postal code"), NULL, FALSE);
1220 purple_request_field_group_add_field(group, field);
1221 }
1222 if(xmlnode_get_child(query, "phone")) {
1223 field = purple_request_field_string_new("phone", _("Phone"), NULL, FALSE);
1224 purple_request_field_group_add_field(group, field);
1225 }
1226 if(xmlnode_get_child(query, "url")) {
1227 field = purple_request_field_string_new("url", _("URL"), NULL, FALSE);
1228 purple_request_field_group_add_field(group, field);
1229 }
1230 if(xmlnode_get_child(query, "date")) {
1231 field = purple_request_field_string_new("date", _("Date"), NULL, FALSE);
1232 purple_request_field_group_add_field(group, field);
1233 }
1234 if(registered) { 1230 if(registered) {
1235 field = purple_request_field_bool_new("unregister", _("Unregister"), FALSE); 1231 field = purple_request_field_bool_new("unregister", _("Unregister"), FALSE);
1236 purple_request_field_group_add_field(group, field); 1232 purple_request_field_group_add_field(group, field);
1237 } 1233 }
1238 1234
1301 js = gc->proto_data = g_new0(JabberStream, 1); 1297 js = gc->proto_data = g_new0(JabberStream, 1);
1302 js->gc = gc; 1298 js->gc = gc;
1303 js->registration = TRUE; 1299 js->registration = TRUE;
1304 js->iq_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal, 1300 js->iq_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal,
1305 g_free, g_free); 1301 g_free, g_free);
1306 js->disco_callbacks = g_hash_table_new_full(g_str_hash, g_str_equal,
1307 g_free, g_free);
1308 js->user = jabber_id_new(purple_account_get_username(account)); 1302 js->user = jabber_id_new(purple_account_get_username(account));
1309 js->next_id = g_random_int(); 1303 js->next_id = g_random_int();
1310 js->old_length = 0; 1304 js->old_length = 0;
1311 js->keepalive_timeout = -1; 1305 js->keepalive_timeout = -1;
1312 1306
1491 1485
1492 jabber_parser_free(js); 1486 jabber_parser_free(js);
1493 1487
1494 if(js->iq_callbacks) 1488 if(js->iq_callbacks)
1495 g_hash_table_destroy(js->iq_callbacks); 1489 g_hash_table_destroy(js->iq_callbacks);
1496 if(js->disco_callbacks)
1497 g_hash_table_destroy(js->disco_callbacks);
1498 if(js->buddies) 1490 if(js->buddies)
1499 g_hash_table_destroy(js->buddies); 1491 g_hash_table_destroy(js->buddies);
1500 if(js->chats) 1492 if(js->chats)
1501 g_hash_table_destroy(js->chats); 1493 g_hash_table_destroy(js->chats);
1502 1494
1560 g_free(js->old_title); 1552 g_free(js->old_title);
1561 g_free(js->old_source); 1553 g_free(js->old_source);
1562 g_free(js->old_uri); 1554 g_free(js->old_uri);
1563 g_free(js->old_track); 1555 g_free(js->old_track);
1564 g_free(js->expected_rspauth); 1556 g_free(js->expected_rspauth);
1557 g_free(js->last_disco_server);
1565 1558
1566 if (js->keepalive_timeout != -1) 1559 if (js->keepalive_timeout != -1)
1567 purple_timeout_remove(js->keepalive_timeout); 1560 purple_timeout_remove(js->keepalive_timeout);
1568 1561
1569 g_free(js->srv_rec); 1562 g_free(js->srv_rec);

mercurial