src/protocols/oscar/conn.c

Sun, 12 Feb 2006 21:27:04 +0000

author
Mark Doliner <markdoliner@pidgin.im>
date
Sun, 12 Feb 2006 21:27:04 +0000
changeset 13254
3fbb3f3efba7
parent 13253
5ad8373f2d1e
child 13255
b318f395092d
permissions
-rw-r--r--

[gaim-migrate @ 15619]
More cleaning up of oscar. Renamed some functions to be more clear.
Got rid of some stuff that wasn't used. Inlined some small things
in conn.c that were only used once.

The goals of all this are
1. Non-blocking I/O for all connections
2. p2p stuff won't use the same struct as oscar connections, because
that's stupid
3. The oscar PRPL should be less scary

13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
1 /*
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
2 * Gaim's oscar protocol plugin
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
3 * This file is the legal property of its developers.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
4 * Please see the AUTHORS file distributed alongside this file.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
5 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
6 * This library is free software; you can redistribute it and/or
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
7 * modify it under the terms of the GNU Lesser General Public
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
8 * License as published by the Free Software Foundation; either
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
9 * version 2 of the License, or (at your option) any later version.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
10 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
11 * This library is distributed in the hope that it will be useful,
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
14 * Lesser General Public License for more details.
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
15 *
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
16 * You should have received a copy of the GNU Lesser General Public
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
17 * License along with this library; if not, write to the Free Software
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
19 */
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
20
8888
2e0a3c5d3629 [gaim-migrate @ 9657]
Mark Doliner <markdoliner@pidgin.im>
parents: 8880
diff changeset
21 /**
8880
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
22 * Low-level connection handling.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
23 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
24 * Does all this gloriously nifty connection handling stuff...
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
25 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26 */
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
27
13235
72bddc689630 [gaim-migrate @ 15600]
Mark Doliner <markdoliner@pidgin.im>
parents: 12414
diff changeset
28 #include "oscar.h"
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
29
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
30 #ifndef _WIN32
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
31 #include <netdb.h>
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
32 #include <sys/socket.h>
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
33 #include <netinet/in.h>
3717
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3694
diff changeset
34 #endif
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3694
diff changeset
35
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3694
diff changeset
36 #ifdef _WIN32
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3694
diff changeset
37 #include "win32dep.h"
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
38 #endif
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
39
8880
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
40 /**
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
41 * In OSCAR, every connection has a set of SNAC groups associated
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
42 * with it. These are the groups that you can send over this connection
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
43 * without being guaranteed a "Not supported" SNAC error.
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
44 *
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
45 * The grand theory of things says that these associations transcend
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
46 * what libfaim calls "connection types" (conn->type). You can probably
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
47 * see the elegance here, but since I want to revel in it for a bit, you
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
48 * get to hear it all spelled out.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
49 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
50 * So let us say that you have your core BOS connection running. One
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
51 * of your modules has just given you a SNAC of the group 0x0004 to send
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
52 * you. Maybe an IM destined for some twit in Greenland. So you start
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
53 * at the top of your connection list, looking for a connection that
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
54 * claims to support group 0x0004. You find one. Why, that neat BOS
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
55 * connection of yours can do that. So you send it on its way.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
56 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
57 * Now, say, that fellow from Greenland has friends and they all want to
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
58 * meet up with you in a lame chat room. This has landed you a SNAC
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
59 * in the family 0x000e and you have to admit you're a bit lost. You've
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
60 * searched your connection list for someone who wants to make your life
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
61 * easy and deliver this SNAC for you, but there isn't one there.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
62 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
63 * Here comes the good bit. Without even letting anyone know, particularly
8735
01248ea222d3 [gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents: 7474
diff changeset
64 * the module that decided to send this SNAC, and definitely not that twit
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
65 * in Greenland, you send out a service request. In this request, you have
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
66 * marked the need for a connection supporting group 0x000e. A few seconds
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
67 * later, you receive a service redirect with an IP address and a cookie in
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
68 * it. Great, you say. Now I have something to do. Off you go, making
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
69 * that connection. One of the first things you get from this new server
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
70 * is a message saying that indeed it does support the group you were looking
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
71 * for. So you continue and send rate confirmation and all that.
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
72 *
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
73 * Then you remember you had that SNAC to send, and now you have a means to
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
74 * do it, and you do, and everyone is happy. Except the Greenlander, who is
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
75 * still stuck in the bitter cold.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
76 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
77 * Oh, and this is useful for building the Migration SNACs, too. In the
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
78 * future, this may help convince me to implement rate limit mitigation
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
79 * for real. We'll see.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
80 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
81 * Just to make me look better, I'll say that I've known about this great
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
82 * scheme for quite some time now. But I still haven't convinced myself
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
83 * to make libfaim work that way. It would take a fair amount of effort,
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
84 * and probably some client API changes as well. (Whenever I don't want
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
85 * to do something, I just say it would change the client API. Then I
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
86 * instantly have a couple of supporters of not doing it.)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
87 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
88 * Generally, addgroup is only called by the internal handling of the
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
89 * server ready SNAC. So if you want to do something before that, you'll
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
90 * have to be more creative. That is done rather early, though, so I don't
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
91 * think you have to worry about it. Unless you're me. I care deeply
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
92 * about such inane things.
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
93 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
94 */
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
95 void
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
96 aim_conn_addgroup(OscarConnection *conn, guint16 group)
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
97 {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
98 aim_conn_inside_t *ins = (aim_conn_inside_t *)conn->inside;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
99 struct snacgroup *sg;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
100
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
101 sg = malloc(sizeof(struct snacgroup));
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
102
11253
81cbd43ef85e [gaim-migrate @ 13422]
Mark Doliner <markdoliner@pidgin.im>
parents: 11162
diff changeset
103 gaim_debug_misc("oscar", "adding group 0x%04x\n", group);
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
104 sg->group = group;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
105
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
106 sg->next = ins->groups;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
107 ins->groups = sg;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
108 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
109
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
110 OscarConnection *
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
111 aim_conn_findbygroup(OscarSession *sess, guint16 group)
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
112 {
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
113 OscarConnection *cur;
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
114
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
115 for (cur = sess->connlist; cur; cur = cur->next)
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
116 {
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
117 aim_conn_inside_t *ins = (aim_conn_inside_t *)cur->inside;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
118 struct snacgroup *sg;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
119
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
120 for (sg = ins->groups; sg; sg = sg->next)
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
121 {
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
122 if (sg->group == group)
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
123 return cur;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
124 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
125 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
126
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
127 return NULL;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
128 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
129
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
130 static void
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
131 connkill_snacgroups(struct snacgroup *head)
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
132 {
2675
3f7a2935813b [gaim-migrate @ 2688]
Adam Fritzler <mid@auk.cx>
parents: 2672
diff changeset
133 struct snacgroup *sg;
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
134
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
135 for (sg = head; sg; )
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
136 {
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
137 struct snacgroup *tmp;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
138
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
139 tmp = sg->next;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
140 free(sg);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
141 sg = tmp;
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
142 }
2675
3f7a2935813b [gaim-migrate @ 2688]
Adam Fritzler <mid@auk.cx>
parents: 2672
diff changeset
143 }
3f7a2935813b [gaim-migrate @ 2688]
Adam Fritzler <mid@auk.cx>
parents: 2672
diff changeset
144
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
145 static void
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
146 connkill_rates(struct rateclass *head)
2675
3f7a2935813b [gaim-migrate @ 2688]
Adam Fritzler <mid@auk.cx>
parents: 2672
diff changeset
147 {
3f7a2935813b [gaim-migrate @ 2688]
Adam Fritzler <mid@auk.cx>
parents: 2672
diff changeset
148 struct rateclass *rc;
3f7a2935813b [gaim-migrate @ 2688]
Adam Fritzler <mid@auk.cx>
parents: 2672
diff changeset
149
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
150 for (rc = head; rc; )
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
151 {
2675
3f7a2935813b [gaim-migrate @ 2688]
Adam Fritzler <mid@auk.cx>
parents: 2672
diff changeset
152 struct rateclass *tmp;
2734
83a80077d72a [gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
153 struct snacpair *sp;
2675
3f7a2935813b [gaim-migrate @ 2688]
Adam Fritzler <mid@auk.cx>
parents: 2672
diff changeset
154
3f7a2935813b [gaim-migrate @ 2688]
Adam Fritzler <mid@auk.cx>
parents: 2672
diff changeset
155 tmp = rc->next;
2734
83a80077d72a [gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
156
83a80077d72a [gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
157 for (sp = rc->members; sp; ) {
83a80077d72a [gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
158 struct snacpair *tmpsp;
83a80077d72a [gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
159
83a80077d72a [gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
160 tmpsp = sp->next;
83a80077d72a [gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
161 free(sp);
83a80077d72a [gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
162 sp = tmpsp;
83a80077d72a [gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
163 }
2675
3f7a2935813b [gaim-migrate @ 2688]
Adam Fritzler <mid@auk.cx>
parents: 2672
diff changeset
164 free(rc);
2734
83a80077d72a [gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2703
diff changeset
165
2675
3f7a2935813b [gaim-migrate @ 2688]
Adam Fritzler <mid@auk.cx>
parents: 2672
diff changeset
166 rc = tmp;
3f7a2935813b [gaim-migrate @ 2688]
Adam Fritzler <mid@auk.cx>
parents: 2672
diff changeset
167 }
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
168 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
169
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
170 static void
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
171 connkill_real(OscarSession *sess, OscarConnection *conn)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
172 {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
173
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
174 aim_rxqueue_cleanbyconn(sess, conn);
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
175 aim_tx_cleanqueue(sess, conn);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
176
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
177 if (conn->fd != -1)
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
178 aim_conn_close(conn);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
179
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
180 /*
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
181 * This will free ->internal if it necessary...
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
182 */
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
183 if (conn->type == AIM_CONN_TYPE_CHAT)
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
184 aim_conn_kill_chat(sess, conn);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
185
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
186 if (conn->inside)
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
187 {
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
188 aim_conn_inside_t *inside = (aim_conn_inside_t *)conn->inside;
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
189
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
190 connkill_snacgroups(inside->groups);
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
191 connkill_rates(inside->rates);
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
192
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
193 free(inside);
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
194 }
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
195
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
196 gaim_circ_buffer_destroy(conn->buffer_outgoing);
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
197 free(conn);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
198 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
199
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
200 /**
10271
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
201 * This sends an empty channel 4 SNAC. This is sent to signify
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
202 * that we're logging off. This shouldn't really be necessary--
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
203 * usually the AIM server will detect that the TCP connection has
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
204 * been destroyed.
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
205 */
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
206 static int
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
207 aim_flap_close(OscarSession *sess, OscarConnection *conn)
10271
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
208 {
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
209 FlapFrame *fr;
10271
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
210
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
211 if (!sess || !conn)
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
212 return -EINVAL;
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
213
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
214 if (!(fr = flap_frame_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x04, 0)))
10271
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
215 return -ENOMEM;
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
216
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
217 aim_tx_enqueue(sess, fr);
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
218
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
219 return 0;
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
220 }
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
221
a5e47c867875 [gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents: 10267
diff changeset
222 /**
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
223 * Allocate a new empty connection structure.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
224 *
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
225 * @param sess The oscar session associated with this connection.
8880
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
226 * @return Returns the new connection structure.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
227 */
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
228 static OscarConnection *
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
229 aim_conn_getnext(OscarSession *sess)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
230 {
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
231 OscarConnection *conn;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
232
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
233 conn = g_new0(OscarConnection, 1);
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
234 conn->inside = g_new0(aim_conn_inside_t, 1);
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
235 conn->buffer_outgoing = gaim_circ_buffer_new(-1);
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
236 conn->fd = -1;
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
237 conn->subtype = -1;
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
238 conn->type = -1;
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
239 conn->seqnum = 0;
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
240 conn->lastactivity = 0;
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
241 conn->forcedlatency = 0;
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
242 conn->handlerlist = NULL;
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
243
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
244 conn->next = sess->connlist;
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
245 sess->connlist = conn;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
246
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
247 return conn;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
248 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
249
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
250 /**
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
251 * Close, clear, and free a connection structure. Should never be
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
252 * called from within libfaim.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
253 *
8880
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
254 * @param sess Session for the connection.
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
255 * @param deadconn Connection to be freed.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
256 */
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
257 void
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
258 aim_conn_kill(OscarSession *sess, OscarConnection **deadconn)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
259 {
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
260 OscarConnection *cur, **prev;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
261
10267
05279096b8c8 [gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
262 if (!deadconn || !*deadconn)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
263 return;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
264
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
265 for (prev = &sess->connlist; (cur = *prev); ) {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
266 if (cur == *deadconn) {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
267 *prev = cur->next;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
268 break;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
269 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
270 prev = &cur->next;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
271 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
272
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
273 if (!cur)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
274 return; /* oops */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
275
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
276 connkill_real(sess, cur);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
277 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
278
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
279 /**
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
280 * Close (but not free) a connection.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
281 *
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
282 * This leaves everything untouched except for clearing the
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
283 * handler list and setting the fd to -1 (used to recognize
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
284 * dead connections). It will also remove cookies if necessary.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
285 *
8880
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
286 * Why only if fd >= 3? Seems rather implementation specific...
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
287 * fd's do not have to be distributed in a particular order, do they?
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
288 *
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
289 * @param deadconn The connection to close.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
290 */
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
291 void
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
292 aim_conn_close(OscarConnection *deadconn)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
293 {
5435
990c340ecb6d [gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents: 5124
diff changeset
294 aim_rxcallback_t userfunc;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
295
10267
05279096b8c8 [gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
296 if (deadconn->fd >= 0)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
297 close(deadconn->fd);
5435
990c340ecb6d [gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents: 5124
diff changeset
298
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
299 deadconn->fd = -1;
5435
990c340ecb6d [gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents: 5124
diff changeset
300
990c340ecb6d [gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents: 5124
diff changeset
301 if ((userfunc = aim_callhandler(deadconn->sessv, deadconn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNDEAD)))
990c340ecb6d [gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents: 5124
diff changeset
302 userfunc(deadconn->sessv, NULL, deadconn);
990c340ecb6d [gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents: 5124
diff changeset
303
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
304 if (deadconn->handlerlist)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
305 aim_clearhandlers(deadconn);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
306 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
307
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
308 /**
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
309 * Locates a connection of the specified type in the
8866
8a910a9b8865 [gaim-migrate @ 9634]
Nathan Walp <nwalp@pidgin.im>
parents: 8735
diff changeset
310 * specified session.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
311 *
8880
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
312 * XXX - Except for rendezvous, all uses of this should be removed and
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
313 * aim_conn_findbygroup() should be used instead.
8866
8a910a9b8865 [gaim-migrate @ 9634]
Nathan Walp <nwalp@pidgin.im>
parents: 8735
diff changeset
314 *
8880
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
315 * @param sess The session to search.
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
316 * @param type The type of connection to look for.
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
317 * @return Returns the first connection found of the given target type,
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
318 * or NULL if none could be found.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
319 */
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
320 OscarConnection *
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
321 aim_getconn_type(OscarSession *sess, int type)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
322 {
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
323 OscarConnection *cur;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
324
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
325 for (cur = sess->connlist; cur; cur = cur->next) {
10267
05279096b8c8 [gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents: 10035
diff changeset
326 if ((cur->type == type) &&
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
327 !(cur->status & AIM_CONN_STATUS_INPROGRESS))
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
328 break;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
329 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
330
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
331 return cur;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
332 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
333
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
334 OscarConnection *
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
335 aim_getconn_type_all(OscarSession *sess, int type)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
336 {
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
337 OscarConnection *cur;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
338
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
339 for (cur = sess->connlist; cur; cur = cur->next) {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
340 if (cur->type == type)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
341 break;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
342 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
343
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
344 return cur;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
345 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
346
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
347 /* If you pass -1 for the fd, you'll get what you ask for. Gibberish. */
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
348 OscarConnection *
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
349 aim_getconn_fd(OscarSession *sess, int fd)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
350 {
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
351 OscarConnection *cur;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
352
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
353 for (cur = sess->connlist; cur; cur = cur->next) {
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
354 if (cur->fd == fd)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
355 break;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
356 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
357
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
358 return cur;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
359 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
360
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
361 /**
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
362 * Clone an OscarConnection.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
363 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
364 * A new connection is allocated, and the values are filled in
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
365 * appropriately.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
366 *
8880
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
367 * @param sess The session containing this connection.
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
368 * @param src The connection to clone.
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
369 * @return Returns a pointer to the new OscarConnection, or %NULL on error.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
370 */
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
371 OscarConnection *
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
372 aim_cloneconn(OscarSession *sess, OscarConnection *src)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
373 {
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
374 OscarConnection *conn;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
375
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
376 if (!(conn = aim_conn_getnext(sess)))
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
377 return NULL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
378
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
379 conn->fd = src->fd;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
380 conn->type = src->type;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
381 conn->subtype = src->subtype;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
382 conn->seqnum = src->seqnum;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
383 conn->internal = src->internal;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
384 conn->lastactivity = src->lastactivity;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
385 conn->forcedlatency = src->forcedlatency;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
386 conn->sessv = src->sessv;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
387 aim_clonehandlers(sess, conn, src);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
388
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
389 if (src->inside) {
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
390 /*
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
391 * XXX should clone this section as well, but since currently
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
392 * this function only gets called for some of that rendezvous
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
393 * crap, and not on SNAC connections, its probably okay for
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
394 * now.
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
395 *
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
396 */
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
397 }
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
398
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
399 return conn;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
400 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
401
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
402 /**
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
403 * Opens a new connection to the specified dest host of specified
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
404 * type, using the proxy settings if available. If @host is %NULL,
11162
9ffb3ec6ce59 [gaim-migrate @ 13263]
Mark Doliner <markdoliner@pidgin.im>
parents: 11154
diff changeset
405 * the connection is allocated and returned, but no connection
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
406 * is made.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
407 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
408 * FIXME: Return errors in a more sane way.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
409 *
8866
8a910a9b8865 [gaim-migrate @ 9634]
Nathan Walp <nwalp@pidgin.im>
parents: 8735
diff changeset
410 * @param sess Session to create connection in
8a910a9b8865 [gaim-migrate @ 9634]
Nathan Walp <nwalp@pidgin.im>
parents: 8735
diff changeset
411 * @param type Type of connection to create
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
412 */
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
413 OscarConnection *
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
414 aim_newconn(OscarSession *sess, int type)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
415 {
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
416 OscarConnection *conn;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
417
11162
9ffb3ec6ce59 [gaim-migrate @ 13263]
Mark Doliner <markdoliner@pidgin.im>
parents: 11154
diff changeset
418 if (!(conn = aim_conn_getnext(sess)))
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
419 return NULL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
420
11162
9ffb3ec6ce59 [gaim-migrate @ 13263]
Mark Doliner <markdoliner@pidgin.im>
parents: 11154
diff changeset
421 conn->sessv = (void *)sess;
9ffb3ec6ce59 [gaim-migrate @ 13263]
Mark Doliner <markdoliner@pidgin.im>
parents: 11154
diff changeset
422 conn->type = type;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
423
11162
9ffb3ec6ce59 [gaim-migrate @ 13263]
Mark Doliner <markdoliner@pidgin.im>
parents: 11154
diff changeset
424 conn->fd = -1;
9ffb3ec6ce59 [gaim-migrate @ 13263]
Mark Doliner <markdoliner@pidgin.im>
parents: 11154
diff changeset
425 conn->status = 0;
9ffb3ec6ce59 [gaim-migrate @ 13263]
Mark Doliner <markdoliner@pidgin.im>
parents: 11154
diff changeset
426 return conn;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
427 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
428
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
429 /**
8866
8a910a9b8865 [gaim-migrate @ 9634]
Nathan Walp <nwalp@pidgin.im>
parents: 8735
diff changeset
430 * Searches @sess for the passed connection.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
431 *
8880
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
432 * @param sess Session in which to look.
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
433 * @param conn Connection to look for.
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
434 * @return Returns 1 if the passed connection is present, zero otherwise.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
435 */
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
436 faim_export int aim_conn_in_sess(OscarSession *sess, OscarConnection *conn)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
437 {
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
438 OscarConnection *cur;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
439
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
440 for (cur = sess->connlist; cur; cur = cur->next) {
2270
c65fc356fb68 [gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2246
diff changeset
441 if (cur == conn)
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
442 return 1;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
443 }
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
444
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
445 return 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
446 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
447
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
448 /**
11154
9dbf08b5056d [gaim-migrate @ 13236]
Mark Doliner <markdoliner@pidgin.im>
parents: 11074
diff changeset
449 * Set a forced latency value for connection. Basically causes
8880
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
450 * @newval seconds to be spent between transmits on a connection.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
451 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
452 * This is my lame attempt at overcoming not understanding the rate
11154
9dbf08b5056d [gaim-migrate @ 13236]
Mark Doliner <markdoliner@pidgin.im>
parents: 11074
diff changeset
453 * limiting.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
454 *
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
455 * XXX: This should really be replaced with something that scales and
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
456 * backs off like the real rate limiting does.
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
457 *
8880
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
458 * @param conn Conn to set latency for.
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
459 * @param newval Number of seconds to force between transmits.
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
460 * @return Returns -1 if the connection does not exist, zero otherwise.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
461 */
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
462 int
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
463 aim_conn_setlatency(OscarConnection *conn, int newval)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
464 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
465
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
466 if (!conn)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
467 return -1;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
468
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
469 conn->forcedlatency = newval;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
470 conn->lastactivity = 0; /* reset this just to make sure */
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
471
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
472 return 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
473 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
474
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
475 /**
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
476 * Allocates a new OscarSession and initializes it with default values.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
477 */
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
478 OscarSession *
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
479 oscar_session_new(void)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
480 {
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
481 OscarSession *sess;
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
482
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
483 sess = g_new(OscarSession, 1);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
484
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
485 sess->queue_outgoing = NULL;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
486 sess->queue_incoming = NULL;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
487 aim_initsnachash(sess);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
488 sess->msgcookies = NULL;
7466
1dd3ed07bc24 [gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents: 7285
diff changeset
489 sess->modlistv = NULL;
1dd3ed07bc24 [gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents: 7285
diff changeset
490 sess->snacid_next = 0x00000001;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
491
7466
1dd3ed07bc24 [gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents: 7285
diff changeset
492 sess->locate.userinfo = NULL;
1dd3ed07bc24 [gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents: 7285
diff changeset
493 sess->locate.torequest = NULL;
1dd3ed07bc24 [gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents: 7285
diff changeset
494 sess->locate.requested = NULL;
1dd3ed07bc24 [gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents: 7285
diff changeset
495 sess->locate.waiting_for_response = FALSE;
2991
692468b98a03 [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2821
diff changeset
496 sess->ssi.received_data = 0;
4230
b5393db78439 [gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents: 4102
diff changeset
497 sess->ssi.numitems = 0;
b5393db78439 [gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents: 4102
diff changeset
498 sess->ssi.official = NULL;
b5393db78439 [gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents: 4102
diff changeset
499 sess->ssi.local = NULL;
b5393db78439 [gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents: 4102
diff changeset
500 sess->ssi.pending = NULL;
b5393db78439 [gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents: 4102
diff changeset
501 sess->ssi.timestamp = (time_t)0;
2991
692468b98a03 [gaim-migrate @ 3004]
Rob Flynn <gaim@robflynn.com>
parents: 2821
diff changeset
502 sess->ssi.waiting_for_ack = 0;
7466
1dd3ed07bc24 [gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents: 7285
diff changeset
503 sess->icq_info = NULL;
4102
06290da3f88d [gaim-migrate @ 4317]
Mark Doliner <markdoliner@pidgin.im>
parents: 3952
diff changeset
504 sess->authinfo = NULL;
7466
1dd3ed07bc24 [gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents: 7285
diff changeset
505 sess->emailinfo = NULL;
13253
5ad8373f2d1e [gaim-migrate @ 15618]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
506 sess->peer_connections = NULL;
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents: 3630
diff changeset
507
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
508 /*
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
509 * This must always be set. Default to the queue-based
13253
5ad8373f2d1e [gaim-migrate @ 15618]
Mark Doliner <markdoliner@pidgin.im>
parents: 13240
diff changeset
510 * version for back-compatibility.
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
511 */
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
512 aim_tx_setenqueue(sess, AIM_TX_QUEUED, NULL);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
513
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
514 /*
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
515 * Register all the modules for this session...
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
516 */
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
517 aim__registermodule(sess, misc_modfirst); /* load the catch-all first */
7474
757569d68123 [gaim-migrate @ 8087]
Mark Doliner <markdoliner@pidgin.im>
parents: 7466
diff changeset
518 aim__registermodule(sess, service_modfirst);
2672
5c9b7617a1f3 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents: 2635
diff changeset
519 aim__registermodule(sess, locate_modfirst);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
520 aim__registermodule(sess, buddylist_modfirst);
2672
5c9b7617a1f3 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents: 2635
diff changeset
521 aim__registermodule(sess, msg_modfirst);
5c9b7617a1f3 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents: 2635
diff changeset
522 aim__registermodule(sess, adverts_modfirst);
5c9b7617a1f3 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents: 2635
diff changeset
523 aim__registermodule(sess, invite_modfirst);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
524 aim__registermodule(sess, admin_modfirst);
2672
5c9b7617a1f3 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents: 2635
diff changeset
525 aim__registermodule(sess, popups_modfirst);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
526 aim__registermodule(sess, bos_modfirst);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
527 aim__registermodule(sess, search_modfirst);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
528 aim__registermodule(sess, stats_modfirst);
2672
5c9b7617a1f3 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents: 2635
diff changeset
529 aim__registermodule(sess, translate_modfirst);
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
530 aim__registermodule(sess, chatnav_modfirst);
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
531 aim__registermodule(sess, chat_modfirst);
6879
cc7abcef355c [gaim-migrate @ 7425]
Mark Doliner <markdoliner@pidgin.im>
parents: 5435
diff changeset
532 aim__registermodule(sess, odir_modfirst);
cc7abcef355c [gaim-migrate @ 7425]
Mark Doliner <markdoliner@pidgin.im>
parents: 5435
diff changeset
533 aim__registermodule(sess, bart_modfirst);
4804
e6e0e6d50d39 [gaim-migrate @ 5124]
Mark Doliner <markdoliner@pidgin.im>
parents: 4624
diff changeset
534 /* missing 0x11 - 0x12 */
2672
5c9b7617a1f3 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents: 2635
diff changeset
535 aim__registermodule(sess, ssi_modfirst);
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2675
diff changeset
536 /* missing 0x14 */
3952
d13e1fde68d8 [gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents: 3717
diff changeset
537 aim__registermodule(sess, icq_modfirst); /* XXX - Make sure this isn't sent for AIM */
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2675
diff changeset
538 /* missing 0x16 */
2672
5c9b7617a1f3 [gaim-migrate @ 2685]
Adam Fritzler <mid@auk.cx>
parents: 2635
diff changeset
539 aim__registermodule(sess, auth_modfirst);
3694
49a336931cc6 [gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents: 3630
diff changeset
540 aim__registermodule(sess, email_modfirst);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
541
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
542 return sess;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
543 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
544
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
545 /**
8880
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
546 * Logoff and deallocate a session.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
547 *
8866
8a910a9b8865 [gaim-migrate @ 9634]
Nathan Walp <nwalp@pidgin.im>
parents: 8735
diff changeset
548 * @param sess Session to kill
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
549 */
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
550 void
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
551 oscar_session_destroy(OscarSession *sess)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
552 {
2635
60897108c74c [gaim-migrate @ 2648]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2270
diff changeset
553 aim_cleansnacs(sess, -1);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
554
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
555 if (sess->connlist) {
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
556 OscarConnection *cur = sess->connlist, *tmp;
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
557
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
558 /* Attempt to send the log-off packet */
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
559 if (cur->type == AIM_CONN_TYPE_BOS)
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
560 aim_flap_close(sess, cur);
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
561
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
562 while (cur) {
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
563 tmp = cur->next;
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
564 aim_conn_close(cur);
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
565 connkill_real(sess, cur);
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
566 cur = tmp;
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
567 }
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
568 }
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
569 sess->connlist = NULL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
570
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
571 aim__shutdownmodules(sess);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
572
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
573 g_free(sess);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
574 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
575
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
576 /**
8880
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
577 * Determine if a connection is connecting.
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
578 *
8880
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
579 * @param conn Connection to examine.
8866
8a910a9b8865 [gaim-migrate @ 9634]
Nathan Walp <nwalp@pidgin.im>
parents: 8735
diff changeset
580 * @return Returns nonzero if the connection is in the process of
8a910a9b8865 [gaim-migrate @ 9634]
Nathan Walp <nwalp@pidgin.im>
parents: 8735
diff changeset
581 * connecting (or if it just completed and
8a910a9b8865 [gaim-migrate @ 9634]
Nathan Walp <nwalp@pidgin.im>
parents: 8735
diff changeset
582 * aim_conn_completeconnect() has yet to be called on it).
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
583 */
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
584 int
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
585 aim_conn_isconnecting(OscarConnection *conn)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
586 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
587
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
588 if (!conn)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
589 return 0;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
590
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
591 return !!(conn->status & AIM_CONN_STATUS_INPROGRESS);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
592 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
593
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
594 /*
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
595 * XXX this is nearly as ugly as proxyconnect().
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
596 */
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
597 int
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
598 aim_conn_completeconnect(OscarSession *sess, OscarConnection *conn)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
599 {
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
600 aim_rxcallback_t userfunc;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
601
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
602 if (!conn || (conn->fd == -1))
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
603 return -1;
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
604
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
605 if (!(conn->status & AIM_CONN_STATUS_INPROGRESS))
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
606 return -1;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
607
5124
96cd4ae1204e [gaim-migrate @ 5487]
Mark Doliner <markdoliner@pidgin.im>
parents: 4830
diff changeset
608 fcntl(conn->fd, F_SETFL, 0);
96cd4ae1204e [gaim-migrate @ 5487]
Mark Doliner <markdoliner@pidgin.im>
parents: 4830
diff changeset
609
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
610 conn->status &= ~AIM_CONN_STATUS_INPROGRESS;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
611
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
612 if ((userfunc = aim_callhandler(sess, conn, AIM_CB_FAM_SPECIAL, AIM_CB_SPECIAL_CONNCOMPLETE)))
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
613 userfunc(sess, NULL, conn);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
614
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
615 /* Flush out the queues if there was something waiting for this conn */
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
616 aim_tx_flushqueue(sess);
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
617
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
618 return 0;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
619 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
620
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
621 OscarSession *
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
622 aim_conn_getsess(OscarConnection *conn)
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
623 {
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
624
2246
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
625 if (!conn)
8ade8b7421af [gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2086
diff changeset
626 return NULL;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
627
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
628 return (OscarSession *)conn->sessv;
2086
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
629 }
007508451e2c [gaim-migrate @ 2096]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
630
8880
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
631 /**
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
632 * No-op. This sends an empty channel 5 SNAC. WinAIM 4.x and higher
15b365a0a7fe [gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents: 8866
diff changeset
633 * sends these _every minute_ to keep the connection alive.
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2675
diff changeset
634 */
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
635 int
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
636 aim_flap_nop(OscarSession *sess, OscarConnection *conn)
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2675
diff changeset
637 {
13240
db5187cc40d1 [gaim-migrate @ 15605]
Mark Doliner <markdoliner@pidgin.im>
parents: 13235
diff changeset
638 FlapFrame *fr;
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2675
diff changeset
639
13254
3fbb3f3efba7 [gaim-migrate @ 15619]
Mark Doliner <markdoliner@pidgin.im>
parents: 13253
diff changeset
640 if (!(fr = flap_frame_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x05, 0)))
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2675
diff changeset
641 return -ENOMEM;
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2675
diff changeset
642
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2675
diff changeset
643 aim_tx_enqueue(sess, fr);
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2675
diff changeset
644
7283
aa76f7c93746 [gaim-migrate @ 7863]
Mark Doliner <markdoliner@pidgin.im>
parents: 7282
diff changeset
645 /* clean out SNACs over 60sec old */
aa76f7c93746 [gaim-migrate @ 7863]
Mark Doliner <markdoliner@pidgin.im>
parents: 7282
diff changeset
646 aim_cleansnacs(sess, 60);
aa76f7c93746 [gaim-migrate @ 7863]
Mark Doliner <markdoliner@pidgin.im>
parents: 7282
diff changeset
647
2703
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2675
diff changeset
648 return 0;
6111a9790868 [gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2675
diff changeset
649 }

mercurial