Wed, 13 May 2009 20:29:03 +0000
Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.
| 15225 | 1 | /** |
| 15884 | 2 | * Purple is the legal property of its developers, whose names are too numerous |
| 15225 | 3 | * to list here. Please refer to the COPYRIGHT file distributed with this |
| 4 | * source distribution. | |
| 5 | * | |
| 6 | * This program is free software; you can redistribute it and/or modify | |
| 7 | * it under the terms of the GNU General Public License as published by | |
| 8 | * the Free Software Foundation; either version 2 of the License, or | |
| 9 | * (at your option) any later version. | |
| 10 | * | |
| 11 | * This program is distributed in the hope that it will be useful, | |
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 | * GNU General Public License for more details. | |
| 15 | * | |
| 16 | * You should have received a copy of the GNU General Public License | |
| 17 | * along with this program; if not, write to the Free Software | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19046
diff
changeset
|
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 15225 | 19 | */ |
| 20 | ||
| 21 | #include "internal.h" | |
| 22 | #include "debug.h" | |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
23 | #include "mediamanager.h" |
|
15587
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
24 | #include "util.h" |
| 15265 | 25 | #include "privacy.h" |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
26 | #include "dnsquery.h" |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
27 | #include "network.h" |
| 15265 | 28 | |
| 29 | #include "buddy.h" | |
| 15225 | 30 | #include "google.h" |
| 31 | #include "jabber.h" | |
| 15265 | 32 | #include "presence.h" |
| 15225 | 33 | #include "iq.h" |
| 34 | ||
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
35 | #include "jingle/jingle.h" |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
36 | |
|
23704
9b88c9b23aed
Use USE_VV instead of USE_FARSIGHT.
Michael Ruprecht <maiku@pidgin.im>
parents:
23700
diff
changeset
|
37 | #ifdef USE_VV |
|
23700
e47be56bdd2b
Fix compiling with the --disable-vv switch.
Michael Ruprecht <maiku@pidgin.im>
parents:
23697
diff
changeset
|
38 | |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
39 | typedef struct { |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
40 | char *id; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
41 | char *initiator; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
42 | } GoogleSessionId; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
43 | |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
44 | typedef enum { |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
45 | UNINIT, |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
46 | SENT_INITIATE, |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
47 | RECEIVED_INITIATE, |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
48 | IN_PRORESS, |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
49 | TERMINATED |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
50 | } GoogleSessionState; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
51 | |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
52 | typedef struct { |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
53 | GoogleSessionId id; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
54 | GoogleSessionState state; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
55 | PurpleMedia *media; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
56 | JabberStream *js; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
57 | char *remote_jid; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
58 | } GoogleSession; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
59 | |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
60 | static gboolean |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
61 | google_session_id_equal(gconstpointer a, gconstpointer b) |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
62 | { |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
63 | GoogleSessionId *c = (GoogleSessionId*)a; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
64 | GoogleSessionId *d = (GoogleSessionId*)b; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
65 | |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
66 | return !strcmp(c->id, d->id) && !strcmp(c->initiator, d->initiator); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
67 | } |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
68 | |
|
19885
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
69 | static void |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
70 | google_session_destroy(GoogleSession *session) |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
71 | { |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
72 | g_free(session->id.id); |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
73 | g_free(session->id.initiator); |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
74 | g_free(session->remote_jid); |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
75 | g_free(session); |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
76 | } |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
77 | |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
78 | static xmlnode * |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
79 | google_session_create_xmlnode(GoogleSession *session, const char *type) |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
80 | { |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
81 | xmlnode *node = xmlnode_new("session"); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
82 | xmlnode_set_namespace(node, "http://www.google.com/session"); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
83 | xmlnode_set_attrib(node, "id", session->id.id); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
84 | xmlnode_set_attrib(node, "initiator", session->id.initiator); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
85 | xmlnode_set_attrib(node, "type", type); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
86 | return node; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
87 | } |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
88 | |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
89 | static void |
|
19885
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
90 | google_session_send_terminate(GoogleSession *session) |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
91 | { |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
92 | xmlnode *sess; |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
93 | JabberIq *iq = jabber_iq_new(session->js, JABBER_IQ_SET); |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
94 | |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
95 | xmlnode_set_attrib(iq->node, "to", session->remote_jid); |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
96 | sess = google_session_create_xmlnode(session, "terminate"); |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
97 | xmlnode_insert_child(iq->node, sess); |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
98 | |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
99 | jabber_iq_send(iq); |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
100 | google_session_destroy(session); |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
101 | } |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
102 | |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
103 | static void |
|
26239
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
104 | google_session_send_candidates(PurpleMedia *media, gchar *session_id, |
|
26164
20f15fbe9b21
Very basic receive only GTalk audio sessions.
Michael Ruprecht <maiku@pidgin.im>
parents:
26160
diff
changeset
|
105 | gchar *participant, GoogleSession *session) |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
106 | { |
|
23721
15285d082f6c
Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents:
23704
diff
changeset
|
107 | GList *candidates = purple_media_get_local_candidates(session->media, "google-voice", |
|
15285d082f6c
Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents:
23704
diff
changeset
|
108 | session->remote_jid); |
|
26229
3e786c9ebb62
Duplicate FsCandidate to remove it from the public interface.
Michael Ruprecht <maiku@pidgin.im>
parents:
26223
diff
changeset
|
109 | PurpleMediaCandidate *transport; |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
110 | |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
111 | for (;candidates;candidates = candidates->next) { |
|
26485
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
112 | JabberIq *iq; |
|
26620
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
113 | gchar *ip, *port, *pref, *username, *password; |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
114 | PurpleMediaCandidateType type; |
|
26485
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
115 | xmlnode *sess; |
|
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
116 | xmlnode *candidate; |
|
26229
3e786c9ebb62
Duplicate FsCandidate to remove it from the public interface.
Michael Ruprecht <maiku@pidgin.im>
parents:
26223
diff
changeset
|
117 | transport = (PurpleMediaCandidate*)(candidates->data); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
118 | |
|
26620
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
119 | if (purple_media_candidate_get_component_id(transport) |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
120 | != PURPLE_MEDIA_COMPONENT_RTP) |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
121 | continue; |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
122 | |
|
26485
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
123 | iq = jabber_iq_new(session->js, JABBER_IQ_SET); |
|
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
124 | sess = google_session_create_xmlnode(session, "candidates"); |
|
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
125 | xmlnode_insert_child(iq->node, sess); |
|
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
126 | xmlnode_set_attrib(iq->node, "to", session->remote_jid); |
|
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
127 | |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
128 | candidate = xmlnode_new("candidate"); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
129 | |
|
26620
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
130 | ip = purple_media_candidate_get_ip(transport); |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
131 | port = g_strdup_printf("%d", |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
132 | purple_media_candidate_get_port(transport)); |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
133 | pref = g_strdup_printf("%f", |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
134 | purple_media_candidate_get_priority(transport) |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
135 | /1000.0); |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
136 | username = purple_media_candidate_get_username(transport); |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
137 | password = purple_media_candidate_get_password(transport); |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
138 | type = purple_media_candidate_get_candidate_type(transport); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
139 | |
|
26620
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
140 | xmlnode_set_attrib(candidate, "address", ip); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
141 | xmlnode_set_attrib(candidate, "port", port); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
142 | xmlnode_set_attrib(candidate, "name", "rtp"); |
|
26620
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
143 | xmlnode_set_attrib(candidate, "username", username); |
|
26201
32baf68eeedd
Fix receiving voice calls from Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26199
diff
changeset
|
144 | /* |
|
32baf68eeedd
Fix receiving voice calls from Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26199
diff
changeset
|
145 | * As of this writing, Farsight 2 in Google compatibility |
|
32baf68eeedd
Fix receiving voice calls from Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26199
diff
changeset
|
146 | * mode doesn't provide a password. The Gmail client |
|
32baf68eeedd
Fix receiving voice calls from Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26199
diff
changeset
|
147 | * requires this to be set. |
|
32baf68eeedd
Fix receiving voice calls from Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26199
diff
changeset
|
148 | */ |
|
32baf68eeedd
Fix receiving voice calls from Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26199
diff
changeset
|
149 | xmlnode_set_attrib(candidate, "password", |
|
26620
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
150 | password != NULL ? password : ""); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
151 | xmlnode_set_attrib(candidate, "preference", pref); |
|
26620
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
152 | xmlnode_set_attrib(candidate, "protocol", |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
153 | purple_media_candidate_get_protocol(transport) |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
154 | == PURPLE_MEDIA_NETWORK_PROTOCOL_UDP ? |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
155 | "udp" : "tcp"); |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
156 | xmlnode_set_attrib(candidate, "type", type == |
|
26229
3e786c9ebb62
Duplicate FsCandidate to remove it from the public interface.
Michael Ruprecht <maiku@pidgin.im>
parents:
26223
diff
changeset
|
157 | PURPLE_MEDIA_CANDIDATE_TYPE_HOST ? "local" : |
|
26620
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
158 | type == |
|
26229
3e786c9ebb62
Duplicate FsCandidate to remove it from the public interface.
Michael Ruprecht <maiku@pidgin.im>
parents:
26223
diff
changeset
|
159 | PURPLE_MEDIA_CANDIDATE_TYPE_SRFLX ? "stun" : |
|
26620
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
160 | type == |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
161 | PURPLE_MEDIA_CANDIDATE_TYPE_RELAY ? "relay" : |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
162 | NULL); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
163 | xmlnode_set_attrib(candidate, "generation", "0"); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
164 | xmlnode_set_attrib(candidate, "network", "0"); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
165 | xmlnode_insert_child(sess, candidate); |
|
26485
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
166 | |
|
26620
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
167 | g_free(ip); |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
168 | g_free(port); |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
169 | g_free(pref); |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
170 | g_free(username); |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
171 | g_free(password); |
|
a34fb2386da5
Hide and GObjectify PurpleMediaCandidate.
Michael Ruprecht <maiku@pidgin.im>
parents:
26618
diff
changeset
|
172 | |
|
26485
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
173 | jabber_iq_send(iq); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
174 | } |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
175 | } |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
176 | |
|
19885
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
177 | static void |
|
26434
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
178 | google_session_ready(GoogleSession *session) |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
179 | { |
|
26434
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
180 | PurpleMedia *media = session->media; |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
181 | if (purple_media_codecs_ready(media, NULL) && |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
182 | purple_media_candidates_prepared(media, NULL, NULL)) { |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
183 | gchar *me = g_strdup_printf("%s@%s/%s", |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
184 | session->js->user->node, |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
185 | session->js->user->domain, |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
186 | session->js->user->resource); |
|
26434
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
187 | JabberIq *iq; |
|
26239
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
188 | xmlnode *sess, *desc, *payload; |
|
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
189 | GList *codecs, *iter; |
|
26434
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
190 | gboolean is_initiator = !strcmp(session->id.initiator, me); |
|
26239
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
191 | |
|
26434
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
192 | if (!is_initiator && |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
193 | !purple_media_accepted(media, NULL, NULL)) { |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
194 | g_free(me); |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
195 | return; |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
196 | } |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
197 | |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
198 | iq = jabber_iq_new(session->js, JABBER_IQ_SET); |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
199 | |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
200 | if (is_initiator) { |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
201 | xmlnode_set_attrib(iq->node, "to", session->remote_jid); |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
202 | xmlnode_set_attrib(iq->node, "from", session->id.initiator); |
|
26239
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
203 | sess = google_session_create_xmlnode(session, "initiate"); |
|
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
204 | } else { |
|
26485
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
205 | google_session_send_candidates(session->media, |
|
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
206 | "google-voice", session->remote_jid, |
|
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
207 | session); |
|
26239
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
208 | xmlnode_set_attrib(iq->node, "to", session->remote_jid); |
|
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
209 | xmlnode_set_attrib(iq->node, "from", me); |
|
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
210 | sess = google_session_create_xmlnode(session, "accept"); |
|
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
211 | } |
|
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
212 | xmlnode_insert_child(iq->node, sess); |
|
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
213 | desc = xmlnode_new_child(sess, "description"); |
|
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
214 | xmlnode_set_namespace(desc, "http://www.google.com/session/phone"); |
|
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
215 | |
|
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
216 | codecs = purple_media_get_codecs(media, "google-voice"); |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
217 | |
|
26239
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
218 | for (iter = codecs; iter; iter = g_list_next(iter)) { |
|
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
219 | PurpleMediaCodec *codec = (PurpleMediaCodec*)iter->data; |
|
26618
9e9e610ca1a1
Hide and gobjectify PurpleMediaCodec.
Michael Ruprecht <maiku@pidgin.im>
parents:
26514
diff
changeset
|
220 | gchar *id = g_strdup_printf("%d", |
|
9e9e610ca1a1
Hide and gobjectify PurpleMediaCodec.
Michael Ruprecht <maiku@pidgin.im>
parents:
26514
diff
changeset
|
221 | purple_media_codec_get_id(codec)); |
|
9e9e610ca1a1
Hide and gobjectify PurpleMediaCodec.
Michael Ruprecht <maiku@pidgin.im>
parents:
26514
diff
changeset
|
222 | gchar *encoding_name = |
|
9e9e610ca1a1
Hide and gobjectify PurpleMediaCodec.
Michael Ruprecht <maiku@pidgin.im>
parents:
26514
diff
changeset
|
223 | purple_media_codec_get_encoding_name(codec); |
|
9e9e610ca1a1
Hide and gobjectify PurpleMediaCodec.
Michael Ruprecht <maiku@pidgin.im>
parents:
26514
diff
changeset
|
224 | gchar *clock_rate = g_strdup_printf("%d", |
|
9e9e610ca1a1
Hide and gobjectify PurpleMediaCodec.
Michael Ruprecht <maiku@pidgin.im>
parents:
26514
diff
changeset
|
225 | purple_media_codec_get_clock_rate(codec)); |
|
26239
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
226 | payload = xmlnode_new_child(desc, "payload-type"); |
|
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
227 | xmlnode_set_attrib(payload, "id", id); |
|
26618
9e9e610ca1a1
Hide and gobjectify PurpleMediaCodec.
Michael Ruprecht <maiku@pidgin.im>
parents:
26514
diff
changeset
|
228 | xmlnode_set_attrib(payload, "name", encoding_name); |
|
26239
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
229 | xmlnode_set_attrib(payload, "clockrate", clock_rate); |
|
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
230 | g_free(clock_rate); |
|
26618
9e9e610ca1a1
Hide and gobjectify PurpleMediaCodec.
Michael Ruprecht <maiku@pidgin.im>
parents:
26514
diff
changeset
|
231 | g_free(encoding_name); |
|
26239
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
232 | g_free(id); |
|
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
233 | } |
|
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
234 | purple_media_codec_list_free(codecs); |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
235 | |
|
26239
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
236 | jabber_iq_send(iq); |
|
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
237 | |
|
26485
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
238 | if (is_initiator) |
|
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
239 | google_session_send_candidates(session->media, |
|
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
240 | "google-voice", session->remote_jid, |
|
df2f8d35564b
Send candidates more like GMail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26484
diff
changeset
|
241 | session); |
|
26438
786a8c41d80f
Don't let initiate or accept be sent again with Google Voice.
Michael Ruprecht <maiku@pidgin.im>
parents:
26434
diff
changeset
|
242 | |
|
786a8c41d80f
Don't let initiate or accept be sent again with Google Voice.
Michael Ruprecht <maiku@pidgin.im>
parents:
26434
diff
changeset
|
243 | g_signal_handlers_disconnect_by_func(G_OBJECT(session->media), |
|
786a8c41d80f
Don't let initiate or accept be sent again with Google Voice.
Michael Ruprecht <maiku@pidgin.im>
parents:
26434
diff
changeset
|
244 | G_CALLBACK(google_session_ready), session); |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
245 | } |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
246 | } |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
247 | |
|
26238
544a16676559
Use the state-changed signal in GTalk code.
Michael Ruprecht <maiku@pidgin.im>
parents:
26232
diff
changeset
|
248 | static void |
|
26449
9e381dc6ed24
Rename state-changed enum and values.
Michael Ruprecht <maiku@pidgin.im>
parents:
26443
diff
changeset
|
249 | google_session_state_changed_cb(PurpleMedia *media, PurpleMediaState state, |
|
26238
544a16676559
Use the state-changed signal in GTalk code.
Michael Ruprecht <maiku@pidgin.im>
parents:
26232
diff
changeset
|
250 | gchar *sid, gchar *name, GoogleSession *session) |
|
544a16676559
Use the state-changed signal in GTalk code.
Michael Ruprecht <maiku@pidgin.im>
parents:
26232
diff
changeset
|
251 | { |
|
544a16676559
Use the state-changed signal in GTalk code.
Michael Ruprecht <maiku@pidgin.im>
parents:
26232
diff
changeset
|
252 | if (sid == NULL && name == NULL) { |
|
26449
9e381dc6ed24
Rename state-changed enum and values.
Michael Ruprecht <maiku@pidgin.im>
parents:
26443
diff
changeset
|
253 | if (state == PURPLE_MEDIA_STATE_END) { |
|
26238
544a16676559
Use the state-changed signal in GTalk code.
Michael Ruprecht <maiku@pidgin.im>
parents:
26232
diff
changeset
|
254 | google_session_destroy(session); |
|
26442
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
255 | } |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
256 | } |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
257 | } |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
258 | |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
259 | static void |
|
26443
511064e5b314
Use the right enum for the parameter.
Michael Ruprecht <maiku@pidgin.im>
parents:
26442
diff
changeset
|
260 | google_session_stream_info_cb(PurpleMedia *media, PurpleMediaInfoType type, |
|
26496
11e1e5221460
Create purple_media_stream_info. Add local parameter to stream-info signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26495
diff
changeset
|
261 | gchar *sid, gchar *name, gboolean local, |
|
11e1e5221460
Create purple_media_stream_info. Add local parameter to stream-info signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26495
diff
changeset
|
262 | GoogleSession *session) |
|
26442
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
263 | { |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
264 | if (type == PURPLE_MEDIA_INFO_HANGUP) { |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
265 | xmlnode *sess; |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
266 | JabberIq *iq = jabber_iq_new(session->js, JABBER_IQ_SET); |
|
26238
544a16676559
Use the state-changed signal in GTalk code.
Michael Ruprecht <maiku@pidgin.im>
parents:
26232
diff
changeset
|
267 | |
|
26442
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
268 | xmlnode_set_attrib(iq->node, "to", session->remote_jid); |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
269 | sess = google_session_create_xmlnode(session, "terminate"); |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
270 | xmlnode_insert_child(iq->node, sess); |
|
26238
544a16676559
Use the state-changed signal in GTalk code.
Michael Ruprecht <maiku@pidgin.im>
parents:
26232
diff
changeset
|
271 | |
|
26442
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
272 | jabber_iq_send(iq); |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
273 | } else if (type == PURPLE_MEDIA_INFO_REJECT) { |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
274 | xmlnode *sess; |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
275 | JabberIq *iq = jabber_iq_new(session->js, JABBER_IQ_SET); |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
276 | |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
277 | xmlnode_set_attrib(iq->node, "to", session->remote_jid); |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
278 | sess = google_session_create_xmlnode(session, "reject"); |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
279 | xmlnode_insert_child(iq->node, sess); |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
280 | |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
281 | jabber_iq_send(iq); |
|
26238
544a16676559
Use the state-changed signal in GTalk code.
Michael Ruprecht <maiku@pidgin.im>
parents:
26232
diff
changeset
|
282 | } |
|
544a16676559
Use the state-changed signal in GTalk code.
Michael Ruprecht <maiku@pidgin.im>
parents:
26232
diff
changeset
|
283 | } |
|
544a16676559
Use the state-changed signal in GTalk code.
Michael Ruprecht <maiku@pidgin.im>
parents:
26232
diff
changeset
|
284 | |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
285 | static GParameter * |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
286 | jabber_google_session_get_params(JabberStream *js, guint *num) |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
287 | { |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
288 | guint num_params; |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
289 | GParameter *params = jingle_get_params(js, &num_params); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
290 | GParameter *new_params = g_new0(GParameter, num_params + 1); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
291 | |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
292 | memcpy(new_params, params, sizeof(GParameter) * num_params); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
293 | |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
294 | purple_debug_info("jabber", "setting Google jingle compatibility param\n"); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
295 | new_params[num_params].name = "compatibility-mode"; |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
296 | g_value_init(&new_params[num_params].value, G_TYPE_UINT); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
297 | g_value_set_uint(&new_params[num_params].value, 1); /* NICE_COMPATIBILITY_GOOGLE */ |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
298 | |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
299 | g_free(params); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
300 | *num = num_params + 1; |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
301 | return new_params; |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
302 | } |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
303 | |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
304 | |
|
26495
52846ebe1c7d
Don't assume a PurpleMedia instance will be created immediately.
Michael Ruprecht <maiku@pidgin.im>
parents:
26485
diff
changeset
|
305 | gboolean |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
306 | jabber_google_session_initiate(JabberStream *js, const gchar *who, PurpleMediaSessionType type) |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
307 | { |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
308 | GoogleSession *session; |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
309 | JabberBuddy *jb; |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
310 | JabberBuddyResource *jbr; |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
311 | gchar *jid; |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
312 | GParameter *params; |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
313 | guint num_params; |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
314 | |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
315 | /* construct JID to send to */ |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
316 | jb = jabber_buddy_find(js, who, FALSE); |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
317 | if (!jb) { |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
318 | purple_debug_error("jingle-rtp", |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
319 | "Could not find Jabber buddy\n"); |
|
26495
52846ebe1c7d
Don't assume a PurpleMedia instance will be created immediately.
Michael Ruprecht <maiku@pidgin.im>
parents:
26485
diff
changeset
|
320 | return FALSE; |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
321 | } |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
322 | jbr = jabber_buddy_find_resource(jb, NULL); |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
323 | if (!jbr) { |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
324 | purple_debug_error("jingle-rtp", |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
325 | "Could not find buddy's resource\n"); |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
326 | } |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
327 | |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
328 | if ((strchr(who, '/') == NULL) && jbr && (jbr->name != NULL)) { |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
329 | jid = g_strdup_printf("%s/%s", who, jbr->name); |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
330 | } else { |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
331 | jid = g_strdup(who); |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
332 | } |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
333 | |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
334 | session = g_new0(GoogleSession, 1); |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
335 | session->id.id = jabber_get_next_id(js); |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
336 | session->id.initiator = g_strdup_printf("%s@%s/%s", js->user->node, |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
337 | js->user->domain, js->user->resource); |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
338 | session->state = SENT_INITIATE; |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
339 | session->js = js; |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
340 | session->remote_jid = jid; |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
341 | |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
342 | session->media = purple_media_manager_create_media( |
|
26746
2a2d45ac9774
Switch media to store accounts rather than connections.
Michael Ruprecht <maiku@pidgin.im>
parents:
26698
diff
changeset
|
343 | purple_media_manager_get(), |
|
2a2d45ac9774
Switch media to store accounts rather than connections.
Michael Ruprecht <maiku@pidgin.im>
parents:
26698
diff
changeset
|
344 | purple_connection_get_account(js->gc), |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
345 | "fsrtpconference", session->remote_jid, TRUE); |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
346 | |
|
26331
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
347 | purple_media_set_prpl_data(session->media, session); |
|
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
348 | |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
349 | params = jabber_google_session_get_params(js, &num_params); |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
350 | |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
351 | if (purple_media_add_stream(session->media, "google-voice", |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
352 | session->remote_jid, PURPLE_MEDIA_AUDIO, |
|
26514
058053cffc0e
Add purple_media_is_initiator.
Michael Ruprecht <maiku@pidgin.im>
parents:
26501
diff
changeset
|
353 | TRUE, "nice", num_params, params) == FALSE) { |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
354 | purple_media_error(session->media, "Error adding stream."); |
|
26499
759bf410db86
Remove purple_media_hangup.
Michael Ruprecht <maiku@pidgin.im>
parents:
26496
diff
changeset
|
355 | purple_media_stream_info(session->media, |
|
759bf410db86
Remove purple_media_hangup.
Michael Ruprecht <maiku@pidgin.im>
parents:
26496
diff
changeset
|
356 | PURPLE_MEDIA_INFO_HANGUP, NULL, NULL, TRUE); |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
357 | google_session_destroy(session); |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
358 | g_free(params); |
|
26495
52846ebe1c7d
Don't assume a PurpleMedia instance will be created immediately.
Michael Ruprecht <maiku@pidgin.im>
parents:
26485
diff
changeset
|
359 | return FALSE; |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
360 | } |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
361 | |
|
26434
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
362 | g_signal_connect_swapped(G_OBJECT(session->media), |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
363 | "candidates-prepared", |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
364 | G_CALLBACK(google_session_ready), session); |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
365 | g_signal_connect_swapped(G_OBJECT(session->media), "codecs-changed", |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
366 | G_CALLBACK(google_session_ready), session); |
|
26238
544a16676559
Use the state-changed signal in GTalk code.
Michael Ruprecht <maiku@pidgin.im>
parents:
26232
diff
changeset
|
367 | g_signal_connect(G_OBJECT(session->media), "state-changed", |
|
544a16676559
Use the state-changed signal in GTalk code.
Michael Ruprecht <maiku@pidgin.im>
parents:
26232
diff
changeset
|
368 | G_CALLBACK(google_session_state_changed_cb), session); |
|
26442
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
369 | g_signal_connect(G_OBJECT(session->media), "stream-info", |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
370 | G_CALLBACK(google_session_stream_info_cb), session); |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
371 | |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
372 | g_free(params); |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
373 | |
|
26495
52846ebe1c7d
Don't assume a PurpleMedia instance will be created immediately.
Michael Ruprecht <maiku@pidgin.im>
parents:
26485
diff
changeset
|
374 | return (session->media != NULL) ? TRUE : FALSE; |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
375 | } |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
376 | |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
377 | static void |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
378 | google_session_handle_initiate(JabberStream *js, GoogleSession *session, xmlnode *sess, const char *iq_id) |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
379 | { |
|
19885
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
380 | JabberIq *result; |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
381 | GList *codecs = NULL; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
382 | xmlnode *desc_element, *codec_element; |
|
26232
f91c96072586
Wrap FsCodec and remove the Farsight2 include from media.h.
Michael Ruprecht <maiku@pidgin.im>
parents:
26229
diff
changeset
|
383 | PurpleMediaCodec *codec; |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
384 | const char *id, *encoding_name, *clock_rate; |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
385 | GParameter *params; |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
386 | guint num_params; |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
387 | |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
388 | if (session->state != UNINIT) { |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
389 | purple_debug_error("jabber", "Received initiate for active session.\n"); |
|
23697
299bafcd8eb8
Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents:
22648
diff
changeset
|
390 | return; |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
391 | } |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
392 | |
|
26746
2a2d45ac9774
Switch media to store accounts rather than connections.
Michael Ruprecht <maiku@pidgin.im>
parents:
26698
diff
changeset
|
393 | session->media = purple_media_manager_create_media( |
|
2a2d45ac9774
Switch media to store accounts rather than connections.
Michael Ruprecht <maiku@pidgin.im>
parents:
26698
diff
changeset
|
394 | purple_media_manager_get(), |
|
2a2d45ac9774
Switch media to store accounts rather than connections.
Michael Ruprecht <maiku@pidgin.im>
parents:
26698
diff
changeset
|
395 | purple_connection_get_account(js->gc), |
|
2a2d45ac9774
Switch media to store accounts rather than connections.
Michael Ruprecht <maiku@pidgin.im>
parents:
26698
diff
changeset
|
396 | "fsrtpconference", session->remote_jid, FALSE); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
397 | |
|
26331
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
398 | purple_media_set_prpl_data(session->media, session); |
|
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
399 | |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
400 | params = jabber_google_session_get_params(js, &num_params); |
|
26164
20f15fbe9b21
Very basic receive only GTalk audio sessions.
Michael Ruprecht <maiku@pidgin.im>
parents:
26160
diff
changeset
|
401 | |
|
26514
058053cffc0e
Add purple_media_is_initiator.
Michael Ruprecht <maiku@pidgin.im>
parents:
26501
diff
changeset
|
402 | if (purple_media_add_stream(session->media, "google-voice", |
|
058053cffc0e
Add purple_media_is_initiator.
Michael Ruprecht <maiku@pidgin.im>
parents:
26501
diff
changeset
|
403 | session->remote_jid, PURPLE_MEDIA_AUDIO, FALSE, |
|
058053cffc0e
Add purple_media_is_initiator.
Michael Ruprecht <maiku@pidgin.im>
parents:
26501
diff
changeset
|
404 | "nice", num_params, params) == FALSE) { |
|
26199
a5530443b54d
End google call if stream creation fails.
Michael Ruprecht <maiku@pidgin.im>
parents:
26187
diff
changeset
|
405 | purple_media_error(session->media, "Error adding stream."); |
|
26499
759bf410db86
Remove purple_media_hangup.
Michael Ruprecht <maiku@pidgin.im>
parents:
26496
diff
changeset
|
406 | purple_media_stream_info(session->media, |
|
759bf410db86
Remove purple_media_hangup.
Michael Ruprecht <maiku@pidgin.im>
parents:
26496
diff
changeset
|
407 | PURPLE_MEDIA_INFO_HANGUP, NULL, NULL, TRUE); |
|
26199
a5530443b54d
End google call if stream creation fails.
Michael Ruprecht <maiku@pidgin.im>
parents:
26187
diff
changeset
|
408 | google_session_send_terminate(session); |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
409 | g_free(params); |
|
26199
a5530443b54d
End google call if stream creation fails.
Michael Ruprecht <maiku@pidgin.im>
parents:
26187
diff
changeset
|
410 | return; |
|
a5530443b54d
End google call if stream creation fails.
Michael Ruprecht <maiku@pidgin.im>
parents:
26187
diff
changeset
|
411 | } |
|
23697
299bafcd8eb8
Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents:
22648
diff
changeset
|
412 | |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
413 | g_free(params); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
414 | |
|
19885
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
415 | desc_element = xmlnode_get_child(sess, "description"); |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
416 | |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
417 | for (codec_element = xmlnode_get_child(desc_element, "payload-type"); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
418 | codec_element; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
419 | codec_element = xmlnode_get_next_twin(codec_element)) { |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
420 | encoding_name = xmlnode_get_attrib(codec_element, "name"); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
421 | id = xmlnode_get_attrib(codec_element, "id"); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
422 | clock_rate = xmlnode_get_attrib(codec_element, "clockrate"); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
423 | |
|
26981
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
424 | if (id) { |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
425 | codec = purple_media_codec_new(atoi(id), encoding_name, PURPLE_MEDIA_AUDIO, |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
426 | clock_rate ? atoi(clock_rate) : 0); |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
427 | codecs = g_list_append(codecs, codec); |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
428 | } |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
429 | } |
|
19885
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
430 | |
|
23721
15285d082f6c
Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents:
23704
diff
changeset
|
431 | purple_media_set_remote_codecs(session->media, "google-voice", session->remote_jid, codecs); |
|
19885
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
432 | |
|
26434
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
433 | g_signal_connect_swapped(G_OBJECT(session->media), "accepted", |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
434 | G_CALLBACK(google_session_ready), session); |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
435 | g_signal_connect_swapped(G_OBJECT(session->media), |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
436 | "candidates-prepared", |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
437 | G_CALLBACK(google_session_ready), session); |
|
46d8db20a062
Remove ready-new from use.
Michael Ruprecht <maiku@pidgin.im>
parents:
26337
diff
changeset
|
438 | g_signal_connect_swapped(G_OBJECT(session->media), "codecs-changed", |
|
26239
5c186583ab89
Convert the GTalk code to completely use the new ready signal.
Michael Ruprecht <maiku@pidgin.im>
parents:
26238
diff
changeset
|
439 | G_CALLBACK(google_session_ready), session); |
|
26238
544a16676559
Use the state-changed signal in GTalk code.
Michael Ruprecht <maiku@pidgin.im>
parents:
26232
diff
changeset
|
440 | g_signal_connect(G_OBJECT(session->media), "state-changed", |
|
544a16676559
Use the state-changed signal in GTalk code.
Michael Ruprecht <maiku@pidgin.im>
parents:
26232
diff
changeset
|
441 | G_CALLBACK(google_session_state_changed_cb), session); |
|
26442
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
442 | g_signal_connect(G_OBJECT(session->media), "stream-info", |
|
b68f5a57853a
Use stream-info instead of state-changed for hangup and reject.
Michael Ruprecht <maiku@pidgin.im>
parents:
26438
diff
changeset
|
443 | G_CALLBACK(google_session_stream_info_cb), session); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
444 | |
|
26232
f91c96072586
Wrap FsCodec and remove the Farsight2 include from media.h.
Michael Ruprecht <maiku@pidgin.im>
parents:
26229
diff
changeset
|
445 | purple_media_codec_list_free(codecs); |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
446 | |
|
19885
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
447 | result = jabber_iq_new(js, JABBER_IQ_RESULT); |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
448 | jabber_iq_set_id(result, iq_id); |
|
19885
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
449 | xmlnode_set_attrib(result->node, "to", session->remote_jid); |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
450 | jabber_iq_send(result); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
451 | } |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
452 | |
|
19885
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
453 | static void |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
454 | google_session_handle_candidates(JabberStream *js, GoogleSession *session, xmlnode *sess, const char *iq_id) |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
455 | { |
|
19885
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
456 | JabberIq *result; |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
457 | GList *list = NULL; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
458 | xmlnode *cand; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
459 | static int name = 0; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
460 | char n[4]; |
|
22648
e286d795c5f9
Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
22069
diff
changeset
|
461 | |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
462 | for (cand = xmlnode_get_child(sess, "candidate"); cand; cand = xmlnode_get_next_twin(cand)) { |
|
26229
3e786c9ebb62
Duplicate FsCandidate to remove it from the public interface.
Michael Ruprecht <maiku@pidgin.im>
parents:
26223
diff
changeset
|
463 | PurpleMediaCandidate *info; |
|
26981
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
464 | const gchar *type = xmlnode_get_attrib(cand, "type"); |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
465 | const gchar *protocol = xmlnode_get_attrib(cand, "protocol"); |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
466 | const gchar *address = xmlnode_get_attrib(cand, "address"); |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
467 | const gchar *port = xmlnode_get_attrib(cand, "port"); |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
468 | |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
469 | if (type && address && port) { |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
470 | PurpleMediaCandidateType candidate_type; |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
471 | |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
472 | g_snprintf(n, sizeof(n), "S%d", name++); |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
473 | |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
474 | if (g_str_equal(type, "local")) |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
475 | candidate_type = PURPLE_MEDIA_CANDIDATE_TYPE_HOST; |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
476 | else if (g_str_equal(type, "stun")) |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
477 | candidate_type = PURPLE_MEDIA_CANDIDATE_TYPE_PRFLX; |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
478 | else if (g_str_equal(type, "relay")) |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
479 | candidate_type = PURPLE_MEDIA_CANDIDATE_TYPE_RELAY; |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
480 | else |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
481 | candidate_type = PURPLE_MEDIA_CANDIDATE_TYPE_HOST; |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
482 | |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
483 | info = purple_media_candidate_new(n, PURPLE_MEDIA_COMPONENT_RTP, |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
484 | candidate_type, |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
485 | purple_strequal(protocol, "udp") ? |
|
26229
3e786c9ebb62
Duplicate FsCandidate to remove it from the public interface.
Michael Ruprecht <maiku@pidgin.im>
parents:
26223
diff
changeset
|
486 | PURPLE_MEDIA_NETWORK_PROTOCOL_UDP : |
|
3e786c9ebb62
Duplicate FsCandidate to remove it from the public interface.
Michael Ruprecht <maiku@pidgin.im>
parents:
26223
diff
changeset
|
487 | PURPLE_MEDIA_NETWORK_PROTOCOL_TCP, |
|
26981
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
488 | address, |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
489 | atoi(port)); |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
490 | g_object_set(info, "username", xmlnode_get_attrib(cand, "username"), |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
491 | "password", xmlnode_get_attrib(cand, "password"), NULL); |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
492 | list = g_list_append(list, info); |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
493 | } |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
494 | } |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
495 | |
|
23721
15285d082f6c
Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents:
23704
diff
changeset
|
496 | purple_media_add_remote_candidates(session->media, "google-voice", session->remote_jid, list); |
|
26229
3e786c9ebb62
Duplicate FsCandidate to remove it from the public interface.
Michael Ruprecht <maiku@pidgin.im>
parents:
26223
diff
changeset
|
497 | purple_media_candidate_list_free(list); |
|
19885
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
498 | |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
499 | result = jabber_iq_new(js, JABBER_IQ_RESULT); |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
500 | jabber_iq_set_id(result, iq_id); |
|
19885
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
501 | xmlnode_set_attrib(result->node, "to", session->remote_jid); |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
502 | jabber_iq_send(result); |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
503 | } |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
504 | |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
505 | static void |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
506 | google_session_handle_accept(JabberStream *js, GoogleSession *session, xmlnode *sess, const char *iq_id) |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
507 | { |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
508 | xmlnode *desc_element = xmlnode_get_child(sess, "description"); |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
509 | xmlnode *codec_element = xmlnode_get_child(desc_element, "payload-type"); |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
510 | GList *codecs = NULL; |
|
26484
131c5b5bcf61
Fix Gtalk bug where it would terminate the session after 15 seconds.
Michael Ruprecht <maiku@pidgin.im>
parents:
26454
diff
changeset
|
511 | JabberIq *result = NULL; |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
512 | |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
513 | for (; codec_element; codec_element = |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
514 | xmlnode_get_next_twin(codec_element)) { |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
515 | const gchar *encoding_name = |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
516 | xmlnode_get_attrib(codec_element, "name"); |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
517 | const gchar *id = xmlnode_get_attrib(codec_element, "id"); |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
518 | const gchar *clock_rate = |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
519 | xmlnode_get_attrib(codec_element, "clockrate"); |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
520 | |
|
26981
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
521 | if (id && encoding_name) { |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
522 | PurpleMediaCodec *codec = purple_media_codec_new(atoi(id), |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
523 | encoding_name, PURPLE_MEDIA_AUDIO, |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
524 | clock_rate ? atoi(clock_rate) : 0); |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
525 | codecs = g_list_append(codecs, codec); |
|
93f90b138e5f
Avoid crashing on some more atoi calls and ensure required parameters are !NULL
Paul Aurich <darkrain42@pidgin.im>
parents:
26782
diff
changeset
|
526 | } |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
527 | } |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
528 | |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
529 | purple_media_set_remote_codecs(session->media, "google-voice", |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
530 | session->remote_jid, codecs); |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
531 | |
|
26501
c186275f46aa
Remove purple_media_accept.
Michael Ruprecht <maiku@pidgin.im>
parents:
26499
diff
changeset
|
532 | purple_media_stream_info(session->media, PURPLE_MEDIA_INFO_ACCEPT, |
|
c186275f46aa
Remove purple_media_accept.
Michael Ruprecht <maiku@pidgin.im>
parents:
26499
diff
changeset
|
533 | NULL, NULL, FALSE); |
|
26484
131c5b5bcf61
Fix Gtalk bug where it would terminate the session after 15 seconds.
Michael Ruprecht <maiku@pidgin.im>
parents:
26454
diff
changeset
|
534 | |
|
131c5b5bcf61
Fix Gtalk bug where it would terminate the session after 15 seconds.
Michael Ruprecht <maiku@pidgin.im>
parents:
26454
diff
changeset
|
535 | result = jabber_iq_new(js, JABBER_IQ_RESULT); |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
536 | jabber_iq_set_id(result, iq_id); |
|
26484
131c5b5bcf61
Fix Gtalk bug where it would terminate the session after 15 seconds.
Michael Ruprecht <maiku@pidgin.im>
parents:
26454
diff
changeset
|
537 | xmlnode_set_attrib(result->node, "to", session->remote_jid); |
|
131c5b5bcf61
Fix Gtalk bug where it would terminate the session after 15 seconds.
Michael Ruprecht <maiku@pidgin.im>
parents:
26454
diff
changeset
|
538 | jabber_iq_send(result); |
|
26205
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
539 | } |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
540 | |
|
f20bb7e9e311
Support initiating voice calls to GTalk and Gmail.
Michael Ruprecht <maiku@pidgin.im>
parents:
26201
diff
changeset
|
541 | static void |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
542 | google_session_handle_reject(JabberStream *js, GoogleSession *session, xmlnode *sess) |
|
19885
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
543 | { |
|
26264
c062fc1f212f
Added purple_media_end and removed the purple_media_got_hangup.
Michael Ruprecht <maiku@pidgin.im>
parents:
26248
diff
changeset
|
544 | purple_media_end(session->media, NULL, NULL); |
|
19885
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
545 | } |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
546 | |
|
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
547 | static void |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
548 | google_session_handle_terminate(JabberStream *js, GoogleSession *session, xmlnode *sess) |
|
19885
593613a22e57
You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@pidgin.im>
parents:
19882
diff
changeset
|
549 | { |
|
26264
c062fc1f212f
Added purple_media_end and removed the purple_media_got_hangup.
Michael Ruprecht <maiku@pidgin.im>
parents:
26248
diff
changeset
|
550 | purple_media_end(session->media, NULL, NULL); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
551 | } |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
552 | |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
553 | static void |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
554 | google_session_parse_iq(JabberStream *js, GoogleSession *session, xmlnode *sess, const char *iq_id) |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
555 | { |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
556 | const char *type = xmlnode_get_attrib(sess, "type"); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
557 | |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
558 | if (!strcmp(type, "initiate")) { |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
559 | google_session_handle_initiate(js, session, sess, iq_id); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
560 | } else if (!strcmp(type, "accept")) { |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
561 | google_session_handle_accept(js, session, sess, iq_id); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
562 | } else if (!strcmp(type, "reject")) { |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
563 | google_session_handle_reject(js, session, sess); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
564 | } else if (!strcmp(type, "terminate")) { |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
565 | google_session_handle_terminate(js, session, sess); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
566 | } else if (!strcmp(type, "candidates")) { |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
567 | google_session_handle_candidates(js, session, sess, iq_id); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
568 | } |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
569 | } |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
570 | |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
571 | void |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
572 | jabber_google_session_parse(JabberStream *js, const char *from, |
|
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
573 | JabberIqType type, const char *iq_id, |
|
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
574 | xmlnode *session_node) |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
575 | { |
|
26331
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
576 | GoogleSession *session = NULL; |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
577 | GoogleSessionId id; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
578 | |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
579 | xmlnode *desc_node; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
580 | |
|
26331
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
581 | GList *iter = NULL; |
|
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
582 | |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
583 | if (type != JABBER_IQ_SET) |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
584 | return; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
585 | |
|
23697
299bafcd8eb8
Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents:
22648
diff
changeset
|
586 | id.id = (gchar*)xmlnode_get_attrib(session_node, "id"); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
587 | if (!id.id) |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
588 | return; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
589 | |
|
23697
299bafcd8eb8
Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents:
22648
diff
changeset
|
590 | id.initiator = (gchar*)xmlnode_get_attrib(session_node, "initiator"); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
591 | if (!id.initiator) |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
592 | return; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
593 | |
|
26746
2a2d45ac9774
Switch media to store accounts rather than connections.
Michael Ruprecht <maiku@pidgin.im>
parents:
26698
diff
changeset
|
594 | iter = purple_media_manager_get_media_by_account( |
|
2a2d45ac9774
Switch media to store accounts rather than connections.
Michael Ruprecht <maiku@pidgin.im>
parents:
26698
diff
changeset
|
595 | purple_media_manager_get(), |
|
2a2d45ac9774
Switch media to store accounts rather than connections.
Michael Ruprecht <maiku@pidgin.im>
parents:
26698
diff
changeset
|
596 | purple_connection_get_account(js->gc)); |
|
26331
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
597 | for (; iter; iter = g_list_delete_link(iter, iter)) { |
|
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
598 | GoogleSession *gsession = |
|
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
599 | purple_media_get_prpl_data(iter->data); |
|
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
600 | if (google_session_id_equal(&(gsession->id), &id)) { |
|
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
601 | session = gsession; |
|
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
602 | break; |
|
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
603 | } |
|
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
604 | } |
|
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
605 | if (iter != NULL) { |
|
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
606 | g_list_free(iter); |
|
d5ebef68c29d
Remove static sessions variable from google.c.
Michael Ruprecht <maiku@pidgin.im>
parents:
26286
diff
changeset
|
607 | } |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
608 | |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
609 | if (session) { |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
610 | google_session_parse_iq(js, session, session_node, iq_id); |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
611 | return; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
612 | } |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
613 | |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
614 | /* If the session doesn't exist, this has to be an initiate message */ |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
615 | if (strcmp(xmlnode_get_attrib(session_node, "type"), "initiate")) |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
616 | return; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
617 | desc_node = xmlnode_get_child(session_node, "description"); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
618 | if (!desc_node) |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
619 | return; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
620 | session = g_new0(GoogleSession, 1); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
621 | session->id.id = g_strdup(id.id); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
622 | session->id.initiator = g_strdup(id.initiator); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
623 | session->state = UNINIT; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
624 | session->js = js; |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
625 | session->remote_jid = g_strdup(session->id.initiator); |
|
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
626 | |
|
26698
417e1c82963b
And google session handling
Paul Aurich <darkrain42@pidgin.im>
parents:
26693
diff
changeset
|
627 | google_session_parse_iq(js, session, session_node, iq_id); |
|
26454
94130b583e0b
Clean up usage of USE_VV in the XMPP protocol.
Michael Ruprecht <maiku@pidgin.im>
parents:
26449
diff
changeset
|
628 | } |
|
23704
9b88c9b23aed
Use USE_VV instead of USE_FARSIGHT.
Michael Ruprecht <maiku@pidgin.im>
parents:
23700
diff
changeset
|
629 | #endif /* USE_VV */ |
|
19882
d8c2a2fc1fbf
Basic Google Talk voice call support. No UI; receiving a call auto-accepts it.
Sean Egan <seanegan@pidgin.im>
parents:
19046
diff
changeset
|
630 | |
| 18233 | 631 | static void |
|
26687
1e799151fabe
Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents:
26088
diff
changeset
|
632 | jabber_gmail_parse(JabberStream *js, const char *from, |
|
1e799151fabe
Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents:
26088
diff
changeset
|
633 | JabberIqType type, const char *id, |
|
1e799151fabe
Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents:
26088
diff
changeset
|
634 | xmlnode *packet, gpointer nul) |
| 15225 | 635 | { |
| 636 | xmlnode *child; | |
|
26687
1e799151fabe
Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents:
26088
diff
changeset
|
637 | xmlnode *message; |
|
1e799151fabe
Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents:
26088
diff
changeset
|
638 | const char *to, *url; |
| 15225 | 639 | const char *in_str; |
| 640 | char *to_name; | |
|
20097
f5bef80db09e
applied changes from 19e3744fd4b392cdc631c9efe0ce658537070713
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
641 | |
| 15225 | 642 | int i, count = 1, returned_count; |
| 18233 | 643 | |
| 18739 | 644 | const char **tos, **froms, **urls; |
| 645 | char **subjects; | |
| 18233 | 646 | |
|
26687
1e799151fabe
Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents:
26088
diff
changeset
|
647 | if (type == JABBER_IQ_ERROR) |
| 15225 | 648 | return; |
| 18233 | 649 | |
| 15225 | 650 | child = xmlnode_get_child(packet, "mailbox"); |
| 651 | if (!child) | |
| 652 | return; | |
| 653 | ||
| 654 | in_str = xmlnode_get_attrib(child, "total-matched"); | |
| 18233 | 655 | if (in_str && *in_str) |
| 15225 | 656 | count = atoi(in_str); |
| 18233 | 657 | |
|
20097
f5bef80db09e
applied changes from 19e3744fd4b392cdc631c9efe0ce658537070713
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
658 | /* If Gmail doesn't tell us who the mail is to, let's use our JID */ |
|
f5bef80db09e
applied changes from 19e3744fd4b392cdc631c9efe0ce658537070713
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
659 | to = xmlnode_get_attrib(packet, "to"); |
|
f5bef80db09e
applied changes from 19e3744fd4b392cdc631c9efe0ce658537070713
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
660 | |
|
20114
96e715e155e0
applied changes from 3fcc47961d378fa0cd4eeb00dc6923b16a3a4151
Richard Laager <rlaager@pidgin.im>
parents:
20107
diff
changeset
|
661 | message = xmlnode_get_child(child, "mail-thread-info"); |
| 15225 | 662 | |
|
20114
96e715e155e0
applied changes from 3fcc47961d378fa0cd4eeb00dc6923b16a3a4151
Richard Laager <rlaager@pidgin.im>
parents:
20107
diff
changeset
|
663 | if (count == 0 || !message) { |
|
27079
baa7cbe5775a
correctly NULL terminate all the arrays since that's what gtknotify assumes,
Ka-Hing Cheung <khc@pidgin.im>
parents:
27062
diff
changeset
|
664 | if (count > 0) { |
|
baa7cbe5775a
correctly NULL terminate all the arrays since that's what gtknotify assumes,
Ka-Hing Cheung <khc@pidgin.im>
parents:
27062
diff
changeset
|
665 | char *bare_jid = jabber_get_bare_jid(to); |
|
baa7cbe5775a
correctly NULL terminate all the arrays since that's what gtknotify assumes,
Ka-Hing Cheung <khc@pidgin.im>
parents:
27062
diff
changeset
|
666 | const char *default_tos[2] = { bare_jid }; |
|
baa7cbe5775a
correctly NULL terminate all the arrays since that's what gtknotify assumes,
Ka-Hing Cheung <khc@pidgin.im>
parents:
27062
diff
changeset
|
667 | |
|
baa7cbe5775a
correctly NULL terminate all the arrays since that's what gtknotify assumes,
Ka-Hing Cheung <khc@pidgin.im>
parents:
27062
diff
changeset
|
668 | purple_notify_emails(js->gc, count, FALSE, NULL, NULL, default_tos, NULL, NULL, NULL); |
|
baa7cbe5775a
correctly NULL terminate all the arrays since that's what gtknotify assumes,
Ka-Hing Cheung <khc@pidgin.im>
parents:
27062
diff
changeset
|
669 | g_free(bare_jid); |
|
baa7cbe5775a
correctly NULL terminate all the arrays since that's what gtknotify assumes,
Ka-Hing Cheung <khc@pidgin.im>
parents:
27062
diff
changeset
|
670 | } else { |
|
baa7cbe5775a
correctly NULL terminate all the arrays since that's what gtknotify assumes,
Ka-Hing Cheung <khc@pidgin.im>
parents:
27062
diff
changeset
|
671 | purple_notify_emails(js->gc, count, FALSE, NULL, NULL, NULL, NULL, NULL, NULL); |
|
baa7cbe5775a
correctly NULL terminate all the arrays since that's what gtknotify assumes,
Ka-Hing Cheung <khc@pidgin.im>
parents:
27062
diff
changeset
|
672 | } |
|
baa7cbe5775a
correctly NULL terminate all the arrays since that's what gtknotify assumes,
Ka-Hing Cheung <khc@pidgin.im>
parents:
27062
diff
changeset
|
673 | |
|
20097
f5bef80db09e
applied changes from 19e3744fd4b392cdc631c9efe0ce658537070713
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
674 | return; |
|
f5bef80db09e
applied changes from 19e3744fd4b392cdc631c9efe0ce658537070713
Richard Laager <rlaager@pidgin.im>
parents:
19859
diff
changeset
|
675 | } |
| 18233 | 676 | |
| 15225 | 677 | /* Loop once to see how many messages were returned so we can allocate arrays |
| 678 | * accordingly */ | |
| 679 | for (returned_count = 0; message; returned_count++, message=xmlnode_get_next_twin(message)); | |
| 18233 | 680 | |
|
27079
baa7cbe5775a
correctly NULL terminate all the arrays since that's what gtknotify assumes,
Ka-Hing Cheung <khc@pidgin.im>
parents:
27062
diff
changeset
|
681 | froms = g_new0(const char* , returned_count + 1); |
|
baa7cbe5775a
correctly NULL terminate all the arrays since that's what gtknotify assumes,
Ka-Hing Cheung <khc@pidgin.im>
parents:
27062
diff
changeset
|
682 | tos = g_new0(const char* , returned_count + 1); |
|
baa7cbe5775a
correctly NULL terminate all the arrays since that's what gtknotify assumes,
Ka-Hing Cheung <khc@pidgin.im>
parents:
27062
diff
changeset
|
683 | subjects = g_new0(char* , returned_count + 1); |
|
baa7cbe5775a
correctly NULL terminate all the arrays since that's what gtknotify assumes,
Ka-Hing Cheung <khc@pidgin.im>
parents:
27062
diff
changeset
|
684 | urls = g_new0(const char* , returned_count + 1); |
| 18233 | 685 | |
| 15225 | 686 | to = xmlnode_get_attrib(packet, "to"); |
| 687 | to_name = jabber_get_bare_jid(to); | |
| 688 | url = xmlnode_get_attrib(child, "url"); | |
| 689 | if (!url || !*url) | |
| 690 | url = "http://www.gmail.com"; | |
| 18233 | 691 | |
| 15225 | 692 | message= xmlnode_get_child(child, "mail-thread-info"); |
| 693 | for (i=0; message; message = xmlnode_get_next_twin(message), i++) { | |
|
26687
1e799151fabe
Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents:
26088
diff
changeset
|
694 | xmlnode *sender_node, *subject_node; |
|
1e799151fabe
Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents:
26088
diff
changeset
|
695 | const char *from, *tid; |
|
1e799151fabe
Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents:
26088
diff
changeset
|
696 | char *subject; |
|
1e799151fabe
Convert all the XMPP IQ callbacks to a typedef similar to the IQ Handlers.
Paul Aurich <darkrain42@pidgin.im>
parents:
26088
diff
changeset
|
697 | |
| 15225 | 698 | subject_node = xmlnode_get_child(message, "subject"); |
| 699 | sender_node = xmlnode_get_child(message, "senders"); | |
| 700 | sender_node = xmlnode_get_child(sender_node, "sender"); | |
| 701 | ||
| 18233 | 702 | while (sender_node && (!xmlnode_get_attrib(sender_node, "unread") || |
| 15225 | 703 | !strcmp(xmlnode_get_attrib(sender_node, "unread"),"0"))) |
| 704 | sender_node = xmlnode_get_next_twin(sender_node); | |
| 18233 | 705 | |
| 15225 | 706 | if (!sender_node) { |
| 707 | i--; | |
| 708 | continue; | |
| 709 | } | |
| 18233 | 710 | |
| 15225 | 711 | from = xmlnode_get_attrib(sender_node, "name"); |
| 712 | if (!from || !*from) | |
| 713 | from = xmlnode_get_attrib(sender_node, "address"); | |
| 714 | subject = xmlnode_get_data(subject_node); | |
| 715 | /* | |
| 716 | * url = xmlnode_get_attrib(message, "url"); | |
| 717 | */ | |
| 718 | tos[i] = (to_name != NULL ? to_name : ""); | |
| 719 | froms[i] = (from != NULL ? from : ""); | |
| 18739 | 720 | subjects[i] = (subject != NULL ? subject : g_strdup("")); |
|
20225
684334efdc19
applied changes from d4b316d73ebaf93803ca2642e78b8821c3b5d5c7
Luke Schierer <lschiere@pidgin.im>
parents:
20209
diff
changeset
|
721 | urls[i] = url; |
| 18233 | 722 | |
| 15225 | 723 | tid = xmlnode_get_attrib(message, "tid"); |
| 18233 | 724 | if (tid && |
| 15225 | 725 | (js->gmail_last_tid == NULL || strcmp(tid, js->gmail_last_tid) > 0)) { |
| 726 | g_free(js->gmail_last_tid); | |
| 727 | js->gmail_last_tid = g_strdup(tid); | |
| 728 | } | |
| 729 | } | |
| 730 | ||
| 18233 | 731 | if (i>0) |
|
18740
1b1f72624316
Only display the "detailed" email notifications for gtalk if we really have all the details to show. Fixes #1813.
Daniel Atallah <datallah@pidgin.im>
parents:
18739
diff
changeset
|
732 | purple_notify_emails(js->gc, count, count == i, (const char**) subjects, froms, tos, |
| 18233 | 733 | urls, NULL, NULL); |
| 15261 | 734 | |
| 15225 | 735 | g_free(to_name); |
| 736 | g_free(tos); | |
| 737 | g_free(froms); | |
|
27089
171a74c6fa72
used the wrong count variable here
Ka-Hing Cheung <khc@pidgin.im>
parents:
27083
diff
changeset
|
738 | for (i = 0; i < returned_count; i++) |
|
27079
baa7cbe5775a
correctly NULL terminate all the arrays since that's what gtknotify assumes,
Ka-Hing Cheung <khc@pidgin.im>
parents:
27062
diff
changeset
|
739 | g_free(subjects[i]); |
| 15225 | 740 | g_free(subjects); |
| 741 | g_free(urls); | |
| 742 | ||
| 743 | in_str = xmlnode_get_attrib(child, "result-time"); | |
| 744 | if (in_str && *in_str) { | |
| 745 | g_free(js->gmail_last_time); | |
| 746 | js->gmail_last_time = g_strdup(in_str); | |
| 747 | } | |
| 748 | } | |
| 749 | ||
| 18233 | 750 | void |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25566
diff
changeset
|
751 | jabber_gmail_poke(JabberStream *js, const char *from, JabberIqType type, |
|
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25566
diff
changeset
|
752 | const char *id, xmlnode *new_mail) |
| 15225 | 753 | { |
| 754 | xmlnode *query; | |
| 755 | JabberIq *iq; | |
| 18233 | 756 | |
| 15225 | 757 | /* bail if the user isn't interested */ |
| 15884 | 758 | if (!purple_account_get_check_mail(js->gc->account)) |
| 15225 | 759 | return; |
| 760 | ||
| 761 | /* Is this an initial incoming mail notification? If so, send a request for more info */ | |
|
25817
09d6a40a341d
Pass IQ handlers type, from, id, and the child node
Paul Aurich <darkrain42@pidgin.im>
parents:
25566
diff
changeset
|
762 | if (type != JABBER_IQ_SET) |
| 15225 | 763 | return; |
| 764 | ||
|
27062
84edb52aea5b
Ack the mail notification IQ. Refs #8240.
Paul Aurich <darkrain42@pidgin.im>
parents:
26981
diff
changeset
|
765 | /* Acknowledge the notification */ |
|
84edb52aea5b
Ack the mail notification IQ. Refs #8240.
Paul Aurich <darkrain42@pidgin.im>
parents:
26981
diff
changeset
|
766 | iq = jabber_iq_new(js, JABBER_IQ_RESULT); |
|
27081
51d62a0b66f9
Avoid an assertion when acking the gmail poke
Paul Aurich <darkrain42@pidgin.im>
parents:
27062
diff
changeset
|
767 | if (from) |
|
51d62a0b66f9
Avoid an assertion when acking the gmail poke
Paul Aurich <darkrain42@pidgin.im>
parents:
27062
diff
changeset
|
768 | xmlnode_set_attrib(iq->node, "to", from); |
|
27062
84edb52aea5b
Ack the mail notification IQ. Refs #8240.
Paul Aurich <darkrain42@pidgin.im>
parents:
26981
diff
changeset
|
769 | xmlnode_set_attrib(iq->node, "id", id); |
|
84edb52aea5b
Ack the mail notification IQ. Refs #8240.
Paul Aurich <darkrain42@pidgin.im>
parents:
26981
diff
changeset
|
770 | jabber_iq_send(iq); |
|
84edb52aea5b
Ack the mail notification IQ. Refs #8240.
Paul Aurich <darkrain42@pidgin.im>
parents:
26981
diff
changeset
|
771 | |
| 15884 | 772 | purple_debug(PURPLE_DEBUG_MISC, "jabber", |
| 15225 | 773 | "Got new mail notification. Sending request for more info\n"); |
| 774 | ||
| 775 | iq = jabber_iq_new_query(js, JABBER_IQ_GET, "google:mail:notify"); | |
| 776 | jabber_iq_set_callback(iq, jabber_gmail_parse, NULL); | |
| 777 | query = xmlnode_get_child(iq->node, "query"); | |
| 778 | ||
| 779 | if (js->gmail_last_time) | |
| 780 | xmlnode_set_attrib(query, "newer-than-time", js->gmail_last_time); | |
| 781 | if (js->gmail_last_tid) | |
| 782 | xmlnode_set_attrib(query, "newer-than-tid", js->gmail_last_tid); | |
| 783 | ||
| 784 | jabber_iq_send(iq); | |
| 785 | return; | |
| 786 | } | |
| 787 | ||
| 788 | void jabber_gmail_init(JabberStream *js) { | |
| 789 | JabberIq *iq; | |
| 790 | ||
| 18233 | 791 | if (!purple_account_get_check_mail(js->gc->account)) |
| 15225 | 792 | return; |
| 793 | ||
| 794 | iq = jabber_iq_new_query(js, JABBER_IQ_GET, "google:mail:notify"); | |
| 795 | jabber_iq_set_callback(iq, jabber_gmail_parse, NULL); | |
| 796 | jabber_iq_send(iq); | |
| 797 | } | |
| 15265 | 798 | |
| 799 | void jabber_google_roster_init(JabberStream *js) | |
| 800 | { | |
| 801 | JabberIq *iq; | |
| 802 | xmlnode *query; | |
| 803 | ||
| 804 | iq = jabber_iq_new_query(js, JABBER_IQ_GET, "jabber:iq:roster"); | |
| 805 | query = xmlnode_get_child(iq->node, "query"); | |
| 18233 | 806 | |
| 15265 | 807 | xmlnode_set_attrib(query, "xmlns:gr", "google:roster"); |
| 808 | xmlnode_set_attrib(query, "gr:ext", "2"); | |
| 809 | ||
| 810 | jabber_iq_send(iq); | |
| 811 | } | |
| 812 | ||
| 813 | void jabber_google_roster_outgoing(JabberStream *js, xmlnode *query, xmlnode *item) | |
| 814 | { | |
| 15884 | 815 | PurpleAccount *account = purple_connection_get_account(js->gc); |
| 15265 | 816 | GSList *list = account->deny; |
| 817 | const char *jid = xmlnode_get_attrib(item, "jid"); | |
| 818 | char *jid_norm = g_strdup(jabber_normalize(account, jid)); | |
| 819 | ||
| 820 | while (list) { | |
| 821 | if (!strcmp(jid_norm, (char*)list->data)) { | |
| 822 | xmlnode_set_attrib(query, "xmlns:gr", "google:roster"); | |
| 823 | xmlnode_set_attrib(item, "gr:t", "B"); | |
| 824 | xmlnode_set_attrib(query, "xmlns:gr", "google:roster"); | |
| 825 | xmlnode_set_attrib(query, "gr:ext", "2"); | |
| 826 | return; | |
| 827 | } | |
| 828 | list = list->next; | |
| 829 | } | |
| 830 | ||
| 18739 | 831 | g_free(jid_norm); |
| 832 | ||
| 15265 | 833 | } |
| 834 | ||
|
15530
9355a1be068e
Make deleting Google Talk buddies work
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
835 | gboolean jabber_google_roster_incoming(JabberStream *js, xmlnode *item) |
| 15265 | 836 | { |
| 15884 | 837 | PurpleAccount *account = purple_connection_get_account(js->gc); |
| 15265 | 838 | GSList *list = account->deny; |
| 839 | const char *jid = xmlnode_get_attrib(item, "jid"); | |
| 840 | gboolean on_block_list = FALSE; | |
| 841 | ||
|
20209
c1bbdde1f373
applied changes from 6b5f1f48667171fe73de619dd8f80cacd231a2e2
Luke Schierer <lschiere@pidgin.im>
parents:
20186
diff
changeset
|
842 | char *jid_norm; |
| 15265 | 843 | |
| 844 | const char *grt = xmlnode_get_attrib_with_namespace(item, "t", "google:roster"); | |
|
17148
db0801f13aa8
If Google Talk tells you a roster item as a none subscription, we probably don't ever want to show it. Fixes #1189
Sean Egan <seanegan@pidgin.im>
parents:
16988
diff
changeset
|
845 | const char *subscription = xmlnode_get_attrib(item, "subscription"); |
| 18233 | 846 | |
| 17327 | 847 | if (!subscription || !strcmp(subscription, "none")) { |
|
17148
db0801f13aa8
If Google Talk tells you a roster item as a none subscription, we probably don't ever want to show it. Fixes #1189
Sean Egan <seanegan@pidgin.im>
parents:
16988
diff
changeset
|
848 | /* The Google Talk servers will automatically add people from your Gmail address book |
|
db0801f13aa8
If Google Talk tells you a roster item as a none subscription, we probably don't ever want to show it. Fixes #1189
Sean Egan <seanegan@pidgin.im>
parents:
16988
diff
changeset
|
849 | * with subscription=none. If we see someone with subscription=none, ignore them. |
|
db0801f13aa8
If Google Talk tells you a roster item as a none subscription, we probably don't ever want to show it. Fixes #1189
Sean Egan <seanegan@pidgin.im>
parents:
16988
diff
changeset
|
850 | */ |
|
db0801f13aa8
If Google Talk tells you a roster item as a none subscription, we probably don't ever want to show it. Fixes #1189
Sean Egan <seanegan@pidgin.im>
parents:
16988
diff
changeset
|
851 | return FALSE; |
|
db0801f13aa8
If Google Talk tells you a roster item as a none subscription, we probably don't ever want to show it. Fixes #1189
Sean Egan <seanegan@pidgin.im>
parents:
16988
diff
changeset
|
852 | } |
| 18233 | 853 | |
|
20209
c1bbdde1f373
applied changes from 6b5f1f48667171fe73de619dd8f80cacd231a2e2
Luke Schierer <lschiere@pidgin.im>
parents:
20186
diff
changeset
|
854 | jid_norm = g_strdup(jabber_normalize(account, jid)); |
|
c1bbdde1f373
applied changes from 6b5f1f48667171fe73de619dd8f80cacd231a2e2
Luke Schierer <lschiere@pidgin.im>
parents:
20186
diff
changeset
|
855 | |
| 15265 | 856 | while (list) { |
| 857 | if (!strcmp(jid_norm, (char*)list->data)) { | |
| 858 | on_block_list = TRUE; | |
| 859 | break; | |
| 860 | } | |
| 861 | list = list->next; | |
| 862 | } | |
| 18233 | 863 | |
|
15530
9355a1be068e
Make deleting Google Talk buddies work
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
864 | if (grt && (*grt == 'H' || *grt == 'h')) { |
| 15884 | 865 | PurpleBuddy *buddy = purple_find_buddy(account, jid_norm); |
|
20114
96e715e155e0
applied changes from 3fcc47961d378fa0cd4eeb00dc6923b16a3a4151
Richard Laager <rlaager@pidgin.im>
parents:
20107
diff
changeset
|
866 | if (buddy) |
|
96e715e155e0
applied changes from 3fcc47961d378fa0cd4eeb00dc6923b16a3a4151
Richard Laager <rlaager@pidgin.im>
parents:
20107
diff
changeset
|
867 | purple_blist_remove_buddy(buddy); |
| 18739 | 868 | g_free(jid_norm); |
|
15530
9355a1be068e
Make deleting Google Talk buddies work
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
869 | return FALSE; |
|
9355a1be068e
Make deleting Google Talk buddies work
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
870 | } |
| 18233 | 871 | |
| 15265 | 872 | if (!on_block_list && (grt && (*grt == 'B' || *grt == 'b'))) { |
| 15884 | 873 | purple_debug_info("jabber", "Blocking %s\n", jid_norm); |
| 874 | purple_privacy_deny_add(account, jid_norm, TRUE); | |
| 15265 | 875 | } else if (on_block_list && (!grt || (*grt != 'B' && *grt != 'b' ))){ |
| 15884 | 876 | purple_debug_info("jabber", "Unblocking %s\n", jid_norm); |
| 877 | purple_privacy_deny_remove(account, jid_norm, TRUE); | |
| 15265 | 878 | } |
| 18739 | 879 | |
| 880 | g_free(jid_norm); | |
|
15530
9355a1be068e
Make deleting Google Talk buddies work
Sean Egan <seanegan@pidgin.im>
parents:
15435
diff
changeset
|
881 | return TRUE; |
| 15265 | 882 | } |
| 883 | ||
| 18233 | 884 | void jabber_google_roster_add_deny(PurpleConnection *gc, const char *who) |
| 15265 | 885 | { |
| 886 | JabberStream *js; | |
| 887 | GSList *buddies; | |
| 888 | JabberIq *iq; | |
| 889 | xmlnode *query; | |
| 890 | xmlnode *item; | |
| 891 | xmlnode *group; | |
| 15884 | 892 | PurpleBuddy *b; |
| 15265 | 893 | JabberBuddy *jb; |
|
24950
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24944
diff
changeset
|
894 | const char *balias; |
| 15265 | 895 | |
| 896 | js = (JabberStream*)(gc->proto_data); | |
| 18233 | 897 | |
| 15265 | 898 | if (!js || !js->server_caps & JABBER_CAP_GOOGLE_ROSTER) |
| 899 | return; | |
| 900 | ||
| 901 | jb = jabber_buddy_find(js, who, TRUE); | |
| 902 | ||
| 15884 | 903 | buddies = purple_find_buddies(js->gc->account, who); |
| 15265 | 904 | if(!buddies) |
| 905 | return; | |
| 18233 | 906 | |
| 15265 | 907 | b = buddies->data; |
| 908 | ||
| 909 | iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:roster"); | |
| 18233 | 910 | |
| 15265 | 911 | query = xmlnode_get_child(iq->node, "query"); |
| 912 | item = xmlnode_new_child(query, "item"); | |
| 913 | ||
| 914 | while(buddies) { | |
| 15884 | 915 | PurpleGroup *g; |
| 15265 | 916 | |
| 917 | b = buddies->data; | |
| 15884 | 918 | g = purple_buddy_get_group(b); |
| 15265 | 919 | |
| 920 | group = xmlnode_new_child(item, "group"); | |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23540
diff
changeset
|
921 | xmlnode_insert_data(group, purple_group_get_name(g), -1); |
| 18233 | 922 | |
| 15265 | 923 | buddies = buddies->next; |
| 924 | } | |
| 925 | ||
|
24950
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24944
diff
changeset
|
926 | balias = purple_buddy_get_local_buddy_alias(b); |
| 15265 | 927 | xmlnode_set_attrib(item, "jid", who); |
|
24950
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24944
diff
changeset
|
928 | xmlnode_set_attrib(item, "name", balias ? balias : ""); |
| 15265 | 929 | xmlnode_set_attrib(item, "gr:t", "B"); |
| 930 | xmlnode_set_attrib(query, "xmlns:gr", "google:roster"); | |
| 931 | xmlnode_set_attrib(query, "gr:ext", "2"); | |
| 932 | ||
| 933 | jabber_iq_send(iq); | |
| 934 | ||
| 935 | /* Synthesize a sign-off */ | |
| 936 | if (jb) { | |
| 937 | JabberBuddyResource *jbr; | |
| 938 | GList *l = jb->resources; | |
| 939 | while (l) { | |
| 940 | jbr = l->data; | |
|
15346
ef48613b5b9b
[gaim-migrate @ 18074]
Evan Schoenberg <evands@pidgin.im>
parents:
15265
diff
changeset
|
941 | if (jbr && jbr->name) |
|
ef48613b5b9b
[gaim-migrate @ 18074]
Evan Schoenberg <evands@pidgin.im>
parents:
15265
diff
changeset
|
942 | { |
| 15884 | 943 | purple_debug(PURPLE_DEBUG_MISC, "jabber", "Removing resource %s\n", jbr->name); |
|
15346
ef48613b5b9b
[gaim-migrate @ 18074]
Evan Schoenberg <evands@pidgin.im>
parents:
15265
diff
changeset
|
944 | jabber_buddy_remove_resource(jb, jbr->name); |
|
ef48613b5b9b
[gaim-migrate @ 18074]
Evan Schoenberg <evands@pidgin.im>
parents:
15265
diff
changeset
|
945 | } |
| 15265 | 946 | l = l->next; |
| 947 | } | |
| 948 | } | |
| 15884 | 949 | purple_prpl_got_user_status(purple_connection_get_account(gc), who, "offline", NULL); |
| 15265 | 950 | } |
| 951 | ||
| 15884 | 952 | void jabber_google_roster_rem_deny(PurpleConnection *gc, const char *who) |
| 15265 | 953 | { |
| 954 | JabberStream *js; | |
| 955 | GSList *buddies; | |
| 956 | JabberIq *iq; | |
| 957 | xmlnode *query; | |
| 958 | xmlnode *item; | |
| 959 | xmlnode *group; | |
| 15884 | 960 | PurpleBuddy *b; |
|
24950
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24944
diff
changeset
|
961 | const char *balias; |
| 15265 | 962 | |
| 963 | g_return_if_fail(gc != NULL); | |
| 964 | g_return_if_fail(who != NULL); | |
| 18233 | 965 | |
| 15265 | 966 | js = (JabberStream*)(gc->proto_data); |
| 18233 | 967 | |
| 15265 | 968 | if (!js || !js->server_caps & JABBER_CAP_GOOGLE_ROSTER) |
| 969 | return; | |
| 18233 | 970 | |
|
24942
ec72b773a9da
More struct hiding work
Richard Laager <rlaager@pidgin.im>
parents:
23540
diff
changeset
|
971 | buddies = purple_find_buddies(purple_connection_get_account(js->gc), who); |
| 15265 | 972 | if(!buddies) |
| 973 | return; | |
| 18233 | 974 | |
| 15265 | 975 | b = buddies->data; |
| 976 | ||
| 977 | iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:roster"); | |
| 18233 | 978 | |
| 15265 | 979 | query = xmlnode_get_child(iq->node, "query"); |
| 980 | item = xmlnode_new_child(query, "item"); | |
| 981 | ||
| 982 | while(buddies) { | |
| 15884 | 983 | PurpleGroup *g; |
| 15265 | 984 | |
| 985 | b = buddies->data; | |
| 15884 | 986 | g = purple_buddy_get_group(b); |
| 15265 | 987 | |
| 988 | group = xmlnode_new_child(item, "group"); | |
|
24398
4865c2ee6ea8
Start hiding blist.h internals in prpls.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
23540
diff
changeset
|
989 | xmlnode_insert_data(group, purple_group_get_name(g), -1); |
| 18233 | 990 | |
| 15265 | 991 | buddies = buddies->next; |
| 992 | } | |
| 993 | ||
|
24950
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24944
diff
changeset
|
994 | balias = purple_buddy_get_local_buddy_alias(b); |
| 15265 | 995 | xmlnode_set_attrib(item, "jid", who); |
|
24950
143f594f0cd0
Alias foo. I think blist.h structs are now completely hidden.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
24944
diff
changeset
|
996 | xmlnode_set_attrib(item, "name", balias ? balias : ""); |
| 15265 | 997 | xmlnode_set_attrib(query, "xmlns:gr", "google:roster"); |
| 998 | xmlnode_set_attrib(query, "gr:ext", "2"); | |
| 999 | ||
| 1000 | jabber_iq_send(iq); | |
| 1001 | ||
| 1002 | /* See if he's online */ | |
| 1003 | jabber_presence_subscription_set(js, who, "probe"); | |
| 1004 | } | |
|
15587
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1005 | |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1006 | /* This does two passes on the string. The first pass goes through |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1007 | * and determine if all the structured text is properly balanced, and |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1008 | * how many instances of each there is. The second pass goes and converts |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1009 | * everything to HTML, depending on what's figured out by the first pass. |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1010 | * It will short circuit once it knows it has no more replacements to make |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1011 | */ |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1012 | char *jabber_google_format_to_html(const char *text) |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1013 | { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1014 | const char *p; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1015 | |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1016 | /* The start of the screen may be consdiered a space for this purpose */ |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1017 | gboolean preceding_space = TRUE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1018 | |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1019 | gboolean in_bold = FALSE, in_italic = FALSE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1020 | gboolean in_tag = FALSE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1021 | |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1022 | gint bold_count = 0, italic_count = 0; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1023 | |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1024 | GString *str; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1025 | |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1026 | for (p = text; *p != '\0'; p = g_utf8_next_char(p)) { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1027 | gunichar c = g_utf8_get_char(p); |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1028 | if (c == '*' && !in_tag) { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1029 | if (in_bold && (g_unichar_isspace(*(p+1)) || |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1030 | *(p+1) == '\0' || |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1031 | *(p+1) == '<')) { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1032 | bold_count++; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1033 | in_bold = FALSE; |
|
16988
1aaf51bf0f23
Patch #265. Fix to Google Talk formatting
Sean Egan <seanegan@pidgin.im>
parents:
15884
diff
changeset
|
1034 | } else if (preceding_space && !in_bold && !g_unichar_isspace(*(p+1))) { |
|
15587
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1035 | bold_count++; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1036 | in_bold = TRUE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1037 | } |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1038 | preceding_space = TRUE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1039 | } else if (c == '_' && !in_tag) { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1040 | if (in_italic && (g_unichar_isspace(*(p+1)) || |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1041 | *(p+1) == '\0' || |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1042 | *(p+1) == '<')) { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1043 | italic_count++; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1044 | in_italic = FALSE; |
|
16988
1aaf51bf0f23
Patch #265. Fix to Google Talk formatting
Sean Egan <seanegan@pidgin.im>
parents:
15884
diff
changeset
|
1045 | } else if (preceding_space && !in_italic && !g_unichar_isspace(*(p+1))) { |
|
15587
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1046 | italic_count++; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1047 | in_italic = TRUE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1048 | } |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1049 | preceding_space = TRUE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1050 | } else if (c == '<' && !in_tag) { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1051 | in_tag = TRUE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1052 | } else if (c == '>' && in_tag) { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1053 | in_tag = FALSE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1054 | } else if (!in_tag) { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1055 | if (g_unichar_isspace(c)) |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1056 | preceding_space = TRUE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1057 | else |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1058 | preceding_space = FALSE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1059 | } |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1060 | } |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1061 | |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1062 | str = g_string_new(NULL); |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1063 | in_bold = in_italic = in_tag = FALSE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1064 | preceding_space = TRUE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1065 | |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1066 | for (p = text; *p != '\0'; p = g_utf8_next_char(p)) { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1067 | gunichar c = g_utf8_get_char(p); |
| 18233 | 1068 | |
|
15587
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1069 | if (bold_count < 2 && italic_count < 2 && !in_bold && !in_italic) { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1070 | g_string_append(str, p); |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1071 | return g_string_free(str, FALSE); |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1072 | } |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1073 | |
| 18233 | 1074 | |
|
15587
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1075 | if (c == '*' && !in_tag) { |
| 18233 | 1076 | if (in_bold && |
|
15587
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1077 | (g_unichar_isspace(*(p+1))||*(p+1)=='<')) { /* This is safe in UTF-8 */ |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1078 | str = g_string_append(str, "</b>"); |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1079 | in_bold = FALSE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1080 | bold_count--; |
|
16988
1aaf51bf0f23
Patch #265. Fix to Google Talk formatting
Sean Egan <seanegan@pidgin.im>
parents:
15884
diff
changeset
|
1081 | } else if (preceding_space && bold_count > 1 && !g_unichar_isspace(*(p+1))) { |
|
15587
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1082 | str = g_string_append(str, "<b>"); |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1083 | bold_count--; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1084 | in_bold = TRUE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1085 | } else { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1086 | str = g_string_append_unichar(str, c); |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1087 | } |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1088 | preceding_space = TRUE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1089 | } else if (c == '_' && !in_tag) { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1090 | if (in_italic && |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1091 | (g_unichar_isspace(*(p+1))||*(p+1)=='<')) { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1092 | str = g_string_append(str, "</i>"); |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1093 | italic_count--; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1094 | in_italic = FALSE; |
|
16988
1aaf51bf0f23
Patch #265. Fix to Google Talk formatting
Sean Egan <seanegan@pidgin.im>
parents:
15884
diff
changeset
|
1095 | } else if (preceding_space && italic_count > 1 && !g_unichar_isspace(*(p+1))) { |
|
15587
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1096 | str = g_string_append(str, "<i>"); |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1097 | italic_count--; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1098 | in_italic = TRUE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1099 | } else { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1100 | str = g_string_append_unichar(str, c); |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1101 | } |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1102 | preceding_space = TRUE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1103 | } else if (c == '<' && !in_tag) { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1104 | str = g_string_append_unichar(str, c); |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1105 | in_tag = TRUE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1106 | } else if (c == '>' && in_tag) { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1107 | str = g_string_append_unichar(str, c); |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1108 | in_tag = FALSE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1109 | } else if (!in_tag) { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1110 | str = g_string_append_unichar(str, c); |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1111 | if (g_unichar_isspace(c)) |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1112 | preceding_space = TRUE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1113 | else |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1114 | preceding_space = FALSE; |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1115 | } else { |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1116 | str = g_string_append_unichar(str, c); |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1117 | } |
| 18233 | 1118 | } |
|
15587
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1119 | return g_string_free(str, FALSE); |
|
cbedd543bfae
Google Talk uses structured text formatting where *this* is bold
Sean Egan <seanegan@pidgin.im>
parents:
15530
diff
changeset
|
1120 | } |
|
21195
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1121 | |
|
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1122 | void jabber_google_presence_incoming(JabberStream *js, const char *user, JabberBuddyResource *jbr) |
|
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1123 | { |
|
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1124 | if (!js->googletalk) |
|
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1125 | return; |
|
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1126 | if (jbr->status && !strncmp(jbr->status, "♫ ", strlen("♫ "))) { |
|
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1127 | purple_prpl_got_user_status(js->gc->account, user, "tune", |
|
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1128 | PURPLE_TUNE_TITLE, jbr->status + strlen("♫ "), NULL); |
|
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1129 | jbr->status = NULL; |
|
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1130 | } else { |
|
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1131 | purple_prpl_got_user_status_deactive(js->gc->account, user, "tune"); |
|
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1132 | } |
|
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1133 | } |
|
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1134 | |
|
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1135 | char *jabber_google_presence_outgoing(PurpleStatus *tune) |
|
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1136 | { |
|
21714
5956ea2cb4af
don't set the current tune title if it's NULL
Ka-Hing Cheung <khc@pidgin.im>
parents:
21204
diff
changeset
|
1137 | const char *attr = purple_status_get_attr_string(tune, PURPLE_TUNE_TITLE); |
|
5956ea2cb4af
don't set the current tune title if it's NULL
Ka-Hing Cheung <khc@pidgin.im>
parents:
21204
diff
changeset
|
1138 | return attr ? g_strdup_printf("♫ %s", attr) : g_strdup(""); |
|
21195
fd63ef5027d7
Music support for Google Talk
Sean Egan <seanegan@pidgin.im>
parents:
20107
diff
changeset
|
1139 | } |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1140 | |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1141 | static void |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1142 | jabber_google_stun_lookup_cb(GSList *hosts, gpointer data, |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1143 | const char *error_message) |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1144 | { |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1145 | JabberStream *js = (JabberStream *) data; |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1146 | |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1147 | if (error_message) { |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1148 | purple_debug_error("jabber", "Google STUN lookup failed: %s\n", |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1149 | error_message); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1150 | g_slist_free(hosts); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1151 | return; |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1152 | } |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1153 | |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1154 | if (hosts && g_slist_next(hosts)) { |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1155 | struct sockaddr *addr = g_slist_next(hosts)->data; |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1156 | char dst[INET6_ADDRSTRLEN]; |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1157 | int port; |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1158 | |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1159 | if (addr->sa_family == AF_INET6) { |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1160 | inet_ntop(addr->sa_family, &((struct sockaddr_in6 *) addr)->sin6_addr, |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1161 | dst, sizeof(dst)); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1162 | port = ntohs(((struct sockaddr_in6 *) addr)->sin6_port); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1163 | } else { |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1164 | inet_ntop(addr->sa_family, &((struct sockaddr_in *) addr)->sin_addr, |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1165 | dst, sizeof(dst)); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1166 | port = ntohs(((struct sockaddr_in *) addr)->sin_port); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1167 | } |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1168 | |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1169 | if (js) { |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1170 | if (js->stun_ip) { |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1171 | g_free(js->stun_ip); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1172 | } |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1173 | js->stun_ip = g_strdup(dst); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1174 | purple_debug_info("jabber", "set Google STUN IP address: %s\n", dst); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1175 | js->stun_port = port; |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1176 | purple_debug_info("jabber", "set Google STUN port: %d\n", port); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1177 | purple_debug_info("jabber", "set Google STUN port: %d\n", port); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1178 | /* unmark ongoing query */ |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1179 | js->stun_query = NULL; |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1180 | } |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1181 | } |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1182 | |
|
26782
0d61de90ae02
Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <darkrain42@pidgin.im>
parents:
26746
diff
changeset
|
1183 | while (hosts != NULL) { |
|
0d61de90ae02
Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <darkrain42@pidgin.im>
parents:
26746
diff
changeset
|
1184 | hosts = g_slist_delete_link(hosts, hosts); |
|
0d61de90ae02
Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <darkrain42@pidgin.im>
parents:
26746
diff
changeset
|
1185 | /* Free the address */ |
|
0d61de90ae02
Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <darkrain42@pidgin.im>
parents:
26746
diff
changeset
|
1186 | g_free(hosts->data); |
|
0d61de90ae02
Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <darkrain42@pidgin.im>
parents:
26746
diff
changeset
|
1187 | hosts = g_slist_delete_link(hosts, hosts); |
|
0d61de90ae02
Don't leak the struct sockaddr* from purple_dnsquery_a.
Paul Aurich <darkrain42@pidgin.im>
parents:
26746
diff
changeset
|
1188 | } |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1189 | } |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1190 | |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1191 | static void |
|
26693
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1192 | jabber_google_jingle_info_common(JabberStream *js, const char *from, |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1193 | JabberIqType type, xmlnode *query) |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1194 | { |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1195 | const xmlnode *stun = xmlnode_get_child(query, "stun"); |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1196 | gchar *my_bare_jid; |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1197 | |
|
26693
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1198 | /* |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1199 | * Make sure that random people aren't sending us STUN servers. Per |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1200 | * http://code.google.com/apis/talk/jep_extensions/jingleinfo.html, these |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1201 | * stanzas are stamped from our bare JID. |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1202 | */ |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1203 | if (from) { |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1204 | my_bare_jid = g_strdup_printf("%s@%s", js->user->node, js->user->domain); |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1205 | if (!purple_strequal(from, my_bare_jid)) { |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1206 | purple_debug_warning("jabber", "got google:jingleinfo with invalid from (%s)\n", |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1207 | from); |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1208 | g_free(my_bare_jid); |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1209 | return; |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1210 | } |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1211 | |
|
26693
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1212 | g_free(my_bare_jid); |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1213 | } |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1214 | |
|
26693
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1215 | if (type == JABBER_IQ_ERROR || type == JABBER_IQ_GET) |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1216 | return; |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1217 | |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1218 | purple_debug_info("jabber", "got google:jingleinfo\n"); |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1219 | |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1220 | if (stun) { |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1221 | xmlnode *server = xmlnode_get_child(stun, "server"); |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1222 | |
|
26693
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1223 | if (server) { |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1224 | const gchar *host = xmlnode_get_attrib(server, "host"); |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1225 | const gchar *udp = xmlnode_get_attrib(server, "udp"); |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1226 | |
|
26693
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1227 | if (host && udp) { |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1228 | int port = atoi(udp); |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1229 | /* if there, would already be an ongoing query, |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1230 | cancel it */ |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1231 | if (js->stun_query) |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1232 | purple_dnsquery_destroy(js->stun_query); |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1233 | |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1234 | js->stun_query = purple_dnsquery_a(host, port, |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1235 | jabber_google_stun_lookup_cb, js); |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1236 | } |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1237 | } |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1238 | } |
|
26693
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1239 | /* should perhaps handle relays later on, or maybe wait until |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1240 | Google supports a common standard... */ |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1241 | } |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1242 | |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1243 | static void |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1244 | jabber_google_jingle_info_cb(JabberStream *js, const char *from, |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1245 | JabberIqType type, const char *id, |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1246 | xmlnode *packet, gpointer data) |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1247 | { |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1248 | xmlnode *query = xmlnode_get_child_with_namespace(packet, "query", |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1249 | GOOGLE_JINGLE_INFO_NAMESPACE); |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1250 | |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1251 | if (query) |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1252 | jabber_google_jingle_info_common(js, from, type, query); |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1253 | else |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1254 | purple_debug_warning("jabber", "Got invalid google:jingleinfo\n"); |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1255 | } |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1256 | |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1257 | void |
|
26693
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1258 | jabber_google_handle_jingle_info(JabberStream *js, const char *from, |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1259 | JabberIqType type, const char *id, |
|
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1260 | xmlnode *child) |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1261 | { |
|
26693
0365dcbeaff6
Migrate googleinfo:jabber handlers and add some safety checks.
Paul Aurich <darkrain42@pidgin.im>
parents:
26692
diff
changeset
|
1262 | jabber_google_jingle_info_common(js, from, type, child); |
|
26286
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1263 | } |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1264 | |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1265 | void |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1266 | jabber_google_send_jingle_info(JabberStream *js) |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1267 | { |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1268 | JabberIq *jingle_info = |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1269 | jabber_iq_new_query(js, JABBER_IQ_GET, GOOGLE_JINGLE_INFO_NAMESPACE); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1270 | |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1271 | jabber_iq_set_callback(jingle_info, jabber_google_jingle_info_cb, |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1272 | NULL); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1273 | purple_debug_info("jabber", "sending google:jingleinfo query\n"); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1274 | jabber_iq_send(jingle_info); |
|
443041606e32
Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents:
26264
diff
changeset
|
1275 | } |