| 614 purple_signal_emit(purple_connection_get_prpl(js->gc), "jabber-sending-xmlnode", js->gc, &packet); |
614 purple_signal_emit(purple_connection_get_prpl(js->gc), "jabber-sending-xmlnode", js->gc, &packet); |
| 615 } |
615 } |
| 616 |
616 |
| 617 static gboolean jabber_keepalive_timeout(PurpleConnection *gc) |
617 static gboolean jabber_keepalive_timeout(PurpleConnection *gc) |
| 618 { |
618 { |
| 619 JabberStream *js = gc->proto_data; |
619 JabberStream *js = purple_connection_get_protocol_data(gc); |
| 620 purple_connection_error(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
620 purple_connection_error(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, |
| 621 _("Ping timed out")); |
621 _("Ping timed out")); |
| 622 js->keepalive_timeout = 0; |
622 js->keepalive_timeout = 0; |
| 623 return FALSE; |
623 return FALSE; |
| 624 } |
624 } |
| 640 static void |
640 static void |
| 641 jabber_recv_cb_ssl(gpointer data, PurpleSslConnection *gsc, |
641 jabber_recv_cb_ssl(gpointer data, PurpleSslConnection *gsc, |
| 642 PurpleInputCondition cond) |
642 PurpleInputCondition cond) |
| 643 { |
643 { |
| 644 PurpleConnection *gc = data; |
644 PurpleConnection *gc = data; |
| 645 JabberStream *js = gc->proto_data; |
645 JabberStream *js = purple_connection_get_protocol_data(gc); |
| 646 int len; |
646 int len; |
| 647 static char buf[4096]; |
647 static char buf[4096]; |
| 648 |
648 |
| 649 /* TODO: It should be possible to make this check unnecessary */ |
649 /* TODO: It should be possible to make this check unnecessary */ |
| 650 if(!PURPLE_CONNECTION_IS_VALID(gc)) { |
650 if(!PURPLE_CONNECTION_IS_VALID(gc)) { |
| 745 if(!PURPLE_CONNECTION_IS_VALID(gc)) { |
745 if(!PURPLE_CONNECTION_IS_VALID(gc)) { |
| 746 purple_ssl_close(gsc); |
746 purple_ssl_close(gsc); |
| 747 g_return_if_reached(); |
747 g_return_if_reached(); |
| 748 } |
748 } |
| 749 |
749 |
| 750 js = gc->proto_data; |
750 js = purple_connection_get_protocol_data(gc); |
| 751 |
751 |
| 752 if(js->state == JABBER_STREAM_CONNECTING) |
752 if(js->state == JABBER_STREAM_CONNECTING) |
| 753 jabber_send_raw(js, "<?xml version='1.0' ?>", -1); |
753 jabber_send_raw(js, "<?xml version='1.0' ?>", -1); |
| 754 jabber_stream_set_state(js, JABBER_STREAM_INITIALIZING); |
754 jabber_stream_set_state(js, JABBER_STREAM_INITIALIZING); |
| 755 purple_ssl_input_add(gsc, jabber_recv_cb_ssl, gc); |
755 purple_ssl_input_add(gsc, jabber_recv_cb_ssl, gc); |
| 926 JabberStream *js; |
926 JabberStream *js; |
| 927 PurplePresence *presence; |
927 PurplePresence *presence; |
| 928 gchar *user; |
928 gchar *user; |
| 929 gchar *slash; |
929 gchar *slash; |
| 930 |
930 |
| 931 js = gc->proto_data = g_new0(JabberStream, 1); |
931 js = g_new0(JabberStream, 1); |
| |
932 purple_connection_set_protocol_data(gc, js); |
| 932 js->gc = gc; |
933 js->gc = gc; |
| 933 js->fd = -1; |
934 js->fd = -1; |
| 934 |
935 |
| 935 user = g_strdup(purple_account_get_username(account)); |
936 user = g_strdup(purple_account_get_username(account)); |
| 936 /* jabber_id_new doesn't accept "user@domain/" as valid */ |
937 /* jabber_id_new doesn't accept "user@domain/" as valid */ |
| 1557 JabberStream *js; |
1558 JabberStream *js; |
| 1558 |
1559 |
| 1559 if(gc->state != PURPLE_CONNECTED) { |
1560 if(gc->state != PURPLE_CONNECTED) { |
| 1560 if(gc->state != PURPLE_CONNECTING) |
1561 if(gc->state != PURPLE_CONNECTING) |
| 1561 jabber_login(account); |
1562 jabber_login(account); |
| 1562 js = gc->proto_data; |
1563 js = purple_connection_get_protocol_data(gc); |
| 1563 js->unregistration = TRUE; |
1564 js->unregistration = TRUE; |
| 1564 js->unregistration_cb = cb; |
1565 js->unregistration_cb = cb; |
| 1565 js->unregistration_user_data = user_data; |
1566 js->unregistration_user_data = user_data; |
| 1566 return; |
1567 return; |
| 1567 } |
1568 } |
| 1568 |
1569 |
| 1569 js = gc->proto_data; |
1570 js = purple_connection_get_protocol_data(gc); |
| 1570 |
1571 |
| 1571 if (js->unregistration) { |
1572 if (js->unregistration) { |
| 1572 purple_debug_error("jabber", "Unregistration in process; ignoring duplicate request.\n"); |
1573 purple_debug_error("jabber", "Unregistration in process; ignoring duplicate request.\n"); |
| 1573 return; |
1574 return; |
| 1574 } |
1575 } |
| 1778 } |
1779 } |
| 1779 |
1780 |
| 1780 |
1781 |
| 1781 void jabber_idle_set(PurpleConnection *gc, int idle) |
1782 void jabber_idle_set(PurpleConnection *gc, int idle) |
| 1782 { |
1783 { |
| 1783 JabberStream *js = gc->proto_data; |
1784 JabberStream *js = purple_connection_get_protocol_data(gc); |
| 1784 |
1785 |
| 1785 js->idle = idle ? time(NULL) - idle : idle; |
1786 js->idle = idle ? time(NULL) - idle : idle; |
| 1786 |
1787 |
| 1787 /* send out an updated prescence */ |
1788 /* send out an updated prescence */ |
| 1788 purple_debug_info("jabber", "sending updated presence for idle\n"); |
1789 purple_debug_info("jabber", "sending updated presence for idle\n"); |
| 2131 PurpleConnection *gc = purple_account_get_connection(purple_buddy_get_account(b)); |
2132 PurpleConnection *gc = purple_account_get_connection(purple_buddy_get_account(b)); |
| 2132 |
2133 |
| 2133 if(!gc) |
2134 if(!gc) |
| 2134 return NULL; |
2135 return NULL; |
| 2135 |
2136 |
| 2136 js = gc->proto_data; |
2137 js = purple_connection_get_protocol_data(gc); |
| 2137 if(js) |
2138 if(js) |
| 2138 jb = jabber_buddy_find(js, purple_buddy_get_name(b), FALSE); |
2139 jb = jabber_buddy_find(js, purple_buddy_get_name(b), FALSE); |
| 2139 |
2140 |
| 2140 if(!PURPLE_BUDDY_IS_ONLINE(b)) { |
2141 if(!PURPLE_BUDDY_IS_ONLINE(b)) { |
| 2141 if(jb && (jb->subscription & JABBER_SUB_PENDING || |
2142 if(jb && (jb->subscription & JABBER_SUB_PENDING || |
| 2172 char *ret = NULL; |
2173 char *ret = NULL; |
| 2173 JabberBuddy *jb = NULL; |
2174 JabberBuddy *jb = NULL; |
| 2174 PurpleAccount *account = purple_buddy_get_account(b); |
2175 PurpleAccount *account = purple_buddy_get_account(b); |
| 2175 PurpleConnection *gc = purple_account_get_connection(account); |
2176 PurpleConnection *gc = purple_account_get_connection(account); |
| 2176 |
2177 |
| 2177 if (gc && gc->proto_data) |
2178 if (gc && purple_connection_get_protocol_data(gc)) |
| 2178 jb = jabber_buddy_find(gc->proto_data, purple_buddy_get_name(b), FALSE); |
2179 jb = jabber_buddy_find(purple_connection_get_protocol_data(gc), purple_buddy_get_name(b), FALSE); |
| 2179 |
2180 |
| 2180 if(jb && !PURPLE_BUDDY_IS_ONLINE(b) && (jb->subscription & JABBER_SUB_PENDING || !(jb->subscription & JABBER_SUB_TO))) { |
2181 if(jb && !PURPLE_BUDDY_IS_ONLINE(b) && (jb->subscription & JABBER_SUB_PENDING || !(jb->subscription & JABBER_SUB_TO))) { |
| 2181 ret = g_strdup(_("Not Authorized")); |
2182 ret = g_strdup(_("Not Authorized")); |
| 2182 } else if(jb && !PURPLE_BUDDY_IS_ONLINE(b) && jb->error_msg) { |
2183 } else if(jb && !PURPLE_BUDDY_IS_ONLINE(b) && jb->error_msg) { |
| 2183 ret = g_strdup(jb->error_msg); |
2184 ret = g_strdup(jb->error_msg); |
| 2248 void jabber_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full) |
2249 void jabber_tooltip_text(PurpleBuddy *b, PurpleNotifyUserInfo *user_info, gboolean full) |
| 2249 { |
2250 { |
| 2250 JabberBuddy *jb; |
2251 JabberBuddy *jb; |
| 2251 PurpleAccount *account; |
2252 PurpleAccount *account; |
| 2252 PurpleConnection *gc; |
2253 PurpleConnection *gc; |
| |
2254 JabberStream *js; |
| 2253 |
2255 |
| 2254 g_return_if_fail(b != NULL); |
2256 g_return_if_fail(b != NULL); |
| 2255 |
2257 |
| 2256 account = purple_buddy_get_account(b); |
2258 account = purple_buddy_get_account(b); |
| 2257 g_return_if_fail(account != NULL); |
2259 g_return_if_fail(account != NULL); |
| 2258 |
2260 |
| 2259 gc = purple_account_get_connection(account); |
2261 gc = purple_account_get_connection(account); |
| 2260 g_return_if_fail(gc != NULL); |
2262 g_return_if_fail(gc != NULL); |
| 2261 g_return_if_fail(gc->proto_data != NULL); |
2263 |
| 2262 |
2264 js = purple_connection_get_protocol_data(gc); |
| 2263 jb = jabber_buddy_find(gc->proto_data, purple_buddy_get_name(b), FALSE); |
2265 g_return_if_fail(js != NULL); |
| |
2266 |
| |
2267 jb = jabber_buddy_find(js, purple_buddy_get_name(b), FALSE); |
| 2264 |
2268 |
| 2265 if(jb) { |
2269 if(jb) { |
| 2266 JabberBuddyResource *jbr = NULL; |
2270 JabberBuddyResource *jbr = NULL; |
| 2267 PurplePresence *presence = purple_buddy_get_presence(b); |
2271 PurplePresence *presence = purple_buddy_get_presence(b); |
| 2268 const char *sub; |
2272 const char *sub; |
| 2529 |
2533 |
| 2530 static void jabber_password_change(PurplePluginAction *action) |
2534 static void jabber_password_change(PurplePluginAction *action) |
| 2531 { |
2535 { |
| 2532 |
2536 |
| 2533 PurpleConnection *gc = (PurpleConnection *) action->context; |
2537 PurpleConnection *gc = (PurpleConnection *) action->context; |
| 2534 JabberStream *js = gc->proto_data; |
2538 JabberStream *js = purple_connection_get_protocol_data(gc); |
| 2535 PurpleRequestFields *fields; |
2539 PurpleRequestFields *fields; |
| 2536 PurpleRequestFieldGroup *group; |
2540 PurpleRequestFieldGroup *group; |
| 2537 PurpleRequestField *field; |
2541 PurpleRequestField *field; |
| 2538 |
2542 |
| 2539 fields = purple_request_fields_new(); |
2543 fields = purple_request_fields_new(); |
| 2561 } |
2565 } |
| 2562 |
2566 |
| 2563 GList *jabber_actions(PurplePlugin *plugin, gpointer context) |
2567 GList *jabber_actions(PurplePlugin *plugin, gpointer context) |
| 2564 { |
2568 { |
| 2565 PurpleConnection *gc = (PurpleConnection *) context; |
2569 PurpleConnection *gc = (PurpleConnection *) context; |
| 2566 JabberStream *js = gc->proto_data; |
2570 JabberStream *js = purple_connection_get_protocol_data(gc); |
| 2567 GList *m = NULL; |
2571 GList *m = NULL; |
| 2568 PurplePluginAction *act; |
2572 PurplePluginAction *act; |
| 2569 |
2573 |
| 2570 act = purple_plugin_action_new(_("Set User Info..."), |
2574 act = purple_plugin_action_new(_("Set User Info..."), |
| 2571 jabber_setup_set_info); |
2575 jabber_setup_set_info); |
| 3157 } |
3161 } |
| 3158 |
3162 |
| 3159 static PurpleCmdRet jabber_cmd_buzz(PurpleConversation *conv, |
3163 static PurpleCmdRet jabber_cmd_buzz(PurpleConversation *conv, |
| 3160 const char *cmd, char **args, char **error, void *data) |
3164 const char *cmd, char **args, char **error, void *data) |
| 3161 { |
3165 { |
| 3162 JabberStream *js = conv->account->gc->proto_data; |
3166 JabberStream *js = purple_connection_get_protocol_data(conv->account->gc); |
| 3163 const gchar *who; |
3167 const gchar *who; |
| 3164 gchar *description; |
3168 gchar *description; |
| 3165 PurpleBuddy *buddy; |
3169 PurpleBuddy *buddy; |
| 3166 const char *alias; |
3170 const char *alias; |
| 3167 PurpleAttentionType *attn = |
3171 PurpleAttentionType *attn = |
| 3204 return types; |
3208 return types; |
| 3205 } |
3209 } |
| 3206 |
3210 |
| 3207 gboolean jabber_send_attention(PurpleConnection *gc, const char *username, guint code) |
3211 gboolean jabber_send_attention(PurpleConnection *gc, const char *username, guint code) |
| 3208 { |
3212 { |
| 3209 JabberStream *js = gc->proto_data; |
3213 JabberStream *js = purple_connection_get_protocol_data(gc); |
| 3210 gchar *error = NULL; |
3214 gchar *error = NULL; |
| 3211 |
3215 |
| 3212 if (!_jabber_send_buzz(js, username, &error)) { |
3216 if (!_jabber_send_buzz(js, username, &error)) { |
| 3213 PurpleAccount *account = purple_connection_get_account(gc); |
3217 PurpleAccount *account = purple_connection_get_account(gc); |
| 3214 PurpleConversation *conv = |
3218 PurpleConversation *conv = |
| 3287 gboolean |
3291 gboolean |
| 3288 jabber_initiate_media(PurpleAccount *account, const char *who, |
3292 jabber_initiate_media(PurpleAccount *account, const char *who, |
| 3289 PurpleMediaSessionType type) |
3293 PurpleMediaSessionType type) |
| 3290 { |
3294 { |
| 3291 #ifdef USE_VV |
3295 #ifdef USE_VV |
| 3292 JabberStream *js = (JabberStream *) |
3296 PurpleConnection *gc = purple_account_get_connection(account); |
| 3293 purple_account_get_connection(account)->proto_data; |
3297 JabberStream *js = purple_connection_get_protocol_data(gc); |
| 3294 JabberBuddy *jb; |
3298 JabberBuddy *jb; |
| 3295 JabberBuddyResource *jbr = NULL; |
3299 JabberBuddyResource *jbr = NULL; |
| 3296 char *resource; |
3300 char *resource; |
| 3297 |
3301 |
| 3298 if (!js) { |
3302 if (!js) { |
| 3299 purple_debug_error("jabber", |
3303 purple_debug_error("jabber", |
| 3300 "jabber_initiate_media: NULL stream\n"); |
3304 "jabber_initiate_media: NULL stream\n"); |
| 3301 return FALSE; |
3305 return FALSE; |
| 3302 } |
3306 } |
| 3303 |
|
| 3304 |
3307 |
| 3305 if((resource = jabber_get_resource(who)) != NULL) { |
3308 if((resource = jabber_get_resource(who)) != NULL) { |
| 3306 /* they've specified a resource, no need to ask or |
3309 /* they've specified a resource, no need to ask or |
| 3307 * default or anything, just do it */ |
3310 * default or anything, just do it */ |
| 3308 |
3311 |
| 3430 } |
3433 } |
| 3431 |
3434 |
| 3432 PurpleMediaCaps jabber_get_media_caps(PurpleAccount *account, const char *who) |
3435 PurpleMediaCaps jabber_get_media_caps(PurpleAccount *account, const char *who) |
| 3433 { |
3436 { |
| 3434 #ifdef USE_VV |
3437 #ifdef USE_VV |
| 3435 JabberStream *js = (JabberStream *) |
3438 PurpleConnection *gc = purple_account_get_connection(account); |
| 3436 purple_account_get_connection(account)->proto_data; |
3439 JabberStream *js = purple_connection_get_protocol_data(gc); |
| 3437 JabberBuddy *jb; |
3440 JabberBuddy *jb; |
| 3438 JabberBuddyResource *jbr; |
3441 JabberBuddyResource *jbr; |
| 3439 PurpleMediaCaps total = PURPLE_MEDIA_CAPS_NONE; |
3442 PurpleMediaCaps total = PURPLE_MEDIA_CAPS_NONE; |
| 3440 gchar *resource; |
3443 gchar *resource; |
| 3441 GList *specific = NULL, *l; |
3444 GList *specific = NULL, *l; |
| 3519 #endif |
3522 #endif |
| 3520 } |
3523 } |
| 3521 |
3524 |
| 3522 gboolean jabber_can_receive_file(PurpleConnection *gc, const char *who) |
3525 gboolean jabber_can_receive_file(PurpleConnection *gc, const char *who) |
| 3523 { |
3526 { |
| 3524 JabberStream *js = gc->proto_data; |
3527 JabberStream *js = purple_connection_get_protocol_data(gc); |
| 3525 |
3528 |
| 3526 if (js) { |
3529 if (js) { |
| 3527 JabberBuddy *jb = jabber_buddy_find(js, who, FALSE); |
3530 JabberBuddy *jb = jabber_buddy_find(js, who, FALSE); |
| 3528 GList *iter; |
3531 GList *iter; |
| 3529 gboolean has_resources_without_caps = FALSE; |
3532 gboolean has_resources_without_caps = FALSE; |
| 3569 |
3572 |
| 3570 static PurpleCmdRet |
3573 static PurpleCmdRet |
| 3571 jabber_cmd_mood(PurpleConversation *conv, |
3574 jabber_cmd_mood(PurpleConversation *conv, |
| 3572 const char *cmd, char **args, char **error, void *data) |
3575 const char *cmd, char **args, char **error, void *data) |
| 3573 { |
3576 { |
| 3574 JabberStream *js = conv->account->gc->proto_data; |
3577 JabberStream *js = purple_connection_get_protocol_data(conv->account->gc); |
| 3575 |
3578 |
| 3576 if (js->pep) { |
3579 if (js->pep) { |
| 3577 /* if no argument was given, unset mood */ |
3580 /* if no argument was given, unset mood */ |
| 3578 if (!args || !args[0]) { |
3581 if (!args || !args[0]) { |
| 3579 jabber_mood_set(js, NULL, NULL); |
3582 jabber_mood_set(js, NULL, NULL); |
| 3753 JabberBuddyResource *jbr; |
3756 JabberBuddyResource *jbr; |
| 3754 gchar *resource; |
3757 gchar *resource; |
| 3755 |
3758 |
| 3756 if (!purple_account_is_connected(account)) |
3759 if (!purple_account_is_connected(account)) |
| 3757 return FALSE; |
3760 return FALSE; |
| 3758 js = gc->proto_data; |
3761 js = purple_connection_get_protocol_data(gc); |
| 3759 |
3762 |
| 3760 if (!(resource = jabber_get_resource(jid)) || |
3763 if (!(resource = jabber_get_resource(jid)) || |
| 3761 !(jb = jabber_buddy_find(js, jid, FALSE)) || |
3764 !(jb = jabber_buddy_find(js, jid, FALSE)) || |
| 3762 !(jbr = jabber_buddy_find_resource(jb, resource))) { |
3765 !(jbr = jabber_buddy_find_resource(jb, resource))) { |
| 3763 g_free(resource); |
3766 g_free(resource); |