| 799 gc->inpa = gaim_input_add(gjc->fd, GAIM_INPUT_READ, jabber_callback, gc); |
799 gc->inpa = gaim_input_add(gjc->fd, GAIM_INPUT_READ, jabber_callback, gc); |
| 800 } |
800 } |
| 801 |
801 |
| 802 static void gjab_start(gjconn gjc) |
802 static void gjab_start(gjconn gjc) |
| 803 { |
803 { |
| 804 struct aim_user *user; |
804 struct gaim_account *account; |
| 805 int port, rc; |
805 int port, rc; |
| 806 char *server; |
806 char *server; |
| 807 |
807 |
| 808 if (!gjc || gjc->state != JCONN_STATE_OFF) |
808 if (!gjc || gjc->state != JCONN_STATE_OFF) |
| 809 return; |
809 return; |
| 810 |
810 |
| 811 user = GJ_GC(gjc)->user; |
811 account = GJ_GC(gjc)->account; |
| 812 port = user->proto_opt[USEROPT_PORT][0] ? atoi(user->proto_opt[USEROPT_PORT]) : DEFAULT_PORT; |
812 port = account->proto_opt[USEROPT_PORT][0] ? atoi(account->proto_opt[USEROPT_PORT]) : DEFAULT_PORT; |
| 813 server = user->proto_opt[USEROPT_CONN_SERVER][0] ? user->proto_opt[USEROPT_CONN_SERVER] : gjc->user->server; |
813 server = account->proto_opt[USEROPT_CONN_SERVER][0] ? account->proto_opt[USEROPT_CONN_SERVER] : gjc->user->server; |
| 814 |
814 |
| 815 |
815 |
| 816 gjc->parser = XML_ParserCreate(NULL); |
816 gjc->parser = XML_ParserCreate(NULL); |
| 817 XML_SetUserData(gjc->parser, (void *)gjc); |
817 XML_SetUserData(gjc->parser, (void *)gjc); |
| 818 XML_SetElementHandler(gjc->parser, startElement, endElement); |
818 XML_SetElementHandler(gjc->parser, startElement, endElement); |
| 819 XML_SetCharacterDataHandler(gjc->parser, charData); |
819 XML_SetCharacterDataHandler(gjc->parser, charData); |
| 820 |
820 |
| 821 rc = proxy_connect(server, port, gjab_connected, GJ_GC(gjc)); |
821 rc = proxy_connect(server, port, gjab_connected, GJ_GC(gjc)); |
| 822 if (!user->gc || (rc != 0)) { |
822 if (!account->gc || (rc != 0)) { |
| 823 STATE_EVT(JCONN_STATE_OFF) |
823 STATE_EVT(JCONN_STATE_OFF) |
| 824 return; |
824 return; |
| 825 } |
825 } |
| 826 } |
826 } |
| 827 |
827 |
| 1517 static int i = 0x70; |
1517 static int i = 0x70; |
| 1518 if ((jc = find_pending_chat(GJ_GC(gjc), gjid)) != NULL) { |
1518 if ((jc = find_pending_chat(GJ_GC(gjc), gjid)) != NULL) { |
| 1519 jc->b = cnv = serv_got_joined_chat(GJ_GC(gjc), i++, gjid->user); |
1519 jc->b = cnv = serv_got_joined_chat(GJ_GC(gjc), i++, gjid->user); |
| 1520 jc->id = gaim_chat_get_id(GAIM_CHAT(jc->b)); |
1520 jc->id = gaim_chat_get_id(GAIM_CHAT(jc->b)); |
| 1521 jc->state = JCS_ACTIVE; |
1521 jc->state = JCS_ACTIVE; |
| 1522 } else if ((b = find_buddy(GJ_GC(gjc)->user, buddy)) == NULL) { |
1522 } else if ((b = find_buddy(GJ_GC(gjc)->account, buddy)) == NULL) { |
| 1523 g_free(buddy); |
1523 g_free(buddy); |
| 1524 gaim_jid_free(gjid); |
1524 gaim_jid_free(gjid); |
| 1525 return; |
1525 return; |
| 1526 } |
1526 } |
| 1527 } |
1527 } |
| 1622 jabber_accept_deny_add(jap, "subscribed"); |
1622 jabber_accept_deny_add(jap, "subscribed"); |
| 1623 /* |
1623 /* |
| 1624 * If we don't already have the buddy on *our* buddylist, |
1624 * If we don't already have the buddy on *our* buddylist, |
| 1625 * ask if we want him or her added. |
1625 * ask if we want him or her added. |
| 1626 */ |
1626 */ |
| 1627 if(find_buddy(jap->gc->user, jap->user) == NULL) { |
1627 if(find_buddy(jap->gc->account, jap->user) == NULL) { |
| 1628 show_got_added(jap->gc, NULL, jap->user, NULL, NULL); |
1628 show_got_added(jap->gc, NULL, jap->user, NULL, NULL); |
| 1629 } |
1629 } |
| 1630 } |
1630 } |
| 1631 |
1631 |
| 1632 g_free(jap->user); |
1632 g_free(jap->user); |
| 1769 |
1769 |
| 1770 /* |
1770 /* |
| 1771 * Add or remove a buddy? Change buddy's alias or group? |
1771 * Add or remove a buddy? Change buddy's alias or group? |
| 1772 */ |
1772 */ |
| 1773 if (BUD_SUB_TO_PEND(sub, ask) || BUD_SUBD_TO(sub, ask)) { |
1773 if (BUD_SUB_TO_PEND(sub, ask) || BUD_SUBD_TO(sub, ask)) { |
| 1774 if ((b = find_buddy(GJ_GC(gjc)->user, buddyname)) == NULL) { |
1774 if ((b = find_buddy(GJ_GC(gjc)->account, buddyname)) == NULL) { |
| 1775 debug_printf("adding buddy [4]: %s\n", buddyname); |
1775 debug_printf("adding buddy [4]: %s\n", buddyname); |
| 1776 b = add_buddy(GJ_GC(gjc)->user, groupname ? groupname : _("Buddies"), buddyname, |
1776 b = add_buddy(GJ_GC(gjc)->account, |
| 1777 name ? name : buddyname); |
1777 groupname ? groupname : _("Buddies"), buddyname, |
| |
1778 name ? name : buddyname); |
| 1778 gaim_blist_save(); |
1779 gaim_blist_save(); |
| 1779 } else { |
1780 } else { |
| 1780 struct group *c_grp = find_group_by_buddy(b); |
1781 struct group *c_grp = find_group_by_buddy(b); |
| 1781 |
1782 |
| 1782 /* |
1783 /* |
| 1790 |
1791 |
| 1791 /* |
1792 /* |
| 1792 * seems rude, but it seems to be the only way... |
1793 * seems rude, but it seems to be the only way... |
| 1793 */ |
1794 */ |
| 1794 remove_buddy(b); |
1795 remove_buddy(b); |
| 1795 b = add_buddy(GJ_GC(gjc)->user, groupname, buddyname, |
1796 b = add_buddy(GJ_GC(gjc)->account, groupname, buddyname, |
| 1796 name ? name : buddyname); |
1797 name ? name : buddyname); |
| 1797 gaim_blist_save(); |
1798 gaim_blist_save(); |
| 1798 if(present) { |
1799 if(present) { |
| 1799 serv_got_update(GJ_GC(gjc), buddyname, 1, 0, signon, idle, |
1800 serv_got_update(GJ_GC(gjc), buddyname, 1, 0, signon, idle, |
| 1800 uc, 0); |
1801 uc, 0); |
| 2317 debug_printf("state change: %d\n", state); |
2318 debug_printf("state change: %d\n", state); |
| 2318 } |
2319 } |
| 2319 return; |
2320 return; |
| 2320 } |
2321 } |
| 2321 |
2322 |
| 2322 static void jabber_login(struct aim_user *user) |
2323 static void jabber_login(struct gaim_account *account) |
| 2323 { |
2324 { |
| 2324 struct gaim_connection *gc = new_gaim_conn(user); |
2325 struct gaim_connection *gc = new_gaim_conn(account); |
| 2325 struct jabber_data *jd = gc->proto_data = g_new0(struct jabber_data, 1); |
2326 struct jabber_data *jd = gc->proto_data = g_new0(struct jabber_data, 1); |
| 2326 char *loginname = create_valid_jid(user->username, DEFAULT_SERVER, "Gaim"); |
2327 char *loginname = create_valid_jid(account->username, DEFAULT_SERVER, "Gaim"); |
| 2327 |
2328 |
| 2328 jd->buddies = g_hash_table_new(g_str_hash, g_str_equal); |
2329 jd->buddies = g_hash_table_new(g_str_hash, g_str_equal); |
| 2329 jd->chats = NULL; /* we have no chats yet */ |
2330 jd->chats = NULL; /* we have no chats yet */ |
| 2330 |
2331 |
| 2331 set_login_progress(gc, 1, _("Connecting")); |
2332 set_login_progress(gc, 1, _("Connecting")); |
| 2332 |
2333 |
| 2333 if (!(jd->gjc = gjab_new(loginname, user->password, gc))) { |
2334 if (!(jd->gjc = gjab_new(loginname, account->password, gc))) { |
| 2334 g_free(loginname); |
2335 g_free(loginname); |
| 2335 debug_printf("jabber: unable to connect (jab_new failed)\n"); |
2336 debug_printf("jabber: unable to connect (jab_new failed)\n"); |
| 2336 hide_login_progress(gc, _("Unable to connect")); |
2337 hide_login_progress(gc, _("Unable to connect")); |
| 2337 signoff(gc); |
2338 signoff(gc); |
| 2338 return; |
2339 return; |
| 2532 |
2533 |
| 2533 x = jutil_iqnew(JPACKET__SET, NS_ROSTER); |
2534 x = jutil_iqnew(JPACKET__SET, NS_ROSTER); |
| 2534 y = xmlnode_insert_tag(xmlnode_get_tag(x, "query"), "item"); |
2535 y = xmlnode_insert_tag(xmlnode_get_tag(x, "query"), "item"); |
| 2535 xmlnode_put_attrib(y, "jid", realwho); |
2536 xmlnode_put_attrib(y, "jid", realwho); |
| 2536 |
2537 |
| 2537 buddy = find_buddy(gc->user, realwho); |
2538 buddy = find_buddy(gc->account, realwho); |
| 2538 |
2539 |
| 2539 /* |
2540 /* |
| 2540 * See if there's an explict (new?) alias for the buddy or we can pull |
2541 * See if there's an explict (new?) alias for the buddy or we can pull |
| 2541 * one out of current Gaim buddylist data for him. |
2542 * one out of current Gaim buddylist data for him. |
| 2542 */ |
2543 */ |
| 2935 debug_printf("joining completely new Jabber chat\n"); |
2936 debug_printf("joining completely new Jabber chat\n"); |
| 2936 jc = g_new0(struct jabber_chat, 1); |
2937 jc = g_new0(struct jabber_chat, 1); |
| 2937 jc->gjid = gjid; |
2938 jc->gjid = gjid; |
| 2938 jc->gc = gc; |
2939 jc->gc = gc; |
| 2939 ((struct jabber_data *)gc->proto_data)->chats = g_slist_append(jcs, jc); |
2940 ((struct jabber_data *)gc->proto_data)->chats = g_slist_append(jcs, jc); |
| 2940 add_buddy(gc->user, _("Chats"), realwho, realwho); |
2941 add_buddy(gc->account, _("Chats"), realwho, realwho); |
| 2941 } |
2942 } |
| 2942 |
2943 |
| 2943 jc->state = JCS_PENDING; |
2944 jc->state = JCS_PENDING; |
| 2944 |
2945 |
| 2945 x = jutil_presnew(0, realwho, NULL); |
2946 x = jutil_presnew(0, realwho, NULL); |
| 3240 } |
3241 } |
| 3241 |
3242 |
| 3242 static GList *jabber_buddy_menu(struct gaim_connection *gc, char *who) { |
3243 static GList *jabber_buddy_menu(struct gaim_connection *gc, char *who) { |
| 3243 GList *m = NULL; |
3244 GList *m = NULL; |
| 3244 struct proto_buddy_menu *pbm; |
3245 struct proto_buddy_menu *pbm; |
| 3245 struct buddy *b = find_buddy(gc->user, who); |
3246 struct buddy *b = find_buddy(gc->account, who); |
| 3246 |
3247 |
| 3247 if(b->uc == UC_ERROR) |
3248 if(b->uc == UC_ERROR) |
| 3248 { |
3249 { |
| 3249 pbm = g_new0(struct proto_buddy_menu, 1); |
3250 pbm = g_new0(struct proto_buddy_menu, 1); |
| 3250 pbm->label = _("View Error Msg"); |
3251 pbm->label = _("View Error Msg"); |
| 3874 const struct vcard_template *vc_tp; |
3875 const struct vcard_template *vc_tp; |
| 3875 char *user_info; |
3876 char *user_info; |
| 3876 MultiEntryDlg *b = multi_entry_dialog_new(); |
3877 MultiEntryDlg *b = multi_entry_dialog_new(); |
| 3877 char *cdata; |
3878 char *cdata; |
| 3878 xmlnode x_vc_data = NULL; |
3879 xmlnode x_vc_data = NULL; |
| 3879 struct aim_user *tmp = gc->user; |
3880 struct gaim_account *tmp = gc->account; |
| 3880 b->user = tmp; |
3881 b->account = tmp; |
| 3881 |
3882 |
| 3882 |
3883 |
| 3883 /* |
3884 /* |
| 3884 * Get existing, XML-formatted, user info |
3885 * Get existing, XML-formatted, user info |
| 3885 */ |
3886 */ |
| 4125 } |
4126 } |
| 4126 |
4127 |
| 4127 /* |
4128 /* |
| 4128 * Like jabber_login(), only different |
4129 * Like jabber_login(), only different |
| 4129 */ |
4130 */ |
| 4130 void jabber_register_user(struct aim_user *au) |
4131 void jabber_register_user(struct gaim_account *account) |
| 4131 { |
4132 { |
| 4132 struct gaim_connection *gc = new_gaim_conn(au); |
4133 struct gaim_connection *gc = new_gaim_conn(account); |
| 4133 struct jabber_data *jd = gc->proto_data = g_new0(struct jabber_data, 1); |
4134 struct jabber_data *jd = gc->proto_data = g_new0(struct jabber_data, 1); |
| 4134 char *loginname = create_valid_jid(au->username, DEFAULT_SERVER, "Gaim"); |
4135 char *loginname = create_valid_jid(account->username, DEFAULT_SERVER, "Gaim"); |
| 4135 |
4136 |
| 4136 /* |
4137 /* |
| 4137 * These do nothing during registration |
4138 * These do nothing during registration |
| 4138 */ |
4139 */ |
| 4139 jd->buddies = NULL; |
4140 jd->buddies = NULL; |
| 4140 jd->chats = NULL; |
4141 jd->chats = NULL; |
| 4141 |
4142 |
| 4142 if ((jd->gjc = gjab_new(loginname, au->password, gc)) == NULL) { |
4143 if ((jd->gjc = gjab_new(loginname, account->password, gc)) == NULL) { |
| 4143 g_free(loginname); |
4144 g_free(loginname); |
| 4144 debug_printf("jabber: unable to connect (jab_new failed)\n"); |
4145 debug_printf("jabber: unable to connect (jab_new failed)\n"); |
| 4145 hide_login_progress(gc, _("Unable to connect")); |
4146 hide_login_progress(gc, _("Unable to connect")); |
| 4146 signoff(gc); |
4147 signoff(gc); |
| 4147 } else { |
4148 } else { |