Wed, 21 Dec 2005 08:24:17 +0000
[gaim-migrate @ 14925]
I've been meaning to spend the time to commit these changes separately, but it's been a couple days without me finding the time...
1. Allow the creation of GaimStatusTypes by passing NULL for the name and/or id. The core uses the default name and/or id. This eliminates quite a bit of duplication in the prpls.
2. Make statuses more consistent. For example, in some prpls, "Busy" was descended from the UNAVAILABLE primitive and on others it was a case of AWAY. Another example... "On Vacation" is definitely an EXTENDED_AWAY not an AWAY.
3. Rename some pixmaps to elminate some special cases. The names of the pixmaps should now match the primitive default IDs.
4. Rename the HIDDEN primitive to INVISIBLE, since we seem to be using that term everywhere. In conjunction with #1, more duplication was eliminated.
5. Add a MOBILE status primitive. It's not used now. It'll be needed in the (hopefully not-too-distant) future, so I'm planning ahead.
6. Shrink the status select for small blist folks. Now if someone can get rid of that stupid extra padding, we'll be set (well, after we deal with imhtml space issues). I've fought with this for many many hours over several days and I can't get it. It's clear that the combo box is requesting more space than is really necessary, but I don't know why.
This is really my first go at anything significant status-related. Everyone should check their favorite prpls carefully to make sure I didn't break anything.
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1 | /** |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
2 | * @file simple.c |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
3 | * |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
4 | * gaim |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
5 | * |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
6 | * Copyright (C) 2005 Thomas Butter <butter@uni-mannheim.de> |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
7 | * |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
8 | * *** |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
9 | * Thanks to Google's Summer of Code Program and the helpful mentors |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
10 | * *** |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
11 | * |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
12 | * This program is free software; you can redistribute it and/or modify |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
13 | * it under the terms of the GNU General Public License as published by |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
14 | * the Free Software Foundation; either version 2 of the License, or |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
15 | * (at your option) any later version. |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
16 | * |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
17 | * This program is distributed in the hope that it will be useful, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
20 | * GNU General Public License for more details. |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
21 | * |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
22 | * You should have received a copy of the GNU General Public License |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
23 | * along with this program; if not, write to the Free Software |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
24 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
25 | */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
26 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
27 | #include "internal.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
28 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
29 | #include "accountopt.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
30 | #include "blist.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
31 | #include "conversation.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
32 | #include "debug.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
33 | #include "notify.h" |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
34 | #include "privacy.h" |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
35 | #include "prpl.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
36 | #include "plugin.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
37 | #include "util.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
38 | #include "version.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
39 | #include "network.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
40 | #include "xmlnode.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
41 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
42 | #include "simple.h" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
43 | #include "sipmsg.h" |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
44 | #include "dnssrv.h" |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
45 | #include "ntlm.h" |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
46 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
47 | static char *gentag() { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
48 | return g_strdup_printf("%04d%04d", rand() & 0xFFFF, rand() & 0xFFFF); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
49 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
50 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
51 | static char *genbranch() { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
52 | return g_strdup_printf("z9hG4bK%04X%04X%04X%04X%04X", |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
53 | rand() & 0xFFFF, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
54 | rand() & 0xFFFF, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
55 | rand() & 0xFFFF, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
56 | rand() & 0xFFFF, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
57 | rand() & 0xFFFF); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
58 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
59 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
60 | static char *gencallid() { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
61 | return g_strdup_printf("%04Xg%04Xa%04Xi%04Xm%04Xt%04Xb%04Xx%04Xx", |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
62 | rand() & 0xFFFF, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
63 | rand() & 0xFFFF, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
64 | rand() & 0xFFFF, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
65 | rand() & 0xFFFF, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
66 | rand() & 0xFFFF, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
67 | rand() & 0xFFFF, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
68 | rand() & 0xFFFF, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
69 | rand() & 0xFFFF); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
70 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
71 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
72 | static const char *simple_list_icon(GaimAccount *a, GaimBuddy *b) { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
73 | return "simple"; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
74 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
75 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
76 | static void simple_keep_alive(GaimConnection *gc) { |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
77 | struct simple_account_data *sip = gc->proto_data; |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
78 | if(sip->udp) { /* in case of UDP send a packet only with a 0 byte to |
|
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
79 | remain in the NAT table */ |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
80 | gchar buf[2]={0,0}; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
81 | gaim_debug_info("simple", "sending keep alive\n"); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
82 | sendto(sip->fd, buf, 1, 0, (struct sockaddr*)&sip->serveraddr, sizeof(struct sockaddr_in)); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
83 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
84 | return; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
85 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
86 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
87 | static gboolean process_register_response(struct simple_account_data *sip, struct sipmsg *msg, struct transaction *tc); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
88 | static void send_notify(struct simple_account_data *sip, struct simple_watcher *); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
89 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
90 | static void send_publish(struct simple_account_data *sip); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
91 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
92 | static void do_notifies(struct simple_account_data *sip) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
93 | GSList *tmp = sip->watcher; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
94 | gaim_debug_info("simple", "do_notifies()\n"); |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
95 | if((sip->republish != -1) || sip->republish < time(NULL)) { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
96 | if(gaim_account_get_bool(sip->account, "dopublish", TRUE)) { |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
97 | send_publish(sip); |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
98 | } |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
99 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
100 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
101 | while(tmp) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
102 | gaim_debug_info("simple", "notifying %s\n", ((struct simple_watcher*)tmp->data)->name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
103 | send_notify(sip, tmp->data); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
104 | tmp = tmp->next; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
105 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
106 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
107 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
108 | static void simple_set_status(GaimAccount *account, GaimStatus *status) { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
109 | GaimStatusPrimitive primitive = gaim_status_type_get_primitive(gaim_status_get_type(status)); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
110 | struct simple_account_data *sip = NULL; |
|
11718
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
111 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
112 | if (!gaim_status_is_active(status)) |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
113 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
114 | |
|
11718
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
115 | if (account->gc) |
|
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
116 | sip = account->gc->proto_data; |
|
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
117 | |
|
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
118 | if (sip) |
|
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
119 | { |
|
11650
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
120 | g_free(sip->status); |
|
11718
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
121 | if (primitive == GAIM_STATUS_AVAILABLE) |
|
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
122 | sip->status = g_strdup("available"); |
|
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
123 | else |
|
90804d019837
[gaim-migrate @ 14009]
Mark Doliner <markdoliner@pidgin.im>
parents:
11658
diff
changeset
|
124 | sip->status = g_strdup("busy"); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
125 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
126 | do_notifies(sip); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
127 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
128 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
129 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
130 | static struct sip_connection *connection_find(struct simple_account_data *sip, int fd) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
131 | struct sip_connection *ret = NULL; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
132 | GSList *entry = sip->openconns; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
133 | while(entry) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
134 | ret = entry->data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
135 | if(ret->fd == fd) return ret; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
136 | entry = entry->next; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
137 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
138 | return NULL; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
139 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
140 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
141 | static struct simple_watcher *watcher_find(struct simple_account_data *sip, gchar *name) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
142 | struct simple_watcher *watcher; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
143 | GSList *entry = sip->watcher; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
144 | while(entry) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
145 | watcher = entry->data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
146 | if(!strcmp(name, watcher->name)) return watcher; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
147 | entry = entry->next; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
148 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
149 | return NULL; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
150 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
151 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
152 | static struct simple_watcher *watcher_create(struct simple_account_data *sip, gchar *name, gchar *callid, gchar *ourtag, gchar *theirtag) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
153 | struct simple_watcher *watcher = g_new0(struct simple_watcher,1); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
154 | watcher->name = g_strdup(name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
155 | watcher->dialog.callid = g_strdup(callid); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
156 | watcher->dialog.ourtag = g_strdup(ourtag); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
157 | watcher->dialog.theirtag = g_strdup(theirtag); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
158 | sip->watcher = g_slist_append(sip->watcher, watcher); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
159 | return watcher; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
160 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
161 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
162 | static void watcher_remove(struct simple_account_data *sip, gchar *name) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
163 | struct simple_watcher *watcher = watcher_find(sip, name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
164 | sip->watcher = g_slist_remove(sip->watcher, watcher); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
165 | g_free(watcher->name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
166 | g_free(watcher->dialog.callid); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
167 | g_free(watcher->dialog.ourtag); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
168 | g_free(watcher->dialog.theirtag); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
169 | g_free(watcher); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
170 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
171 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
172 | static struct sip_connection *connection_create(struct simple_account_data *sip, int fd) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
173 | struct sip_connection *ret = g_new0(struct sip_connection,1); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
174 | ret->fd = fd; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
175 | sip->openconns = g_slist_append(sip->openconns, ret); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
176 | return ret; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
177 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
178 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
179 | static void connection_remove(struct simple_account_data *sip, int fd) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
180 | struct sip_connection *conn = connection_find(sip, fd); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
181 | sip->openconns = g_slist_remove(sip->openconns, conn); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
182 | if(conn->inputhandler) gaim_input_remove(conn->inputhandler); |
|
11650
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
183 | g_free(conn->inbuf); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
184 | g_free(conn); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
185 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
186 | |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
187 | static void connection_free_all(struct simple_account_data *sip) { |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
188 | struct sip_connection *ret = NULL; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
189 | GSList *entry = sip->openconns; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
190 | while(entry) { |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
191 | ret = entry->data; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
192 | connection_remove(sip, ret->fd); |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
193 | entry = sip->openconns; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
194 | } |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
195 | } |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
196 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
197 | static void simple_add_buddy(GaimConnection *gc, GaimBuddy *buddy, GaimGroup *group) |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
198 | { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
199 | struct simple_account_data *sip = (struct simple_account_data *)gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
200 | struct simple_buddy *b; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
201 | if(strncmp("sip:", buddy->name,4)) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
202 | gchar *buf = g_strdup_printf(_("Could not add the buddy %s because every simple user has to start with 'sip:'."), buddy->name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
203 | gaim_notify_error(gc, NULL, _("Unable To Add"), buf); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
204 | g_free(buf); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
205 | gaim_blist_remove_buddy(buddy); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
206 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
207 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
208 | if(!g_hash_table_lookup(sip->buddies, buddy->name)) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
209 | b = g_new0(struct simple_buddy, 1); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
210 | gaim_debug_info("simple","simple_add_buddy %s\n",buddy->name); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
211 | b->name = g_strdup(buddy->name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
212 | g_hash_table_insert(sip->buddies, b->name, b); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
213 | } else { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
214 | gaim_debug_info("simple","buddy %s already in internal list\n", buddy->name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
215 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
216 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
217 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
218 | static void simple_get_buddies(GaimConnection *gc) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
219 | GaimBlistNode *gnode, *cnode, *bnode; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
220 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
221 | gaim_debug_info("simple","simple_get_buddies\n"); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
222 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
223 | for(gnode = gaim_get_blist()->root; gnode; gnode = gnode->next) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
224 | if(!GAIM_BLIST_NODE_IS_GROUP(gnode)) continue; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
225 | for(cnode = gnode->child; cnode; cnode = cnode->next) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
226 | if(!GAIM_BLIST_NODE_IS_CONTACT(cnode)) continue; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
227 | for(bnode = cnode->child; bnode; bnode = bnode->next) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
228 | if(!GAIM_BLIST_NODE_IS_BUDDY(bnode)) continue; |
|
11192
7b7445544f76
[gaim-migrate @ 13310]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11191
diff
changeset
|
229 | if(((GaimBuddy*)bnode)->account == gc->account) |
|
7b7445544f76
[gaim-migrate @ 13310]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11191
diff
changeset
|
230 | simple_add_buddy(gc, (GaimBuddy*)bnode, (GaimGroup *)gnode); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
231 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
232 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
233 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
234 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
235 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
236 | static void simple_remove_buddy(GaimConnection *gc, GaimBuddy *buddy, GaimGroup *group) |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
237 | { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
238 | struct simple_account_data *sip = (struct simple_account_data *)gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
239 | struct simple_buddy *b = g_hash_table_lookup(sip->buddies, buddy->name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
240 | g_hash_table_remove(sip->buddies, buddy->name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
241 | g_free(b->name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
242 | g_free(b); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
243 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
244 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
245 | static GList *simple_status_types(GaimAccount *acc) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
246 | GaimStatusType *type; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
247 | GList *types = NULL; |
|
12456
94b229fc8203
[gaim-migrate @ 14765]
Mark Doliner <markdoliner@pidgin.im>
parents:
12389
diff
changeset
|
248 | |
|
94b229fc8203
[gaim-migrate @ 14765]
Mark Doliner <markdoliner@pidgin.im>
parents:
12389
diff
changeset
|
249 | type = gaim_status_type_new_full( |
|
12595
8108c22aa723
[gaim-migrate @ 14925]
Richard Laager <rlaager@pidgin.im>
parents:
12571
diff
changeset
|
250 | GAIM_STATUS_OFFLINE, NULL, NULL, TRUE, TRUE, FALSE); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
251 | types = g_list_append(types, type); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
252 | |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
253 | type = gaim_status_type_new_with_attrs( |
|
12595
8108c22aa723
[gaim-migrate @ 14925]
Richard Laager <rlaager@pidgin.im>
parents:
12571
diff
changeset
|
254 | GAIM_STATUS_AVAILABLE, NULL, NULL, TRUE, TRUE, FALSE, |
|
8108c22aa723
[gaim-migrate @ 14925]
Richard Laager <rlaager@pidgin.im>
parents:
12571
diff
changeset
|
255 | "message", _("Message"), gaim_value_new(GAIM_TYPE_STRING), |
|
8108c22aa723
[gaim-migrate @ 14925]
Richard Laager <rlaager@pidgin.im>
parents:
12571
diff
changeset
|
256 | NULL); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
257 | types = g_list_append(types, type); |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
258 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
259 | return types; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
260 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
261 | |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
262 | static gchar *auth_header(struct simple_account_data *sip, struct sip_auth *auth, gchar *method, gchar *target) { |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
263 | gchar noncecount[9]; |
|
12382
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
264 | gchar *response; |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
265 | gchar *ret; |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
266 | gchar *tmp; |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
267 | |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
268 | if(auth->type == 1) { /* Digest */ |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
269 | sprintf(noncecount, "%08d", auth->nc++); |
|
12382
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
270 | response = gaim_cipher_http_digest_calculate_response( |
|
12389
7196ba664097
[gaim-migrate @ 14695]
Richard Laager <rlaager@pidgin.im>
parents:
12382
diff
changeset
|
271 | "md5", method, target, NULL, NULL, |
|
12382
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
272 | auth->nonce, noncecount, NULL, auth->digest_session_key); |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
273 | gaim_debug(GAIM_DEBUG_MISC, "simple", "response %s\n", response); |
|
12382
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
274 | |
|
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
275 | ret = g_strdup_printf("Digest username=\"%s\", realm=\"%s\", nonce=\"%s\", uri=\"%s\", nc=\"%s\", response=\"%s\"\r\n", sip->username, auth->realm, auth->nonce, target, noncecount, response); |
|
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
276 | g_free(response); |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
277 | return ret; |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
278 | } else if(auth->type == 2) { /* NTLM */ |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
279 | if(auth->nc == 3) { |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
280 | ret = gaim_ntlm_gen_type3(sip->username, sip->password, "gaim", sip->servername, auth->nonce); |
|
12382
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
281 | tmp = g_strdup_printf("NTLM qop=\"auth\" realm=\"%s\" targetname=\"%s\" response=\"%s\"\r\n", auth->realm, auth->target, ret); |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
282 | g_free(ret); |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
283 | return tmp; |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
284 | } |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
285 | ret = gaim_ntlm_gen_type1("gaim", sip->servername); |
|
11483
098043515257
[gaim-migrate @ 13725]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11439
diff
changeset
|
286 | tmp = g_strdup_printf("NTLM qop=\"auth\" realm=\"%s\" targetname=\"%s\" response=\"%s\"\r\n", auth->realm, auth->target, ret); |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
287 | g_free(ret); |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
288 | return tmp; |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
289 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
290 | |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
291 | sprintf(noncecount, "%08d", auth->nc++); |
|
12382
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
292 | response = gaim_cipher_http_digest_calculate_response( |
|
12389
7196ba664097
[gaim-migrate @ 14695]
Richard Laager <rlaager@pidgin.im>
parents:
12382
diff
changeset
|
293 | "md5", method, target, NULL, NULL, |
|
12382
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
294 | auth->nonce, noncecount, NULL, auth->digest_session_key); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
295 | gaim_debug(GAIM_DEBUG_MISC, "simple", "response %s\n", response); |
|
12382
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
296 | |
|
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
297 | ret = g_strdup_printf("Digest username=\"%s\", realm=\"%s\", nonce=\"%s\", uri=\"%s\", nc=\"%s\", response=\"%s\"\r\n", sip->username, auth->realm, auth->nonce, target, noncecount, response); |
|
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
298 | g_free(response); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
299 | return ret; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
300 | } |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
301 | |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
302 | static void fill_auth(struct simple_account_data *sip, gchar *hdr, struct sip_auth *auth) { |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
303 | int i=0; |
|
11424
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
304 | char *tmp; |
|
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
305 | char *tmp2; |
|
11439
e76bc2f9deb0
[gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents:
11424
diff
changeset
|
306 | gchar **parts; |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
307 | if(!hdr) { |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
308 | gaim_debug_error("simple", "fill_auth: hdr==NULL\n"); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
309 | return; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
310 | } |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
311 | |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
312 | if(!g_strncasecmp(hdr, "NTLM", 4)) { |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
313 | gaim_debug_info("simple", "found NTLM\n"); |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
314 | auth->type = 2; |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
315 | if(!auth->nonce && !auth->nc) { |
|
11439
e76bc2f9deb0
[gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents:
11424
diff
changeset
|
316 | parts = g_strsplit(hdr, " ", 0); |
|
11424
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
317 | while(parts[i]) { |
|
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
318 | if(!strncmp(parts[i],"targetname",10)) { |
|
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
319 | auth->target = g_strndup(parts[i]+12,strlen(parts[i]+12)-1); |
|
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
320 | } |
|
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
321 | if(!strncmp(parts[i],"realm",5)) { |
|
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
322 | tmp = strstr(hdr, "realm="); |
|
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
323 | tmp += 7; |
|
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
324 | tmp2 = strchr(tmp, '"'); |
|
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
325 | *tmp2 = 0; |
|
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
326 | auth->realm = g_strdup(tmp); |
|
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
327 | *tmp2 = '"'; |
|
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
328 | } |
|
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
329 | i++; |
|
b0f8535daa74
[gaim-migrate @ 13661]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11409
diff
changeset
|
330 | } |
|
11439
e76bc2f9deb0
[gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents:
11424
diff
changeset
|
331 | g_strfreev(parts); |
|
e76bc2f9deb0
[gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents:
11424
diff
changeset
|
332 | parts = NULL; |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
333 | auth->nc = 1; |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
334 | } |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
335 | if(!auth->nonce && auth->nc==2) { |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
336 | auth->nc = 3; |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
337 | auth->nonce = gaim_ntlm_parse_type2(hdr+5); |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
338 | } |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
339 | return; |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
340 | } |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
341 | |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
342 | auth->type = 1; |
|
11439
e76bc2f9deb0
[gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents:
11424
diff
changeset
|
343 | parts = g_strsplit(hdr, " ", 0); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
344 | while(parts[i]) { |
|
12563
1a095d6c4ce4
[gaim-migrate @ 14882]
Daniel Atallah <datallah@pidgin.im>
parents:
12492
diff
changeset
|
345 | if(!strncmp(parts[i], "nonce", 5)) { |
|
1a095d6c4ce4
[gaim-migrate @ 14882]
Daniel Atallah <datallah@pidgin.im>
parents:
12492
diff
changeset
|
346 | auth->nonce = g_strndup(parts[i]+7,strlen(parts[i]+7)-2); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
347 | } |
|
12563
1a095d6c4ce4
[gaim-migrate @ 14882]
Daniel Atallah <datallah@pidgin.im>
parents:
12492
diff
changeset
|
348 | else if(!strncmp(parts[i], "realm", 5)) { |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
349 | auth->realm = g_strndup(parts[i]+7,strlen(parts[i]+7)-2); |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
350 | } |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
351 | i++; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
352 | } |
|
11439
e76bc2f9deb0
[gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents:
11424
diff
changeset
|
353 | g_strfreev(parts); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
354 | |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
355 | gaim_debug(GAIM_DEBUG_MISC, "simple", "nonce: %s realm: %s ", auth->nonce, auth->realm); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
356 | |
|
12382
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
357 | auth->digest_session_key = gaim_cipher_http_digest_calculate_session_key( |
|
5ef67596b420
[gaim-migrate @ 14688]
Richard Laager <rlaager@pidgin.im>
parents:
12216
diff
changeset
|
358 | "md5", sip->username, auth->realm, sip->password, auth->nonce, NULL); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
359 | |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
360 | auth->nc=1; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
361 | } |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
362 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
363 | static void simple_input_cb(gpointer data, gint source, GaimInputCondition cond); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
364 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
365 | static void send_later_cb(gpointer data, gint source, GaimInputCondition cond) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
366 | GaimConnection *gc = data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
367 | struct simple_account_data *sip = gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
368 | struct sip_connection *conn; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
369 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
370 | if( source < 0 ) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
371 | gaim_connection_error(gc,"Could not connect"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
372 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
373 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
374 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
375 | sip->fd = source; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
376 | sip->connecting = 0; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
377 | write(sip->fd, sip->sendlater, strlen(sip->sendlater)); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
378 | conn = connection_create(sip, source); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
379 | conn->inputhandler = gaim_input_add(sip->fd, GAIM_INPUT_READ, simple_input_cb, gc); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
380 | g_free(sip->sendlater); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
381 | sip->sendlater = 0; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
382 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
383 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
384 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
385 | static void sendlater(GaimConnection *gc, const char *buf) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
386 | struct simple_account_data *sip = gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
387 | int error = 0; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
388 | if(!sip->connecting) { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
389 | gaim_debug_info("simple","connecting to %s port %d\n", sip->realhostname ? sip->realhostname : "{NULL}", sip->realport); |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
390 | error = gaim_proxy_connect(sip->account, sip->realhostname, sip->realport, send_later_cb, gc); |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
391 | if(error) { |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
392 | gaim_connection_error(gc, _("Couldn't create socket")); |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
393 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
394 | sip->connecting = 1; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
395 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
396 | if(sip->sendlater) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
397 | gchar *old = sip->sendlater; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
398 | sip->sendlater = g_strdup_printf("%s\r\n%s",old, buf); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
399 | } else { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
400 | sip->sendlater = g_strdup(buf); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
401 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
402 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
403 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
404 | static int sendout_pkt(GaimConnection *gc, const char *buf) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
405 | struct simple_account_data *sip = gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
406 | time_t currtime = time(NULL); |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
407 | int ret = 0; |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
408 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
409 | gaim_debug(GAIM_DEBUG_MISC, "simple", "\n\nsending - %s\n######\n%s\n######\n\n", ctime(&currtime), buf); |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
410 | if(sip->udp) { |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
411 | if(sendto(sip->fd, buf, strlen(buf), 0, (struct sockaddr*)&sip->serveraddr, sizeof(struct sockaddr_in)) < strlen(buf)) { |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
412 | gaim_debug_info("simple", "could not send packet\n"); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
413 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
414 | } else { |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
415 | if(sip->fd <0 ) { |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
416 | sendlater(gc, buf); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
417 | return 0; |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
418 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
419 | ret = write(sip->fd, buf, strlen(buf)); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
420 | if(ret < 0) { |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
421 | sendlater(gc,buf); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
422 | return 0; |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
423 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
424 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
425 | return ret; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
426 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
427 | |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
428 | static void sendout_sipmsg(struct simple_account_data *sip, struct sipmsg *msg) { |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
429 | gchar *oldstr; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
430 | gchar *outstr = g_strdup_printf("%s %s SIP/2.0\r\n", msg->method, msg->target); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
431 | gchar *name; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
432 | gchar *value; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
433 | GSList *tmp = msg->headers; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
434 | while(tmp) { |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
435 | oldstr = outstr; |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
436 | name = ((struct siphdrelement*)(tmp->data))->name; |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
437 | value = ((struct siphdrelement*)(tmp->data))->value; |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
438 | outstr = g_strdup_printf("%s%s: %s\r\n",oldstr, name, value); |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
439 | g_free(oldstr); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
440 | tmp = g_slist_next(tmp); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
441 | } |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
442 | oldstr = outstr; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
443 | if(msg->body) outstr = g_strdup_printf("%s\r\n%s", outstr, msg->body); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
444 | else outstr = g_strdup_printf("%s\r\n", outstr); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
445 | g_free(oldstr); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
446 | sendout_pkt(sip->gc, outstr); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
447 | g_free(outstr); |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
448 | } |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
449 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
450 | static void send_sip_response(GaimConnection *gc, struct sipmsg *msg, int code, char *text, char *body) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
451 | GSList *tmp = msg->headers; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
452 | char *oldstr; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
453 | char *name; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
454 | char *value; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
455 | char *outstr = g_strdup_printf("SIP/2.0 %d %s\r\n",code, text); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
456 | while(tmp) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
457 | oldstr = outstr; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
458 | name = ((struct siphdrelement*)(tmp->data))->name; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
459 | value = ((struct siphdrelement*)(tmp->data))->value; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
460 | outstr = g_strdup_printf("%s%s: %s\r\n",oldstr, name, value); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
461 | g_free(oldstr); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
462 | tmp = g_slist_next(tmp); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
463 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
464 | oldstr = outstr; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
465 | if(body) outstr = g_strdup_printf("%s\r\n%s",outstr,body); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
466 | else outstr = g_strdup_printf("%s\r\n",outstr); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
467 | g_free(oldstr); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
468 | sendout_pkt(gc, outstr); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
469 | g_free(outstr); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
470 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
471 | |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
472 | static void transactions_remove(struct simple_account_data *sip, struct transaction *trans) { |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
473 | if(trans->msg) sipmsg_free(trans->msg); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
474 | sip->transactions = g_slist_remove(sip->transactions, trans); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
475 | g_free(trans); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
476 | } |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
477 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
478 | static void transactions_add_buf(struct simple_account_data *sip, gchar *buf, void *callback) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
479 | struct transaction *trans = g_new0(struct transaction, 1); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
480 | trans->time = time(NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
481 | trans->msg = sipmsg_parse_msg(buf); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
482 | trans->cseq = sipmsg_find_header(trans->msg, "CSeq"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
483 | trans->callback = callback; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
484 | sip->transactions = g_slist_append(sip->transactions, trans); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
485 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
486 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
487 | static struct transaction *transactions_find(struct simple_account_data *sip, struct sipmsg *msg) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
488 | struct transaction *trans; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
489 | GSList *transactions = sip->transactions; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
490 | gchar *cseq = sipmsg_find_header(msg, "CSeq"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
491 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
492 | while(transactions) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
493 | trans = transactions->data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
494 | if(!strcmp(trans->cseq, cseq)) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
495 | return trans; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
496 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
497 | transactions = transactions->next; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
498 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
499 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
500 | return (struct transaction *)NULL; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
501 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
502 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
503 | static void send_sip_request(GaimConnection *gc, gchar *method, gchar *url, gchar *to, gchar *addheaders, gchar *body, struct sip_dialog *dialog, TransCallback tc) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
504 | struct simple_account_data *sip = gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
505 | char *callid= dialog ? g_strdup(dialog->callid) : gencallid(); |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12196
diff
changeset
|
506 | char *auth=""; |
|
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12196
diff
changeset
|
507 | char *addh=""; |
|
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12196
diff
changeset
|
508 | gchar *branch = genbranch(); |
|
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12196
diff
changeset
|
509 | char *buf; |
|
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12196
diff
changeset
|
510 | |
|
12196
92a07bdbe0df
[gaim-migrate @ 14498]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12143
diff
changeset
|
511 | if(!strcmp(method,"REGISTER")) { |
|
92a07bdbe0df
[gaim-migrate @ 14498]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12143
diff
changeset
|
512 | if(sip->regcallid) callid = g_strdup(sip->regcallid); |
|
92a07bdbe0df
[gaim-migrate @ 14498]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12143
diff
changeset
|
513 | else sip->regcallid = g_strdup(callid); |
|
92a07bdbe0df
[gaim-migrate @ 14498]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12143
diff
changeset
|
514 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
515 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
516 | if(addheaders) addh=addheaders; |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
517 | if(sip->registrar.type && !strcmp(method,"REGISTER")) { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
518 | buf = auth_header(sip, &sip->registrar, method, url); |
|
12563
1a095d6c4ce4
[gaim-migrate @ 14882]
Daniel Atallah <datallah@pidgin.im>
parents:
12492
diff
changeset
|
519 | auth = g_strdup_printf("Authorization: %s", buf); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
520 | g_free(buf); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
521 | gaim_debug(GAIM_DEBUG_MISC, "simple", "header %s", auth); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
522 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
523 | |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
524 | if(sip->proxy.type && strcmp(method,"REGISTER")) { |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
525 | buf = auth_header(sip, &sip->proxy, method, url); |
|
12563
1a095d6c4ce4
[gaim-migrate @ 14882]
Daniel Atallah <datallah@pidgin.im>
parents:
12492
diff
changeset
|
526 | auth = g_strdup_printf("Proxy-Authorization: %s", buf); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
527 | g_free(buf); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
528 | gaim_debug(GAIM_DEBUG_MISC, "simple", "header %s", auth); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
529 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
530 | |
|
12492
e55b436cb2c6
[gaim-migrate @ 14804]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12489
diff
changeset
|
531 | if(!sip->ip || !strcmp(sip->ip,"0.0.0.0")) { /* if there was no known ip retry now */ |
|
12196
92a07bdbe0df
[gaim-migrate @ 14498]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12143
diff
changeset
|
532 | g_free(sip->ip); |
|
92a07bdbe0df
[gaim-migrate @ 14498]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12143
diff
changeset
|
533 | sip->ip = g_strdup(gaim_network_get_public_ip()); |
|
92a07bdbe0df
[gaim-migrate @ 14498]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
12143
diff
changeset
|
534 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
535 | buf = g_strdup_printf("%s %s SIP/2.0\r\n" |
|
11190
16f02ac58a38
[gaim-migrate @ 13308]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11189
diff
changeset
|
536 | "Via: SIP/2.0/%s %s:%d;branch=%s\r\n" |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
537 | "From: <sip:%s@%s>;tag=%s\r\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
538 | "To: <%s>%s%s\r\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
539 | "Max-Forwards: 10\r\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
540 | "CSeq: %d %s\r\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
541 | "User-Agent: Gaim SIP/SIMPLE Plugin\r\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
542 | "Call-ID: %s\r\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
543 | "%s%s" |
| 11658 | 544 | "Content-Length: %" G_GSIZE_FORMAT "\r\n\r\n%s", |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
545 | method, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
546 | url, |
|
11190
16f02ac58a38
[gaim-migrate @ 13308]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11189
diff
changeset
|
547 | sip->udp ? "UDP" : "TCP", |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
548 | sip->ip ? sip->ip : "", |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
549 | sip->listenport, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
550 | branch, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
551 | sip->username, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
552 | sip->servername, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
553 | dialog ? dialog->ourtag : gentag(), |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
554 | to, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
555 | dialog ? ";tag=" : "", |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
556 | dialog ? dialog->theirtag : "", |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
557 | ++sip->cseq, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
558 | method, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
559 | callid, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
560 | auth, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
561 | addh, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
562 | strlen(body), |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
563 | body); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
564 | g_free(branch); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
565 | g_free(callid); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
566 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
567 | /* add to ongoing transactions */ |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
568 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
569 | transactions_add_buf(sip, buf, tc); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
570 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
571 | sendout_pkt(gc,buf); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
572 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
573 | g_free(buf); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
574 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
575 | |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
576 | static void do_register_exp(struct simple_account_data *sip, int expire) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
577 | char *uri = g_strdup_printf("sip:%s",sip->servername); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
578 | char *to = g_strdup_printf("sip:%s@%s",sip->username,sip->servername); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
579 | char *contact = g_strdup_printf("Contact: <sip:%s@%s:%d;transport=%s>;methods=\"MESSAGE, SUBSCRIBE, NOTIFY\"\r\nExpires: %d\r\n", sip->username, sip->ip ? sip->ip : "", sip->listenport, sip->udp ? "udp" : "tcp", expire); |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
580 | |
|
11439
e76bc2f9deb0
[gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents:
11424
diff
changeset
|
581 | sip->registerstatus = 1; |
|
e76bc2f9deb0
[gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents:
11424
diff
changeset
|
582 | |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
583 | if(expire) { |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
584 | sip->reregister = time(NULL) + expire - 50; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
585 | } else { |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
586 | sip->reregister = time(NULL) + 600; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
587 | } |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
588 | send_sip_request(sip->gc,"REGISTER",uri,to, contact, "", NULL, process_register_response); |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
589 | g_free(contact); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
590 | g_free(uri); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
591 | g_free(to); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
592 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
593 | |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
594 | static void do_register(struct simple_account_data *sip) { |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
595 | do_register_exp(sip, sip->registerexpire); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
596 | } |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
597 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
598 | static gchar *parse_from(gchar *hdr) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
599 | gchar *from = hdr; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
600 | gchar *tmp; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
601 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
602 | if(!from) return NULL; |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
603 | gaim_debug_info("simple", "parsing address out of %s\n",from); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
604 | tmp = strchr(from, '<'); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
605 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
606 | /* i hate the different SIP UA behaviours... */ |
|
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
607 | if(tmp) { /* sip address in <...> */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
608 | from = tmp+1; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
609 | tmp = strchr(from,'>'); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
610 | if(tmp) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
611 | from = g_strndup(from,tmp-from); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
612 | } else { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
613 | gaim_debug_info("simple", "found < without > in From\n"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
614 | return NULL; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
615 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
616 | } else { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
617 | tmp = strchr(from, ';'); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
618 | if(tmp) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
619 | from = g_strndup(from,tmp-from); |
|
11483
098043515257
[gaim-migrate @ 13725]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11439
diff
changeset
|
620 | } else { |
|
098043515257
[gaim-migrate @ 13725]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11439
diff
changeset
|
621 | from = g_strdup(from); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
622 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
623 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
624 | gaim_debug_info("simple", "got %s\n",from); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
625 | return from; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
626 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
627 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
628 | static gboolean process_subscribe_response(struct simple_account_data *sip, struct sipmsg *msg, struct transaction *tc) { |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
629 | gchar *to = parse_from(sipmsg_find_header(tc->msg,"To")); /* cant be NULL since it is our own msg */ |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
630 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
631 | if(msg->response==200 || msg->response==202) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
632 | return TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
633 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
634 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
635 | /* we can not subscribe -> user is offline (TODO unknown status?) */ |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
636 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
637 | gaim_prpl_got_user_status(sip->account, to, "offline", NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
638 | g_free(to); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
639 | return TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
640 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
641 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
642 | static void simple_subscribe(struct simple_account_data *sip, struct simple_buddy *buddy) { |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
643 | gchar *contact = "Expires: 300\r\nAccept: application/pidf+xml\r\nEvent: presence\r\n"; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
644 | gchar *to; |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
645 | if(strstr(buddy->name,"sip:")) to = g_strdup(buddy->name); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
646 | else to = g_strdup_printf("sip:%s",buddy->name); |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
647 | contact = g_strdup_printf("%sContact: <%s@%s>\r\n", contact, sip->username, sip->servername); |
|
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
648 | /* subscribe to buddy presence |
|
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
649 | * we dont need to know the status so we do not need a callback */ |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
650 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
651 | send_sip_request(sip->gc, "SUBSCRIBE",to, to, contact, "", NULL, process_subscribe_response); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
652 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
653 | g_free(to); |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
654 | g_free(contact); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
655 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
656 | /* resubscribe before subscription expires */ |
|
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
657 | /* add some jitter */ |
|
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
658 | buddy->resubscribe = time(NULL)+250+(rand()%50); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
659 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
660 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
661 | static void simple_buddy_resub(char *name, struct simple_buddy *buddy, struct simple_account_data *sip) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
662 | time_t curtime = time(NULL); |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
663 | gaim_debug_info("simple","buddy resub\n"); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
664 | if(buddy->resubscribe < curtime) { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
665 | gaim_debug(GAIM_DEBUG_MISC, "simple", "simple_buddy_resub %s\n",name); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
666 | simple_subscribe(sip, buddy); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
667 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
668 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
669 | |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
670 | static gboolean resend_timeout(struct simple_account_data *sip) { |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
671 | GSList *tmp = sip->transactions; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
672 | time_t currtime = time(NULL); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
673 | while(tmp) { |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
674 | struct transaction *trans = tmp->data; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
675 | tmp = tmp->next; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
676 | gaim_debug_info("simple", "have open transaction age: %d\n", currtime- trans->time); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
677 | if((currtime - trans->time > 5) && trans->retries >= 1) { |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
678 | /* TODO 408 */ |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
679 | } else { |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
680 | if((currtime - trans->time > 2) && trans->retries == 0) { |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
681 | trans->retries++; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
682 | sendout_sipmsg(sip, trans->msg); |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
683 | } |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
684 | } |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
685 | } |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
686 | return TRUE; |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
687 | } |
|
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
688 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
689 | static gboolean register_timeout(struct simple_account_data *sip) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
690 | GSList *tmp; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
691 | time_t curtime = time(NULL); |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
692 | /* register again if first registration expires */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
693 | if(sip->reregister < curtime) { |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
694 | do_register(sip); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
695 | } |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
696 | gaim_debug_info("simple","in register timeout\n"); |
|
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
697 | /* check for every subscription if we need to resubscribe */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
698 | g_hash_table_foreach(sip->buddies, (GHFunc)simple_buddy_resub, (gpointer)sip); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
699 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
700 | /* remove a timed out suscriber */ |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
701 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
702 | tmp = sip->watcher; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
703 | while(tmp) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
704 | struct simple_watcher *watcher = tmp->data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
705 | if(watcher->expire < curtime) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
706 | watcher_remove(sip, watcher->name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
707 | tmp = sip->watcher; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
708 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
709 | if(tmp) tmp = tmp->next; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
710 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
711 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
712 | return TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
713 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
714 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
715 | static void simple_send_message(struct simple_account_data *sip, char *to, char *msg, char *type) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
716 | gchar *hdr; |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
717 | if(type) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
718 | hdr = g_strdup_printf("Content-Type: %s\r\n",type); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
719 | } else { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
720 | hdr = g_strdup("Content-Type: text/plain\r\n"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
721 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
722 | send_sip_request(sip->gc, "MESSAGE", to, to, hdr, msg, NULL, NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
723 | g_free(hdr); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
724 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
725 | |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12196
diff
changeset
|
726 | static int simple_im_send(GaimConnection *gc, const char *who, const char *what, GaimMessageFlags flags) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
727 | struct simple_account_data *sip = gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
728 | char *to = g_strdup(who); |
|
12216
d80739091a63
[gaim-migrate @ 14518]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
12196
diff
changeset
|
729 | char *text = gaim_unescape_html(what); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
730 | simple_send_message(sip, to, text, NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
731 | g_free(to); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
732 | g_free(text); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
733 | return 1; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
734 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
735 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
736 | static void process_incoming_message(struct simple_account_data *sip, struct sipmsg *msg) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
737 | gchar *from; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
738 | gchar *contenttype; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
739 | gboolean found = FALSE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
740 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
741 | from = parse_from(sipmsg_find_header(msg, "From")); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
742 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
743 | if(!from) return; |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
744 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
745 | gaim_debug(GAIM_DEBUG_MISC, "simple", "got message from %s: %s\n", from, msg->body); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
746 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
747 | contenttype = sipmsg_find_header(msg, "Content-Type"); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
748 | if(!contenttype || !strncmp(contenttype, "text/plain", 10) || !strncmp(contenttype, "text/html", 9)) { |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
749 | serv_got_im(sip->gc, from, msg->body, 0, time(NULL)); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
750 | send_sip_response(sip->gc, msg, 200, "OK", NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
751 | found = TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
752 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
753 | if(!strncmp(contenttype, "application/im-iscomposing+xml",30)) { |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
754 | xmlnode *isc = xmlnode_from_str(msg->body, msg->bodylen); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
755 | xmlnode *state; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
756 | gchar *statedata; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
757 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
758 | if(!isc) { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
759 | gaim_debug_info("simple","process_incoming_message: can not parse iscomposing\n"); |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
760 | return; |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
761 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
762 | |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
763 | state = xmlnode_get_child(isc, "state"); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
764 | |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
765 | if(!state) { |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
766 | gaim_debug_info("simple","process_incoming_message: no state found\n"); |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
767 | return; |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
768 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
769 | |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
770 | statedata = xmlnode_get_data(state); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
771 | if(statedata) { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
772 | if(strstr(statedata,"active")) serv_got_typing(sip->gc, from, 0, GAIM_TYPING); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
773 | else serv_got_typing_stopped(sip->gc, from); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
774 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
775 | xmlnode_free(isc); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
776 | send_sip_response(sip->gc, msg, 200, "OK", NULL); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
777 | found = TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
778 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
779 | if(!found) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
780 | gaim_debug_info("simple", "got unknown mime-type"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
781 | send_sip_response(sip->gc, msg, 415, "Unsupported media type", NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
782 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
783 | g_free(from); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
784 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
785 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
786 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
787 | gboolean process_register_response(struct simple_account_data *sip, struct sipmsg *msg, struct transaction *tc) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
788 | gchar *tmp; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
789 | gaim_debug(GAIM_DEBUG_MISC, "simple", "in process register response response: %d\n", msg->response); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
790 | switch (msg->response) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
791 | case 200: |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
792 | if(sip->registerstatus<3) { /* registered */ |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
793 | if(gaim_account_get_bool(sip->account, "dopublish", TRUE)) { |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
794 | send_publish(sip); |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
795 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
796 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
797 | sip->registerstatus=3; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
798 | gaim_connection_set_state(sip->gc, GAIM_CONNECTED); |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
799 | |
|
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
800 | /* get buddies from blist */ |
|
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
801 | simple_get_buddies(sip->gc); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
802 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
803 | register_timeout(sip); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
804 | break; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
805 | case 401: |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
806 | if(sip->registerstatus!=2) { |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
807 | gaim_debug_info("simple","REGISTER retries %d\n",sip->registrar.retries); |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
808 | if(sip->registrar.retries>3) { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
809 | gaim_connection_error(sip->gc,"Wrong Password"); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
810 | return TRUE; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
811 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
812 | tmp = sipmsg_find_header(msg, "WWW-Authenticate"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
813 | fill_auth(sip, tmp, &sip->registrar); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
814 | sip->registerstatus=2; |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
815 | do_register(sip); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
816 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
817 | break; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
818 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
819 | return TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
820 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
821 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
822 | static void process_incoming_notify(struct simple_account_data *sip, struct sipmsg *msg) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
823 | gchar *from; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
824 | gchar *fromhdr; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
825 | gchar *tmp2; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
826 | xmlnode *pidf; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
827 | xmlnode *basicstatus; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
828 | gboolean isonline = FALSE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
829 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
830 | fromhdr = sipmsg_find_header(msg,"From"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
831 | from = parse_from(fromhdr); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
832 | if(!from) return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
833 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
834 | pidf = xmlnode_from_str(msg->body, msg->bodylen); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
835 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
836 | if(!pidf) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
837 | gaim_debug_info("simple","process_incoming_notify: no parseable pidf\n"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
838 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
839 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
840 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
841 | basicstatus = xmlnode_get_child(xmlnode_get_child(xmlnode_get_child(pidf,"tuple"),"status"), "basic"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
842 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
843 | if(!basicstatus) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
844 | gaim_debug_info("simple","process_incoming_notify: no basic found\n"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
845 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
846 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
847 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
848 | tmp2 = xmlnode_get_data(basicstatus); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
849 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
850 | if(!tmp2) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
851 | gaim_debug_info("simple","process_incoming_notify: no basic data found\n"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
852 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
853 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
854 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
855 | if(strstr(tmp2, "open")) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
856 | isonline = TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
857 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
858 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
859 | if(isonline) gaim_prpl_got_user_status(sip->account, from, "available", NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
860 | else gaim_prpl_got_user_status(sip->account, from, "offline", NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
861 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
862 | xmlnode_free(pidf); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
863 | |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
864 | g_free(from); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
865 | send_sip_response(sip->gc, msg, 200, "OK", NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
866 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
867 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
868 | static int simple_typing(GaimConnection *gc, const char *name, int typing) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
869 | struct simple_account_data *sip = gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
870 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
871 | gchar *xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
872 | "<isComposing xmlns=\"urn:ietf:params:xml:ns:im-iscomposing\"\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
873 | "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
874 | "xsi:schemaLocation=\"urn:ietf:params:xml:ns:im-composing iscomposing.xsd\">\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
875 | "<state>%s</state>\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
876 | "<contenttype>text/plain</contenttype>\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
877 | "<refresh>60</refresh>\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
878 | "</isComposing>"; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
879 | gchar *recv = g_strdup(name); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
880 | if(typing == GAIM_TYPING) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
881 | gchar *msg = g_strdup_printf(xml, "active"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
882 | simple_send_message(sip, recv, msg, "application/im-iscomposing+xml"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
883 | g_free(msg); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
884 | } else { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
885 | gchar *msg = g_strdup_printf(xml, "idle"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
886 | simple_send_message(sip, recv, msg, "application/im-iscomposing+xml"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
887 | g_free(msg); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
888 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
889 | g_free(recv); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
890 | return 1; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
891 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
892 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
893 | static gchar *find_tag(gchar *hdr) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
894 | gchar *tmp = strstr(hdr, ";tag="); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
895 | gchar *tmp2; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
896 | if(!tmp) return NULL; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
897 | tmp += 5; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
898 | if((tmp2 = strchr(tmp, ';'))) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
899 | tmp2[0] = '\0'; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
900 | tmp = g_strdup(tmp); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
901 | tmp2[0] = ';'; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
902 | return tmp; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
903 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
904 | return g_strdup(tmp); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
905 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
906 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
907 | static gchar* gen_pidf(struct simple_account_data *sip) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
908 | gchar *doc = g_strdup_printf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
909 | "<presence xmlns=\"urn:ietf:params:xml:ns:pidf\"\n" |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
910 | "xmlns:im=\"urn:ietf:params:xml:ns:pidf:im\"\n" |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
911 | "entity=\"sip:%s@%s\">\n" |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
912 | "<tuple id=\"bs35r9f\">\n" |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
913 | "<status>\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
914 | "<basic>open</basic>\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
915 | "<im:im>%s</im:im>\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
916 | "</status>\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
917 | "</tuple>\n" |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
918 | "</presence>", |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
919 | sip->username, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
920 | sip->servername, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
921 | sip->status); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
922 | return doc; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
923 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
924 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
925 | static void send_notify(struct simple_account_data *sip, struct simple_watcher *watcher) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
926 | gchar *doc = gen_pidf(sip); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
927 | send_sip_request(sip->gc, "NOTIFY", watcher->name, watcher->name, "Event: presence\r\nContent-Type: application/pidf+xml\r\n", doc, &watcher->dialog, NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
928 | g_free(doc); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
929 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
930 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
931 | static gboolean process_publish_response(struct simple_account_data *sip, struct sipmsg *msg, struct transaction *tc) { |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
932 | if(msg->response != 200 && msg->response != 408) { |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
933 | /* never send again */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
934 | sip->republish = -1; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
935 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
936 | return TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
937 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
938 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
939 | static void send_publish(struct simple_account_data *sip) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
940 | gchar *uri = g_strdup_printf("sip:%s@%s", sip->username, sip->servername); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
941 | gchar *doc = gen_pidf(sip); |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
942 | send_sip_request(sip->gc, "PUBLISH", uri, uri, "Expires: 600\r\nEvent: presence\r\nContent-Type: application/pidf+xml\r\n", doc, NULL, process_publish_response); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
943 | sip->republish = time(NULL) + 500; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
944 | g_free(doc); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
945 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
946 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
947 | static void process_incoming_subscribe(struct simple_account_data *sip, struct sipmsg *msg) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
948 | gchar *from = parse_from(sipmsg_find_header(msg, "From")); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
949 | gchar *theirtag = find_tag(sipmsg_find_header(msg, "From")); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
950 | gchar *ourtag = find_tag(sipmsg_find_header(msg, "To")); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
951 | gboolean tagadded = FALSE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
952 | gchar *callid = sipmsg_find_header(msg, "Call-ID"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
953 | gchar *expire = sipmsg_find_header(msg, "Expire"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
954 | gchar *tmp; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
955 | struct simple_watcher *watcher = watcher_find(sip, from); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
956 | if(!ourtag) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
957 | tagadded = TRUE; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
958 | ourtag = gentag(); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
959 | } |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
960 | if(!watcher) { /* new subscription */ |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
961 | if(!gaim_privacy_check(sip->account, from)) { |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
962 | send_sip_response(sip->gc, msg, 202, "Ok", NULL); |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
963 | goto privend; |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
964 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
965 | watcher = watcher_create(sip, from, callid, ourtag, theirtag); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
966 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
967 | if(tagadded) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
968 | gchar *to = g_strdup_printf("%s;tag=%s", sipmsg_find_header(msg, "To"), ourtag); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
969 | sipmsg_remove_header(msg, "To"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
970 | sipmsg_add_header(msg, "To", to); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
971 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
972 | if(expire) |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
973 | watcher->expire = time(NULL) + strtol(expire, NULL, 10); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
974 | else |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
975 | watcher->expire = time(NULL) + 600; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
976 | sipmsg_remove_header(msg, "Contact"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
977 | tmp = g_strdup_printf("<%s@%s>",sip->username, sip->servername); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
978 | sipmsg_add_header(msg, "Contact", tmp); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
979 | gaim_debug_info("simple","got subscribe: name %s ourtag %s theirtag %s callid %s\n", watcher->name, watcher->dialog.ourtag, watcher->dialog.theirtag, watcher->dialog.callid); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
980 | send_sip_response(sip->gc, msg, 200, "Ok", NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
981 | g_free(tmp); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
982 | send_notify(sip, watcher); |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
983 | privend: |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
984 | g_free(from); |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
985 | g_free(theirtag); |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
986 | g_free(ourtag); |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
987 | g_free(callid); |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
988 | g_free(expire); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
989 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
990 | |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
991 | static void process_input_message(struct simple_account_data *sip, struct sipmsg *msg) { |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
992 | int found = 0; |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
993 | if( msg->response == 0 ) { /* request */ |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
994 | if(!strcmp(msg->method, "MESSAGE")) { |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
995 | process_incoming_message(sip, msg); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
996 | found = 1; |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
997 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
998 | if(!strcmp(msg->method, "NOTIFY")) { |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
999 | process_incoming_notify(sip, msg); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1000 | found = 1; |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1001 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1002 | if(!strcmp(msg->method, "SUBSCRIBE")) { |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1003 | process_incoming_subscribe(sip, msg); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1004 | found = 1; |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1005 | } |
|
11190
16f02ac58a38
[gaim-migrate @ 13308]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11189
diff
changeset
|
1006 | if(!found) { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1007 | send_sip_response(sip->gc, msg, 501, "Not implemented", NULL); |
|
11190
16f02ac58a38
[gaim-migrate @ 13308]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11189
diff
changeset
|
1008 | } |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1009 | } else { /* response */ |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1010 | struct transaction *trans = transactions_find(sip, msg); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1011 | if(trans) { |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1012 | if(msg->response == 407) { |
|
11439
e76bc2f9deb0
[gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents:
11424
diff
changeset
|
1013 | gchar *resend, *auth, *ptmp; |
|
e76bc2f9deb0
[gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents:
11424
diff
changeset
|
1014 | |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
1015 | if(sip->proxy.retries>3) return; |
|
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
1016 | sip->proxy.retries++; |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1017 | /* do proxy authentication */ |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1018 | |
|
11439
e76bc2f9deb0
[gaim-migrate @ 13676]
Daniel Atallah <datallah@pidgin.im>
parents:
11424
diff
changeset
|
1019 | ptmp = sipmsg_find_header(msg, "Proxy-Authenticate"); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1020 | |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1021 | fill_auth(sip, ptmp, &sip->proxy); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
1022 | auth = auth_header(sip, &sip->proxy, trans->msg->method, trans->msg->target); |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1023 | sipmsg_remove_header(msg, "Proxy-Authorization"); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1024 | sipmsg_add_header(trans->msg, "Proxy-Authorization", auth); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1025 | g_free(auth); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1026 | resend = sipmsg_to_string(trans->msg); |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1027 | /* resend request */ |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1028 | sendout_pkt(sip->gc, resend); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1029 | g_free(resend); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1030 | } else { |
|
11517
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1031 | if(msg->response == 100) { |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1032 | /* ignore provisional response */ |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1033 | gaim_debug_info("simple","got trying response\n"); |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1034 | } else { |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1035 | sip->proxy.retries = 0; |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1036 | if(msg->response == 401) sip->registrar.retries++; |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1037 | else sip->registrar.retries = 0; |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1038 | if(trans->callback) { |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1039 | /* call the callback to process response*/ |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1040 | (trans->callback)(sip, msg, trans); |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1041 | } |
|
a3d6d136b7dd
[gaim-migrate @ 13762]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11483
diff
changeset
|
1042 | transactions_remove(sip, trans); |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1043 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1044 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1045 | found = 1; |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1046 | } else { |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1047 | gaim_debug(GAIM_DEBUG_MISC, "simple", "received response to unknown transaction"); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1048 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1049 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1050 | if(!found) { |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1051 | gaim_debug(GAIM_DEBUG_MISC, "simple", "received a unknown sip message with method %sand response %d\n",msg->method, msg->response); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1052 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1053 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1054 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1055 | static void process_input(struct simple_account_data *sip, struct sip_connection *conn) |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1056 | { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1057 | char *cur; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1058 | char *dummy; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1059 | struct sipmsg *msg; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1060 | int restlen; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1061 | cur = conn->inbuf; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1062 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1063 | /* according to the RFC remove CRLF at the beginning */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1064 | while(*cur == '\r' || *cur == '\n') { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1065 | cur++; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1066 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1067 | if(cur != conn->inbuf) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1068 | memmove(conn->inbuf, cur, conn->inbufused-(cur-conn->inbuf)); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1069 | conn->inbufused=strlen(conn->inbuf); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1070 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1071 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1072 | /* Received a full Header? */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1073 | if((cur = strstr(conn->inbuf, "\r\n\r\n"))!=NULL) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1074 | time_t currtime = time(NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1075 | cur += 2; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1076 | cur[0] = '\0'; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1077 | gaim_debug_info("simple","\n\nreceived - %s\n######\n%s\n#######\n\n",ctime(&currtime), conn->inbuf); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1078 | msg = sipmsg_parse_header(conn->inbuf); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1079 | cur[0] = '\r'; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1080 | cur += 2; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1081 | restlen = conn->inbufused - (cur-conn->inbuf); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1082 | if(restlen>=msg->bodylen) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1083 | dummy = g_malloc(msg->bodylen+1); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1084 | memcpy(dummy, cur, msg->bodylen); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1085 | dummy[msg->bodylen]='\0'; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1086 | msg->body = dummy; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1087 | cur+=msg->bodylen; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1088 | memmove(conn->inbuf, cur, conn->inbuflen); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1089 | conn->inbufused=strlen(conn->inbuf); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1090 | } else { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1091 | sipmsg_free(msg); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1092 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1093 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1094 | gaim_debug(GAIM_DEBUG_MISC, "simple", "in process response response: %d\n", msg->response); |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1095 | process_input_message(sip,msg); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1096 | } else { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1097 | gaim_debug(GAIM_DEBUG_MISC, "simple", "received a incomplete sip msg: %s\n", conn->inbuf); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1098 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1099 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1100 | |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1101 | static void simple_udp_process(gpointer data, gint source, GaimInputCondition con) { |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1102 | GaimConnection *gc = data; |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1103 | struct simple_account_data *sip = gc->proto_data; |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1104 | struct sipmsg *msg; |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1105 | int len; |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1106 | time_t currtime; |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1107 | |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1108 | static char buffer[65536]; |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1109 | len = recv(source, buffer, 65536, 0); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1110 | buffer[len] = 0; |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1111 | gaim_debug_info("simple","\n\nreceived - %s\n######\n%s\n#######\n\n",ctime(&currtime), buffer); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1112 | msg = sipmsg_parse_msg(buffer); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1113 | if(msg) process_input_message(sip, msg); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1114 | } |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1115 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1116 | static void simple_input_cb(gpointer data, gint source, GaimInputCondition cond) |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1117 | { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1118 | GaimConnection *gc = data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1119 | struct simple_account_data *sip = gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1120 | int len; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1121 | struct sip_connection *conn = connection_find(sip, source); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1122 | if(!conn) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1123 | gaim_debug_error("simple", "Connection not found!\n"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1124 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1125 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1126 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1127 | if (conn->inbuflen < conn->inbufused + SIMPLE_BUF_INC) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1128 | conn->inbuflen += SIMPLE_BUF_INC; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1129 | conn->inbuf = g_realloc(conn->inbuf, conn->inbuflen); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1130 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1131 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1132 | if ((len = read(source, conn->inbuf + conn->inbufused, SIMPLE_BUF_INC - 1)) <= 0) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1133 | gaim_debug_info("simple","simple_input_cb: read error\n"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1134 | connection_remove(sip, source); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1135 | if(sip->fd == source) sip->fd = -1; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1136 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1137 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1138 | if(len == 0) { |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1139 | /* connection was closed */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1140 | connection_remove(sip, source); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1141 | if(sip->fd == source) sip->fd = -1; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1142 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1143 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1144 | conn->inbufused += len; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1145 | conn->inbuf[conn->inbufused]='\0'; |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1146 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1147 | process_input(sip, conn); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1148 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1149 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1150 | /* Callback for new connections on incoming TCP port */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1151 | static void simple_newconn_cb(gpointer data, gint source, GaimInputCondition cond) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1152 | GaimConnection *gc = data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1153 | struct simple_account_data *sip = gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1154 | struct sip_connection *conn; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1155 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1156 | int newfd = accept(source, NULL, NULL); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1157 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1158 | conn = connection_create(sip, newfd); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1159 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1160 | conn->inputhandler = gaim_input_add(newfd, GAIM_INPUT_READ, simple_input_cb, gc); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1161 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1162 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1163 | static void login_cb(gpointer data, gint source, GaimInputCondition cond) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1164 | GaimConnection *gc = data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1165 | struct simple_account_data *sip = gc->proto_data; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1166 | struct sip_connection *conn; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1167 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1168 | if( source < 0 ) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1169 | gaim_connection_error(gc,"Could not connect"); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1170 | return; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1171 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1172 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1173 | sip->fd = source; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1174 | |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1175 | conn = connection_create(sip, source); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1176 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1177 | /* get the local ip */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1178 | sip->ip = g_strdup(gaim_network_get_my_ip(source)); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1179 | |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
1180 | do_register(sip); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1181 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1182 | conn->inputhandler = gaim_input_add(sip->fd, GAIM_INPUT_READ, simple_input_cb, gc); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1183 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1184 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1185 | static guint simple_ht_hash_nick(const char *nick) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1186 | char *lc = g_utf8_strdown(nick, -1); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1187 | guint bucket = g_str_hash(lc); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1188 | g_free(lc); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1189 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1190 | return bucket; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1191 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1192 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1193 | static gboolean simple_ht_equals_nick(const char *nick1, const char *nick2) { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1194 | return (gaim_utf8_strcasecmp(nick1, nick2) == 0); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1195 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1196 | |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1197 | static void srvresolved(struct srv_response *resp, int results, gpointer data) { |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1198 | struct simple_account_data *sip = (struct simple_account_data*) data; |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1199 | |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1200 | gchar *hostname; |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1201 | int port = 5060; |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1202 | |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1203 | int error = 0; |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1204 | struct sockaddr_in addr; |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1205 | struct hostent *h; |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1206 | |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1207 | /* find the host to connect to */ |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1208 | if(results) { |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1209 | hostname = g_strdup(resp->hostname); |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1210 | port = resp->port; |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1211 | g_free(resp); |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1212 | } else { |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1213 | if(!gaim_account_get_bool(sip->account, "useproxy", FALSE)) { |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1214 | hostname = g_strdup(sip->servername); |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1215 | } else { |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1216 | hostname = g_strdup(gaim_account_get_string(sip->account, "proxy", sip->servername)); |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1217 | } |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1218 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1219 | |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1220 | sip->realhostname = hostname; |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1221 | sip->realport = port; |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1222 | /* TCP case */ |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1223 | if(! sip->udp) { |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
1224 | /* create socket for incoming connections */ |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
1225 | sip->listenfd = gaim_network_listen_range(5060, 5160); |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
1226 | if(sip->listenfd == -1) { |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
1227 | gaim_connection_error(sip->gc, _("Could not create listen socket")); |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
1228 | return; |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
1229 | } |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
1230 | gaim_debug_info("simple", "listenfd: %d\n", sip->listenfd); |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
1231 | sip->listenport = gaim_network_get_port_from_fd(sip->listenfd); |
|
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
1232 | sip->listenpa = gaim_input_add(sip->listenfd, GAIM_INPUT_READ, simple_newconn_cb, sip->gc); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1233 | gaim_debug_info("simple","connecting to %s port %d\n", hostname, port); |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1234 | /* open tcp connection to the server */ |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1235 | error = gaim_proxy_connect(sip->account, hostname, port, login_cb, sip->gc); |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1236 | if(error) { |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1237 | gaim_connection_error(sip->gc, _("Couldn't create socket")); |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1238 | } |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1239 | |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1240 | } else { /* UDP */ |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1241 | gaim_debug_info("simple", "using udp with server %s and port %d\n", hostname, port); |
|
12565
8601c9c26f93
[gaim-migrate @ 14884]
Daniel Atallah <datallah@pidgin.im>
parents:
12563
diff
changeset
|
1242 | |
|
8601c9c26f93
[gaim-migrate @ 14884]
Daniel Atallah <datallah@pidgin.im>
parents:
12563
diff
changeset
|
1243 | /** TODO: this should probably be async, right? */ |
|
8601c9c26f93
[gaim-migrate @ 14884]
Daniel Atallah <datallah@pidgin.im>
parents:
12563
diff
changeset
|
1244 | if (!(h = gethostbyname(hostname))) { |
|
8601c9c26f93
[gaim-migrate @ 14884]
Daniel Atallah <datallah@pidgin.im>
parents:
12563
diff
changeset
|
1245 | gaim_connection_error(sip->gc, _("Couldn't resolve host")); |
|
12570
9ceb20289861
[gaim-migrate @ 14889]
Daniel Atallah <datallah@pidgin.im>
parents:
12565
diff
changeset
|
1246 | return; |
|
12565
8601c9c26f93
[gaim-migrate @ 14884]
Daniel Atallah <datallah@pidgin.im>
parents:
12563
diff
changeset
|
1247 | } |
|
8601c9c26f93
[gaim-migrate @ 14884]
Daniel Atallah <datallah@pidgin.im>
parents:
12563
diff
changeset
|
1248 | |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1249 | sip->fd = socket(AF_INET, SOCK_DGRAM, 0); |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1250 | |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1251 | addr.sin_family = AF_INET; |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1252 | addr.sin_port = htons(5060); |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1253 | addr.sin_addr.s_addr = INADDR_ANY; |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1254 | while((bind(sip->fd, (struct sockaddr*)&addr, sizeof(struct sockaddr_in)) <0) && ntohs(addr.sin_port)<5160) { |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1255 | addr.sin_port = htons(ntohs(addr.sin_port)+1); |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1256 | } |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1257 | sip->listenport = ntohs(addr.sin_port); |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1258 | sip->listenfd = sip->fd; |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1259 | |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1260 | gaim_input_add(sip->fd, GAIM_INPUT_READ, simple_udp_process, sip->gc); |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1261 | sip->serveraddr.sin_family = AF_INET; |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1262 | sip->serveraddr.sin_port = htons(port); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1263 | |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1264 | sip->serveraddr.sin_addr.s_addr = ((struct in_addr*)h->h_addr)->s_addr; |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1265 | sip->ip = g_strdup(gaim_network_get_my_ip(sip->listenfd)); |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1266 | sip->resendtimeout = gaim_timeout_add(2500, (GSourceFunc)resend_timeout, sip); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1267 | do_register(sip); |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1268 | } |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1269 | } |
|
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1270 | |
|
11837
2f1206084fef
[gaim-migrate @ 14128]
Mark Doliner <markdoliner@pidgin.im>
parents:
11718
diff
changeset
|
1271 | static void simple_login(GaimAccount *account) |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1272 | { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1273 | GaimConnection *gc; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1274 | struct simple_account_data *sip; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1275 | gchar **userserver; |
|
11210
95ba2527d7d1
[gaim-migrate @ 13341]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11194
diff
changeset
|
1276 | gchar *hosttoconnect; |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1277 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1278 | const char *username = gaim_account_get_username(account); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1279 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1280 | gc = gaim_account_get_connection(account); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1281 | gc->proto_data = sip = g_new0(struct simple_account_data,1); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1282 | sip->gc=gc; |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1283 | sip->account = account; |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
1284 | sip->registerexpire = 900; |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1285 | sip->udp = gaim_account_get_bool(account, "udp", FALSE); |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1286 | if (strpbrk(username, " \t\v\r\n") != NULL) { |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1287 | gaim_connection_error(gc, _("SIP usernames may not contain whitespaces or @ symbols")); |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1288 | return; |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1289 | } |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1290 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1291 | userserver = g_strsplit(username, "@", 2); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1292 | gaim_connection_set_display_name(gc,userserver[0]); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1293 | sip->username = g_strdup(userserver[0]); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1294 | sip->servername = g_strdup(userserver[1]); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1295 | sip->password = g_strdup(gaim_connection_get_password(gc)); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1296 | g_strfreev(userserver); |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1297 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1298 | sip->buddies = g_hash_table_new((GHashFunc)simple_ht_hash_nick, (GEqualFunc)simple_ht_equals_nick); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1299 | |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1300 | gaim_connection_update_progress(gc, _("Connecting"), 1, 2); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1301 | |
|
11837
2f1206084fef
[gaim-migrate @ 14128]
Mark Doliner <markdoliner@pidgin.im>
parents:
11718
diff
changeset
|
1302 | /* TODO: Set the status correctly. */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1303 | sip->status = g_strdup("available"); |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1304 | |
|
11210
95ba2527d7d1
[gaim-migrate @ 13341]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11194
diff
changeset
|
1305 | if(!gaim_account_get_bool(account, "useproxy", FALSE)) { |
|
95ba2527d7d1
[gaim-migrate @ 13341]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11194
diff
changeset
|
1306 | hosttoconnect = g_strdup(sip->servername); |
|
95ba2527d7d1
[gaim-migrate @ 13341]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11194
diff
changeset
|
1307 | } else { |
|
95ba2527d7d1
[gaim-migrate @ 13341]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11194
diff
changeset
|
1308 | hosttoconnect = g_strdup(gaim_account_get_string(account, "proxy", sip->servername)); |
|
95ba2527d7d1
[gaim-migrate @ 13341]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11194
diff
changeset
|
1309 | } |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1310 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1311 | /* TCP case */ |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1312 | if(! sip->udp) { |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1313 | gaim_srv_resolve("sip","tcp",hosttoconnect,srvresolved, sip); |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1314 | } else { /* UDP */ |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1315 | gaim_srv_resolve("sip","udp",hosttoconnect,srvresolved, sip); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1316 | } |
|
11210
95ba2527d7d1
[gaim-migrate @ 13341]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11194
diff
changeset
|
1317 | g_free(hosttoconnect); |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1318 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1319 | /* register timeout callback for register / subscribe renewal */ |
|
12489
14274d68d499
[gaim-migrate @ 14801]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
12456
diff
changeset
|
1320 | /* TODO: What if the timeout is called before gaim_srv_resolve() finishes?! */ |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
1321 | sip->registertimeout = gaim_timeout_add((rand()%100)+10*1000, (GSourceFunc)register_timeout, sip); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1322 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1323 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1324 | static void simple_close(GaimConnection *gc) |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1325 | { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1326 | struct simple_account_data *sip = gc->proto_data; |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
1327 | |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1328 | /* unregister */ |
|
11194
47dc0e9a757a
[gaim-migrate @ 13317]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11192
diff
changeset
|
1329 | do_register_exp(sip, 0); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
1330 | connection_free_all(sip); |
|
11341
5511bbeeb3b4
[gaim-migrate @ 13555]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11327
diff
changeset
|
1331 | if(sip) { |
|
11650
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
1332 | g_free(sip->servername); |
|
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
1333 | g_free(sip->username); |
|
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
1334 | g_free(sip->password); |
|
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
1335 | g_free(sip->registrar.nonce); |
|
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
1336 | g_free(sip->registrar.realm); |
|
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
1337 | g_free(sip->proxy.nonce); |
|
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
1338 | g_free(sip->proxy.realm); |
|
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
1339 | g_free(sip->sendlater); |
|
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
1340 | g_free(sip->ip); |
|
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
1341 | g_free(sip->realhostname); |
|
11409
2a3466f4a32c
[gaim-migrate @ 13646]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11396
diff
changeset
|
1342 | if(sip->listenpa) gaim_input_remove(sip->listenpa); |
|
12571
7c80d5a7d9f7
[gaim-migrate @ 14890]
Daniel Atallah <datallah@pidgin.im>
parents:
12570
diff
changeset
|
1343 | if(sip->resendtimeout) gaim_timeout_remove(sip->resendtimeout); |
|
11346
4af1dc4b2c44
[gaim-migrate @ 13563]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11345
diff
changeset
|
1344 | if(sip->registertimeout) gaim_timeout_remove(sip->registertimeout); |
|
11383
2c5a70e62389
[gaim-migrate @ 13610]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11346
diff
changeset
|
1345 | sip->servername = sip->username = sip->password = sip->registrar.nonce = sip->registrar.realm = sip->proxy.nonce = sip->proxy.realm = sip->sendlater = sip->ip = sip->realhostname = NULL; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1346 | } |
|
11650
757d7fbd4ca9
[gaim-migrate @ 13931]
Mark Doliner <markdoliner@pidgin.im>
parents:
11522
diff
changeset
|
1347 | g_free(gc->proto_data); |
|
12571
7c80d5a7d9f7
[gaim-migrate @ 14890]
Daniel Atallah <datallah@pidgin.im>
parents:
12570
diff
changeset
|
1348 | gc->proto_data = NULL; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1349 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1350 | |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1351 | /* not needed since privacy is checked for every subscribe */ |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1352 | static void dummy_add_deny(GaimConnection *gc, const char *name) { |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1353 | } |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1354 | |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1355 | static void dummy_permit_deny(GaimConnection *gc) { |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1356 | } |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1357 | |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1358 | static GaimPluginProtocolInfo prpl_info = |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1359 | { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1360 | 0, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1361 | NULL, /* user_splits */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1362 | NULL, /* protocol_options */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1363 | NO_BUDDY_ICONS, /* icon_spec */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1364 | simple_list_icon, /* list_icon */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1365 | NULL, /* list_emblems */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1366 | NULL, /* status_text */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1367 | NULL, /* tooltip_text */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1368 | simple_status_types, /* away_states */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1369 | NULL, /* blist_node_menu */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1370 | NULL, /* chat_info */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1371 | NULL, /* chat_info_defaults */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1372 | simple_login, /* login */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1373 | simple_close, /* close */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1374 | simple_im_send, /* send_im */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1375 | NULL, /* set_info */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1376 | simple_typing, /* send_typing */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1377 | NULL, /* get_info */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1378 | simple_set_status, /* set_status */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1379 | NULL, /* set_idle */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1380 | NULL, /* change_passwd */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1381 | simple_add_buddy, /* add_buddy */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1382 | NULL, /* add_buddies */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1383 | simple_remove_buddy, /* remove_buddy */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1384 | NULL, /* remove_buddies */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1385 | dummy_add_deny, /* add_permit */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1386 | dummy_add_deny, /* add_deny */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1387 | dummy_add_deny, /* rem_permit */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1388 | dummy_add_deny, /* rem_deny */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1389 | dummy_permit_deny, /* set_permit_deny */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1390 | NULL, /* join_chat */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1391 | NULL, /* reject_chat */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1392 | NULL, /* get_chat_name */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1393 | NULL, /* chat_invite */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1394 | NULL, /* chat_leave */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1395 | NULL, /* chat_whisper */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1396 | NULL, /* chat_send */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1397 | simple_keep_alive, /* keepalive */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1398 | NULL, /* register_user */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1399 | NULL, /* get_cb_info */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1400 | NULL, /* get_cb_away */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1401 | NULL, /* alias_buddy */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1402 | NULL, /* group_buddy */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1403 | NULL, /* rename_group */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1404 | NULL, /* buddy_free */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1405 | NULL, /* convo_closed */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1406 | NULL, /* normalize */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1407 | NULL, /* set_buddy_icon */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1408 | NULL, /* remove_group */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1409 | NULL, /* get_cb_real_name */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1410 | NULL, /* set_chat_topic */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1411 | NULL, /* find_blist_chat */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1412 | NULL, /* roomlist_get_list */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1413 | NULL, /* roomlist_cancel */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1414 | NULL, /* roomlist_expand_category */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1415 | NULL, /* can_receive_file */ |
|
12143
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1416 | NULL, /* send_file */ |
|
09f216663302
[gaim-migrate @ 14444]
Evan Schoenberg <evands@pidgin.im>
parents:
11837
diff
changeset
|
1417 | NULL /* new_xfer */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1418 | }; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1419 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1420 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1421 | static GaimPluginInfo info = |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1422 | { |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1423 | GAIM_PLUGIN_MAGIC, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1424 | GAIM_MAJOR_VERSION, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1425 | GAIM_MINOR_VERSION, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1426 | GAIM_PLUGIN_PROTOCOL, /**< type */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1427 | NULL, /**< ui_requirement */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1428 | 0, /**< flags */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1429 | NULL, /**< dependencies */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1430 | GAIM_PRIORITY_DEFAULT, /**< priority */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1431 | |
|
12489
14274d68d499
[gaim-migrate @ 14801]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
12456
diff
changeset
|
1432 | "prpl-simple", /**< id */ |
|
14274d68d499
[gaim-migrate @ 14801]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
12456
diff
changeset
|
1433 | "SIMPLE", /**< name */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1434 | VERSION, /**< version */ |
|
12489
14274d68d499
[gaim-migrate @ 14801]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
12456
diff
changeset
|
1435 | N_("SIP/SIMPLE Protocol Plugin"), /** summary */ |
|
14274d68d499
[gaim-migrate @ 14801]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
12456
diff
changeset
|
1436 | N_("The SIP/SIMPLE Protocol Plugin"), /** description */ |
|
14274d68d499
[gaim-migrate @ 14801]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
12456
diff
changeset
|
1437 | "Thomas Butter <butter@uni-mannheim.de>", /**< author */ |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1438 | GAIM_WEBSITE, /**< homepage */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1439 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1440 | NULL, /**< load */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1441 | NULL, /**< unload */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1442 | NULL, /**< destroy */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1443 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1444 | NULL, /**< ui_info */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1445 | &prpl_info, /**< extra_info */ |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1446 | NULL, |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1447 | NULL |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1448 | }; |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1449 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1450 | static void _init_plugin(GaimPlugin *plugin) |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1451 | { |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1452 | GaimAccountUserSplit *split; |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1453 | GaimAccountOption *option; |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1454 | |
|
11396
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1455 | split = gaim_account_user_split_new(_("Server"), "", '@'); |
|
468e60b682cd
[gaim-migrate @ 13627]
Daniel Atallah <datallah@pidgin.im>
parents:
11383
diff
changeset
|
1456 | prpl_info.user_splits = g_list_append(prpl_info.user_splits, split); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1457 | |
|
12489
14274d68d499
[gaim-migrate @ 14801]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
12456
diff
changeset
|
1458 | option = gaim_account_option_bool_new(_("Publish status (note: everyone may watch you)"), "dopublish", TRUE); |
|
11345
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1459 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
|
48a2f93e47b6
[gaim-migrate @ 13562]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11341
diff
changeset
|
1460 | |
|
11189
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1461 | option = gaim_account_option_bool_new(_("Use UDP"), "udp", FALSE); |
|
5ac07336091e
[gaim-migrate @ 13307]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11181
diff
changeset
|
1462 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
|
12489
14274d68d499
[gaim-migrate @ 14801]
Björn Voigt <bjoern@cs.tu-berlin.de>
parents:
12456
diff
changeset
|
1463 | option = gaim_account_option_bool_new(_("Use proxy"), "useproxy", FALSE); |
|
11210
95ba2527d7d1
[gaim-migrate @ 13341]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11194
diff
changeset
|
1464 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
|
95ba2527d7d1
[gaim-migrate @ 13341]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11194
diff
changeset
|
1465 | option = gaim_account_option_string_new(_("Proxy"), "proxy", ""); |
|
95ba2527d7d1
[gaim-migrate @ 13341]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
11194
diff
changeset
|
1466 | prpl_info.protocol_options = g_list_append(prpl_info.protocol_options, option); |
|
11181
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1467 | } |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1468 | |
|
e872a55b9524
[gaim-migrate @ 13292]
Thomas Butter <tbutter@users.sourceforge.net>
parents:
diff
changeset
|
1469 | GAIM_INIT_PLUGIN(simple, _init_plugin, info); |