Sat, 09 Jul 2005 19:26:49 +0000
[gaim-migrate @ 13083]
sf patch #1233671, from Ryan McCabe
eliminate the usage of ->priv in libfaim
committer: Mark Doliner <markdoliner@pidgin.im>
|
8888
2e0a3c5d3629
[gaim-migrate @ 9657]
Mark Doliner <markdoliner@pidgin.im>
parents:
8880
diff
changeset
|
1 | /** |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
2 | * Low-level connection handling. |
| 2086 | 3 | * |
| 4 | * Does all this gloriously nifty connection handling stuff... | |
| 5 | * | |
| 6 | */ | |
| 7 | ||
| 8 | #define FAIM_INTERNAL | |
|
2734
83a80077d72a
[gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
9 | #define FAIM_NEED_CONN_INTERNAL |
| 2086 | 10 | #include <aim.h> |
| 11 | ||
| 12 | #ifndef _WIN32 | |
| 13 | #include <netdb.h> | |
| 14 | #include <sys/socket.h> | |
| 15 | #include <netinet/in.h> | |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3694
diff
changeset
|
16 | #endif |
|
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3694
diff
changeset
|
17 | |
|
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3694
diff
changeset
|
18 | #ifdef _WIN32 |
|
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3694
diff
changeset
|
19 | #include "win32dep.h" |
| 2086 | 20 | #endif |
| 21 | ||
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
22 | /** |
|
2270
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
23 | * In OSCAR, every connection has a set of SNAC groups associated |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
24 | * with it. These are the groups that you can send over this connection |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
7474
diff
changeset
|
25 | * without being guaranteed a "Not supported" SNAC error. |
|
2270
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
26 | * |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
27 | * The grand theory of things says that these associations transcend |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
28 | * what libfaim calls "connection types" (conn->type). You can probably |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
29 | * see the elegance here, but since I want to revel in it for a bit, you |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
30 | * get to hear it all spelled out. |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
31 | * |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
32 | * 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
|
33 | * 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
|
34 | * you. Maybe an IM destined for some twit in Greenland. So you start |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
35 | * at the top of your connection list, looking for a connection that |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
36 | * 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
|
37 | * 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
|
38 | * |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
39 | * 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
|
40 | * 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
|
41 | * 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
|
42 | * 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
|
43 | * 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
|
44 | * |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
45 | * 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
|
46 | * 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
|
47 | * 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
|
48 | * 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
|
49 | * 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
|
50 | * 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
|
51 | * 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
|
52 | * is a message saying that indeed it does support the group you were looking |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
53 | * for. So you continue and send rate confirmation and all that. |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
54 | * |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
55 | * 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
|
56 | * 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
|
57 | * still stuck in the bitter cold. |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
58 | * |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
59 | * 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
|
60 | * future, this may help convince me to implement rate limit mitigation |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
61 | * for real. We'll see. |
|
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 | * 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
|
64 | * 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
|
65 | * 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
|
66 | * and probably some client API changes as well. (Whenever I don't want |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
67 | * to do something, I just say it would change the client API. Then I |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
68 | * instantly have a couple of supporters of not doing it.) |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
69 | * |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
70 | * Generally, addgroup is only called by the internal handling of the |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
71 | * 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
|
72 | * 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
|
73 | * 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
|
74 | * about such inane things. |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
75 | * |
|
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 | faim_internal void aim_conn_addgroup(aim_conn_t *conn, fu16_t group) |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
78 | { |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
79 | aim_conn_inside_t *ins = (aim_conn_inside_t *)conn->inside; |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
80 | struct snacgroup *sg; |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
81 | |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
82 | if (!(sg = malloc(sizeof(struct snacgroup)))) |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
83 | return; |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
84 | |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
85 | faimdprintf(aim_conn_getsess(conn), 1, "adding group 0x%04x\n", group); |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
86 | sg->group = group; |
|
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 | sg->next = ins->groups; |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
89 | ins->groups = sg; |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
90 | |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
91 | return; |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
92 | } |
|
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 | faim_export aim_conn_t *aim_conn_findbygroup(aim_session_t *sess, fu16_t group) |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
95 | { |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
96 | aim_conn_t *cur; |
|
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 | for (cur = sess->connlist; cur; cur = cur->next) { |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
99 | aim_conn_inside_t *ins = (aim_conn_inside_t *)cur->inside; |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
100 | struct snacgroup *sg; |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
101 | |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
102 | for (sg = ins->groups; sg; sg = sg->next) { |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
103 | if (sg->group == group) |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
104 | return cur; |
|
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 | } |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
107 | |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
108 | return NULL; |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
109 | } |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
110 | |
| 2675 | 111 | static void connkill_snacgroups(struct snacgroup **head) |
|
2270
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
112 | { |
| 2675 | 113 | struct snacgroup *sg; |
|
2270
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
114 | |
| 2675 | 115 | for (sg = *head; sg; ) { |
|
2270
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
116 | struct snacgroup *tmp; |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
117 | |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
118 | tmp = sg->next; |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
119 | free(sg); |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
120 | sg = tmp; |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
121 | } |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
122 | |
| 2675 | 123 | *head = NULL; |
| 124 | ||
| 125 | return; | |
| 126 | } | |
| 127 | ||
| 128 | static void connkill_rates(struct rateclass **head) | |
| 129 | { | |
| 130 | struct rateclass *rc; | |
| 131 | ||
| 132 | for (rc = *head; rc; ) { | |
| 133 | struct rateclass *tmp; | |
|
2734
83a80077d72a
[gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
134 | struct snacpair *sp; |
| 2675 | 135 | |
| 136 | tmp = rc->next; | |
|
2734
83a80077d72a
[gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
137 | |
|
83a80077d72a
[gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
138 | for (sp = rc->members; sp; ) { |
|
83a80077d72a
[gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
139 | struct snacpair *tmpsp; |
|
83a80077d72a
[gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
140 | |
|
83a80077d72a
[gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
141 | tmpsp = sp->next; |
|
83a80077d72a
[gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
142 | free(sp); |
|
83a80077d72a
[gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
143 | sp = tmpsp; |
|
83a80077d72a
[gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
144 | } |
| 2675 | 145 | free(rc); |
|
2734
83a80077d72a
[gaim-migrate @ 2747]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2703
diff
changeset
|
146 | |
| 2675 | 147 | rc = tmp; |
| 148 | } | |
| 149 | ||
| 150 | *head = NULL; | |
| 151 | ||
| 152 | return; | |
|
2270
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
153 | } |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
154 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
155 | static void connkill_real(aim_session_t *sess, aim_conn_t **deadconn) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
156 | { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
157 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
158 | aim_rxqueue_cleanbyconn(sess, *deadconn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
159 | aim_tx_cleanqueue(sess, *deadconn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
160 | |
|
10267
05279096b8c8
[gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents:
10035
diff
changeset
|
161 | if ((*deadconn)->fd != -1) |
|
10271
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
162 | aim_conn_close(*deadconn); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
163 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
164 | /* |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
165 | * This will free ->internal if it necessary... |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
166 | */ |
|
4617
35d860860593
[gaim-migrate @ 4908]
Mark Doliner <markdoliner@pidgin.im>
parents:
4615
diff
changeset
|
167 | if ((*deadconn)->type == AIM_CONN_TYPE_CHAT) |
|
2821
f1ab7f03bdad
[gaim-migrate @ 2834]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2734
diff
changeset
|
168 | aim_conn_kill_chat(sess, *deadconn); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
169 | |
|
2270
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
170 | if ((*deadconn)->inside) { |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
171 | aim_conn_inside_t *inside = (aim_conn_inside_t *)(*deadconn)->inside; |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
172 | |
| 2675 | 173 | connkill_snacgroups(&inside->groups); |
| 174 | connkill_rates(&inside->rates); | |
|
2270
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
175 | |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
176 | free(inside); |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
177 | } |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
178 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
179 | free(*deadconn); |
| 3023 | 180 | *deadconn = NULL; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
181 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
182 | return; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
183 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
184 | |
| 2086 | 185 | /** |
|
10271
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
186 | * 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
|
187 | * that we're logging off. This shouldn't really be necessary-- |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
188 | * usually the AIM server will detect that the TCP connection has |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
189 | * been destroyed. |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
190 | */ |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
191 | static int |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
192 | aim_flap_close(aim_session_t *sess, aim_conn_t *conn) |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
193 | { |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
194 | aim_frame_t *fr; |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
195 | |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
196 | if (!sess || !conn) |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
197 | return -EINVAL; |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
198 | |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
199 | if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x04, 0))) |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
200 | return -ENOMEM; |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
201 | |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
202 | aim_tx_enqueue(sess, fr); |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
203 | |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
204 | return 0; |
|
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 | |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
207 | /** |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
208 | * Clears out the connection list, killing remaining connections. |
| 2086 | 209 | * |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
210 | * @param sess Session to be cleared. |
| 2086 | 211 | */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
212 | static void aim_connrst(aim_session_t *sess) |
| 2086 | 213 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
214 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
215 | if (sess->connlist) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
216 | aim_conn_t *cur = sess->connlist, *tmp; |
| 2086 | 217 | |
|
10271
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
218 | /* Attempt to send the log-off packet */ |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
219 | if (cur->type == AIM_CONN_TYPE_BOS) |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
220 | aim_flap_close(sess, cur); |
|
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
221 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
222 | while (cur) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
223 | tmp = cur->next; |
|
10271
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
224 | aim_conn_close(cur); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
225 | connkill_real(sess, &cur); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
226 | cur = tmp; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
227 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
228 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
229 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
230 | sess->connlist = NULL; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
231 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
232 | return; |
| 2086 | 233 | } |
| 234 | ||
| 235 | /** | |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
236 | * Initializes and/or resets a connection structure to the default values. |
| 2086 | 237 | * |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
238 | * @param deadconn Connection to be reset. |
| 2086 | 239 | */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
240 | static void aim_conn_init(aim_conn_t *deadconn) |
| 2086 | 241 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
242 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
243 | if (!deadconn) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
244 | return; |
| 2086 | 245 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
246 | deadconn->fd = -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
247 | deadconn->subtype = -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
248 | deadconn->type = -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
249 | deadconn->seqnum = 0; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
250 | deadconn->lastactivity = 0; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
251 | deadconn->forcedlatency = 0; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
252 | deadconn->handlerlist = NULL; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
253 | deadconn->priv = NULL; |
|
2270
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
254 | memset(deadconn->inside, 0, sizeof(aim_conn_inside_t)); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
255 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
256 | return; |
| 2086 | 257 | } |
| 258 | ||
| 259 | /** | |
| 260 | * Allocate a new empty connection structure. | |
| 261 | * | |
| 8866 | 262 | * @param sess Session |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
263 | * @return Returns the new connection structure. |
| 2086 | 264 | */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
265 | static aim_conn_t *aim_conn_getnext(aim_session_t *sess) |
| 2086 | 266 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
267 | aim_conn_t *newconn; |
| 2086 | 268 | |
|
10267
05279096b8c8
[gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents:
10035
diff
changeset
|
269 | if (!(newconn = malloc(sizeof(aim_conn_t)))) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
270 | return NULL; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
271 | memset(newconn, 0, sizeof(aim_conn_t)); |
| 2086 | 272 | |
|
2270
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
273 | if (!(newconn->inside = malloc(sizeof(aim_conn_inside_t)))) { |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
274 | free(newconn); |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
275 | return NULL; |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
276 | } |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
277 | memset(newconn->inside, 0, sizeof(aim_conn_inside_t)); |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
278 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
279 | aim_conn_init(newconn); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
280 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
281 | newconn->next = sess->connlist; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
282 | sess->connlist = newconn; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
283 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
284 | return newconn; |
| 2086 | 285 | } |
| 286 | ||
| 287 | /** | |
| 288 | * Close, clear, and free a connection structure. Should never be | |
| 289 | * called from within libfaim. | |
| 290 | * | |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
291 | * @param sess Session for the connection. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
292 | * @param deadconn Connection to be freed. |
| 2086 | 293 | */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
294 | faim_export void aim_conn_kill(aim_session_t *sess, aim_conn_t **deadconn) |
| 2086 | 295 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
296 | aim_conn_t *cur, **prev; |
| 2086 | 297 | |
|
10267
05279096b8c8
[gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents:
10035
diff
changeset
|
298 | if (!deadconn || !*deadconn) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
299 | return; |
| 2086 | 300 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
301 | for (prev = &sess->connlist; (cur = *prev); ) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
302 | if (cur == *deadconn) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
303 | *prev = cur->next; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
304 | break; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
305 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
306 | prev = &cur->next; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
307 | } |
| 2086 | 308 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
309 | if (!cur) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
310 | return; /* oops */ |
| 2086 | 311 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
312 | connkill_real(sess, &cur); |
| 2086 | 313 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
314 | return; |
| 2086 | 315 | } |
| 316 | ||
| 317 | /** | |
| 318 | * Close (but not free) a connection. | |
| 319 | * | |
| 320 | * This leaves everything untouched except for clearing the | |
| 321 | * 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
|
322 | * dead connections). It will also remove cookies if necessary. |
| 2086 | 323 | * |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
324 | * Why only if fd >= 3? Seems rather implementation specific... |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
325 | * 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
|
326 | * |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
327 | * @param deadconn The connection to close. |
| 2086 | 328 | */ |
|
10271
a5e47c867875
[gaim-migrate @ 11420]
Mark Doliner <markdoliner@pidgin.im>
parents:
10267
diff
changeset
|
329 | faim_export void aim_conn_close(aim_conn_t *deadconn) |
| 2086 | 330 | { |
|
5435
990c340ecb6d
[gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents:
5124
diff
changeset
|
331 | aim_rxcallback_t userfunc; |
| 2086 | 332 | |
|
10267
05279096b8c8
[gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents:
10035
diff
changeset
|
333 | if (deadconn->fd >= 0) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
334 | close(deadconn->fd); |
|
5435
990c340ecb6d
[gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents:
5124
diff
changeset
|
335 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
336 | deadconn->fd = -1; |
|
5435
990c340ecb6d
[gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents:
5124
diff
changeset
|
337 | |
|
990c340ecb6d
[gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents:
5124
diff
changeset
|
338 | 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
|
339 | userfunc(deadconn->sessv, NULL, deadconn); |
|
990c340ecb6d
[gaim-migrate @ 5817]
Mark Doliner <markdoliner@pidgin.im>
parents:
5124
diff
changeset
|
340 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
341 | if (deadconn->handlerlist) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
342 | aim_clearhandlers(deadconn); |
| 2086 | 343 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
344 | return; |
| 2086 | 345 | } |
| 346 | ||
| 347 | /** | |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
348 | * Locates a connection of the specified type in the |
| 8866 | 349 | * specified session. |
| 2086 | 350 | * |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
351 | * 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
|
352 | * aim_conn_findbygroup() should be used instead. |
| 8866 | 353 | * |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
354 | * @param sess The session to search. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
355 | * @param type The type of connection to look for. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
356 | * @return Returns the first connection found of the given target type, |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
357 | * or NULL if none could be found. |
| 2086 | 358 | */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
359 | faim_export aim_conn_t *aim_getconn_type(aim_session_t *sess, int type) |
| 2086 | 360 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
361 | aim_conn_t *cur; |
| 2086 | 362 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
363 | for (cur = sess->connlist; cur; cur = cur->next) { |
|
10267
05279096b8c8
[gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents:
10035
diff
changeset
|
364 | if ((cur->type == type) && |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
365 | !(cur->status & AIM_CONN_STATUS_INPROGRESS)) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
366 | break; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
367 | } |
| 2086 | 368 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
369 | return cur; |
| 2086 | 370 | } |
| 371 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
372 | faim_export aim_conn_t *aim_getconn_type_all(aim_session_t *sess, int type) |
| 2086 | 373 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
374 | aim_conn_t *cur; |
| 2086 | 375 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
376 | for (cur = sess->connlist; cur; cur = cur->next) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
377 | if (cur->type == type) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
378 | break; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
379 | } |
| 2086 | 380 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
381 | return cur; |
| 2086 | 382 | } |
| 383 | ||
| 384 | /* If you pass -1 for the fd, you'll get what you ask for. Gibberish. */ | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
385 | faim_export aim_conn_t *aim_getconn_fd(aim_session_t *sess, int fd) |
| 2086 | 386 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
387 | aim_conn_t *cur; |
| 2086 | 388 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
389 | for (cur = sess->connlist; cur; cur = cur->next) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
390 | if (cur->fd == fd) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
391 | break; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
392 | } |
| 2086 | 393 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
394 | return cur; |
| 2086 | 395 | } |
| 396 | ||
| 397 | /** | |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
398 | * Handle normal connections or SOCKS5 via an extrememly quick and |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
399 | * dirty SOCKS5 interface. |
| 2086 | 400 | * |
| 401 | * Attempts to connect to the specified host via the configured | |
| 402 | * proxy settings, if present. If no proxy is configured for | |
| 403 | * this session, the connection is done directly. | |
| 404 | * | |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
405 | * XXX - this is really awful. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
406 | * XXX - Split the SOCKS5 and the normal connection stuff into two |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
407 | * separate functions. |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
408 | * |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
409 | * @param sess Session to connect. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
410 | * @param host Host to connect to. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
411 | * @param port Port to connect to. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
412 | * @param statusret Return value of the connection. |
| 2086 | 413 | */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
414 | static int aim_proxyconnect(aim_session_t *sess, const char *host, fu16_t port, fu32_t *statusret) |
| 2086 | 415 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
416 | int fd = -1; |
| 2086 | 417 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
418 | if (strlen(sess->socksproxy.server)) { /* connecting via proxy */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
419 | int i; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
420 | unsigned char buf[512]; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
421 | struct sockaddr_in sa; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
422 | struct hostent *hp; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
423 | char *proxy; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
424 | unsigned short proxyport = 1080; |
| 2086 | 425 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
426 | for(i=0;i<(int)strlen(sess->socksproxy.server);i++) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
427 | if (sess->socksproxy.server[i] == ':') { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
428 | proxyport = atoi(&(sess->socksproxy.server[i+1])); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
429 | break; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
430 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
431 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
432 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
433 | proxy = (char *)malloc(i+1); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
434 | strncpy(proxy, sess->socksproxy.server, i); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
435 | proxy[i] = '\0'; |
| 2086 | 436 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
437 | if (!(hp = gethostbyname(proxy))) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
438 | faimdprintf(sess, 0, "proxyconnect: unable to resolve proxy name\n"); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
439 | *statusret = (h_errno | AIM_CONN_STATUS_RESOLVERR); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
440 | return -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
441 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
442 | free(proxy); |
|
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 | memset(&sa.sin_zero, 0, 8); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
445 | sa.sin_port = htons(proxyport); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
446 | memcpy(&sa.sin_addr, hp->h_addr, hp->h_length); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
447 | sa.sin_family = hp->h_addrtype; |
| 2086 | 448 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
449 | fd = socket(hp->h_addrtype, SOCK_STREAM, 0); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
450 | if (connect(fd, (struct sockaddr *)&sa, sizeof(struct sockaddr_in)) < 0) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
451 | faimdprintf(sess, 0, "proxyconnect: unable to connect to proxy\n"); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
452 | close(fd); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
453 | return -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
454 | } |
| 2086 | 455 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
456 | i = 0; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
457 | buf[0] = 0x05; /* SOCKS version 5 */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
458 | if (strlen(sess->socksproxy.username)) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
459 | buf[1] = 0x02; /* two methods */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
460 | buf[2] = 0x00; /* no authentication */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
461 | buf[3] = 0x02; /* username/password authentication */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
462 | i = 4; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
463 | } else { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
464 | buf[1] = 0x01; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
465 | buf[2] = 0x00; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
466 | i = 3; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
467 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
468 | if (write(fd, buf, i) < i) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
469 | *statusret = errno; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
470 | close(fd); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
471 | return -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
472 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
473 | if (read(fd, buf, 2) < 2) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
474 | *statusret = errno; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
475 | close(fd); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
476 | return -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
477 | } |
| 2086 | 478 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
479 | if ((buf[0] != 0x05) || (buf[1] == 0xff)) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
480 | *statusret = EINVAL; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
481 | close(fd); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
482 | return -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
483 | } |
| 2086 | 484 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
485 | /* check if we're doing username authentication */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
486 | if (buf[1] == 0x02) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
487 | i = aimutil_put8(buf, 0x01); /* version 1 */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
488 | i += aimutil_put8(buf+i, strlen(sess->socksproxy.username)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
489 | i += aimutil_putstr(buf+i, sess->socksproxy.username, strlen(sess->socksproxy.username)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
490 | i += aimutil_put8(buf+i, strlen(sess->socksproxy.password)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
491 | i += aimutil_putstr(buf+i, sess->socksproxy.password, strlen(sess->socksproxy.password)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
492 | if (write(fd, buf, i) < i) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
493 | *statusret = errno; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
494 | close(fd); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
495 | return -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
496 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
497 | if (read(fd, buf, 2) < 2) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
498 | *statusret = errno; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
499 | close(fd); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
500 | return -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
501 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
502 | if ((buf[0] != 0x01) || (buf[1] != 0x00)) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
503 | *statusret = EINVAL; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
504 | close(fd); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
505 | return -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
506 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
507 | } |
| 2086 | 508 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
509 | i = aimutil_put8(buf, 0x05); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
510 | i += aimutil_put8(buf+i, 0x01); /* CONNECT */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
511 | i += aimutil_put8(buf+i, 0x00); /* reserved */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
512 | i += aimutil_put8(buf+i, 0x03); /* address type: host name */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
513 | i += aimutil_put8(buf+i, strlen(host)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
514 | i += aimutil_putstr(buf+i, host, strlen(host)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
515 | i += aimutil_put16(buf+i, port); |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3694
diff
changeset
|
516 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
517 | if (write(fd, buf, i) < i) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
518 | *statusret = errno; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
519 | close(fd); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
520 | return -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
521 | } |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3694
diff
changeset
|
522 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
523 | if (read(fd, buf, 10) < 10) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
524 | *statusret = errno; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
525 | close(fd); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
526 | return -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
527 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
528 | if ((buf[0] != 0x05) || (buf[1] != 0x00)) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
529 | *statusret = EINVAL; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
530 | close(fd); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
531 | return -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
532 | } |
| 2086 | 533 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
534 | } else { /* connecting directly */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
535 | struct sockaddr_in sa; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
536 | struct hostent *hp; |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3694
diff
changeset
|
537 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
538 | if (!(hp = gethostbyname(host))) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
539 | *statusret = (h_errno | AIM_CONN_STATUS_RESOLVERR); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
540 | return -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
541 | } |
| 2086 | 542 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
543 | memset(&sa, 0, sizeof(struct sockaddr_in)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
544 | sa.sin_port = htons(port); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
545 | memcpy(&sa.sin_addr, hp->h_addr, hp->h_length); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
546 | sa.sin_family = hp->h_addrtype; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
547 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
548 | fd = socket(hp->h_addrtype, SOCK_STREAM, 0); |
| 2086 | 549 | |
|
7285
b9d07d0c9bc2
[gaim-migrate @ 7866]
Mark Doliner <markdoliner@pidgin.im>
parents:
7283
diff
changeset
|
550 | if (sess->nonblocking) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
551 | fcntl(fd, F_SETFL, O_NONBLOCK); /* XXX save flags */ |
|
3717
2fc0789e04e8
[gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents:
3694
diff
changeset
|
552 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
553 | if (connect(fd, (struct sockaddr *)&sa, sizeof(struct sockaddr_in)) < 0) { |
|
7285
b9d07d0c9bc2
[gaim-migrate @ 7866]
Mark Doliner <markdoliner@pidgin.im>
parents:
7283
diff
changeset
|
554 | if (sess->nonblocking) { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
555 | if ((errno == EINPROGRESS) || (errno == EINTR)) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
556 | if (statusret) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
557 | *statusret |= AIM_CONN_STATUS_INPROGRESS; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
558 | return fd; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
559 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
560 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
561 | close(fd); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
562 | fd = -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
563 | } |
| 2086 | 564 | } |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
565 | return fd; |
| 2086 | 566 | } |
| 567 | ||
| 568 | /** | |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
569 | * Clone an aim_conn_t. |
| 2086 | 570 | * |
| 571 | * A new connection is allocated, and the values are filled in | |
| 572 | * appropriately. Note that this function sets the new connnection's | |
| 573 | * ->priv pointer to be equal to that of its parent: only the pointer | |
| 574 | * is copied, not the data it points to. | |
| 575 | * | |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
576 | * @param sess The session containing this connection. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
577 | * @param src The connection to clone. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
578 | * @return Returns a pointer to the new aim_conn_t, or %NULL on error. |
| 2086 | 579 | */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
580 | faim_internal aim_conn_t *aim_cloneconn(aim_session_t *sess, aim_conn_t *src) |
| 2086 | 581 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
582 | aim_conn_t *conn; |
| 2086 | 583 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
584 | if (!(conn = aim_conn_getnext(sess))) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
585 | return NULL; |
| 2086 | 586 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
587 | conn->fd = src->fd; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
588 | conn->type = src->type; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
589 | conn->subtype = src->subtype; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
590 | conn->seqnum = src->seqnum; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
591 | conn->priv = src->priv; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
592 | conn->internal = src->internal; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
593 | conn->lastactivity = src->lastactivity; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
594 | conn->forcedlatency = src->forcedlatency; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
595 | conn->sessv = src->sessv; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
596 | aim_clonehandlers(sess, conn, src); |
| 2086 | 597 | |
|
2270
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
598 | if (src->inside) { |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
599 | /* |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
600 | * XXX should clone this section as well, but since currently |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
601 | * this function only gets called for some of that rendezvous |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
602 | * crap, and not on SNAC connections, its probably okay for |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
603 | * now. |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
604 | * |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
605 | */ |
|
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
606 | } |
| 2086 | 607 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
608 | return conn; |
| 2086 | 609 | } |
| 610 | ||
| 611 | /** | |
| 612 | * Opens a new connection to the specified dest host of specified | |
| 613 | * type, using the proxy settings if available. If @host is %NULL, | |
| 614 | * the connection is allocated and returned, but no connection | |
| 615 | * is made. | |
| 616 | * | |
| 617 | * FIXME: Return errors in a more sane way. | |
| 618 | * | |
| 8866 | 619 | * @param sess Session to create connection in |
| 620 | * @param type Type of connection to create | |
| 621 | * @param dest Host to connect to (in "host:port" syntax) | |
| 2086 | 622 | */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
623 | faim_export aim_conn_t *aim_newconn(aim_session_t *sess, int type, const char *dest) |
| 2086 | 624 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
625 | aim_conn_t *connstruct; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
626 | fu16_t port = FAIM_LOGIN_PORT; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
627 | char *host; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
628 | int i, ret; |
| 2086 | 629 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
630 | if (!(connstruct = aim_conn_getnext(sess))) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
631 | return NULL; |
| 2086 | 632 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
633 | connstruct->sessv = (void *)sess; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
634 | connstruct->type = type; |
| 2086 | 635 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
636 | if (!dest) { /* just allocate a struct */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
637 | connstruct->fd = -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
638 | connstruct->status = 0; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
639 | return connstruct; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
640 | } |
| 2086 | 641 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
642 | /* |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
643 | * As of 23 Jul 1999, AOL now sends the port number, preceded by a |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
644 | * colon, in the BOS redirect. This fatally breaks all previous |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
645 | * libfaims. Bad, bad AOL. |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
646 | * |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
647 | * We put this here to catch every case. |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
648 | * |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
649 | */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
650 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
651 | for(i = 0; i < (int)strlen(dest); i++) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
652 | if (dest[i] == ':') { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
653 | port = atoi(&(dest[i+1])); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
654 | break; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
655 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
656 | } |
| 2086 | 657 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
658 | host = (char *)malloc(i+1); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
659 | strncpy(host, dest, i); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
660 | host[i] = '\0'; |
| 2086 | 661 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
662 | if ((ret = aim_proxyconnect(sess, host, port, &connstruct->status)) < 0) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
663 | connstruct->fd = -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
664 | connstruct->status = (errno | AIM_CONN_STATUS_CONNERR); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
665 | free(host); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
666 | return connstruct; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
667 | } else |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
668 | connstruct->fd = ret; |
| 2086 | 669 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
670 | free(host); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
671 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
672 | return connstruct; |
| 2086 | 673 | } |
| 674 | ||
| 675 | /** | |
| 8866 | 676 | * Searches @sess for the passed connection. |
| 2086 | 677 | * |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
678 | * @param sess Session in which to look. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
679 | * @param conn Connection to look for. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
680 | * @return Returns 1 if the passed connection is present, zero otherwise. |
| 2086 | 681 | */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
682 | faim_export int aim_conn_in_sess(aim_session_t *sess, aim_conn_t *conn) |
| 2086 | 683 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
684 | aim_conn_t *cur; |
| 2086 | 685 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
686 | for (cur = sess->connlist; cur; cur = cur->next) { |
|
2270
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
687 | if (cur == conn) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
688 | return 1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
689 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
690 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
691 | return 0; |
| 2086 | 692 | } |
| 693 | ||
| 694 | /** | |
| 695 | * Waits for a socket with data or for timeout, whichever comes first. | |
| 696 | * See select(2). | |
| 697 | * | |
| 698 | * Return codes in *status: | |
| 699 | * -1 error in select() (%NULL returned) | |
| 700 | * 0 no events pending (%NULL returned) | |
| 701 | * 1 outgoing data pending (%NULL returned) | |
| 702 | * 2 incoming data pending (connection with pending data returned) | |
| 703 | * | |
| 8866 | 704 | * @param sess Session to wait on |
| 705 | * @param timeout How long to wait | |
| 706 | * @param status Return status | |
| 707 | * @return If @status is 2, returns connection with pending data, otherwise %NULL | |
|
10267
05279096b8c8
[gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents:
10035
diff
changeset
|
708 | */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
709 | faim_export aim_conn_t *aim_select(aim_session_t *sess, struct timeval *timeout, int *status) |
| 2086 | 710 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
711 | aim_conn_t *cur; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
712 | fd_set fds, wfds; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
713 | int maxfd, i, haveconnecting = 0; |
| 2086 | 714 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
715 | if (!sess->connlist) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
716 | *status = -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
717 | return NULL; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
718 | } |
| 2086 | 719 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
720 | FD_ZERO(&fds); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
721 | FD_ZERO(&wfds); |
| 2086 | 722 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
723 | for (cur = sess->connlist, maxfd = 0; cur; cur = cur->next) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
724 | if (cur->fd == -1) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
725 | /* don't let invalid/dead connections sit around */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
726 | *status = 2; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
727 | return cur; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
728 | } else if (cur->status & AIM_CONN_STATUS_INPROGRESS) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
729 | FD_SET(cur->fd, &wfds); |
| 2086 | 730 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
731 | haveconnecting++; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
732 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
733 | FD_SET(cur->fd, &fds); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
734 | if (cur->fd > maxfd) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
735 | maxfd = cur->fd; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
736 | } |
| 2086 | 737 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
738 | /* |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
739 | * If we have data waiting to be sent, return |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
740 | * |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
741 | * We have to not do this if theres at least one |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
742 | * connection thats still connecting, since that connection |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
743 | * may have queued data and this return would prevent |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
744 | * the connection from ever completing! This is a major |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
745 | * inadequacy of the libfaim way of doing things. It means |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
746 | * that nothing can transmit as long as there's connecting |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
747 | * sockets. Evil. |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
748 | * |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
749 | * But its still better than having blocking connects. |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
750 | * |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
751 | */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
752 | if (!haveconnecting && sess->queue_outgoing) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
753 | *status = 1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
754 | return NULL; |
|
10267
05279096b8c8
[gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents:
10035
diff
changeset
|
755 | } |
| 2086 | 756 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
757 | if ((i = select(maxfd+1, &fds, &wfds, NULL, timeout))>=1) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
758 | for (cur = sess->connlist; cur; cur = cur->next) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
759 | if ((FD_ISSET(cur->fd, &fds)) || |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
760 | ((cur->status & AIM_CONN_STATUS_INPROGRESS) && |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
761 | FD_ISSET(cur->fd, &wfds))) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
762 | *status = 2; |
|
2270
c65fc356fb68
[gaim-migrate @ 2280]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2246
diff
changeset
|
763 | return cur; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
764 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
765 | } |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
766 | *status = 0; /* shouldn't happen */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
767 | } else if ((i == -1) && (errno == EINTR)) /* treat interrupts as a timeout */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
768 | *status = 0; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
769 | else |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
770 | *status = i; /* can be 0 or -1 */ |
| 2086 | 771 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
772 | return NULL; /* no waiting or error, return */ |
| 2086 | 773 | } |
| 774 | ||
| 775 | /** | |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
776 | * Set a forced latency value for connection. Basically causes |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
777 | * @newval seconds to be spent between transmits on a connection. |
| 2086 | 778 | * |
| 779 | * This is my lame attempt at overcoming not understanding the rate | |
| 780 | * limiting. | |
| 781 | * | |
| 782 | * XXX: This should really be replaced with something that scales and | |
| 783 | * backs off like the real rate limiting does. | |
| 784 | * | |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
785 | * @param conn Conn to set latency for. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
786 | * @param newval Number of seconds to force between transmits. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
787 | * @return Returns -1 if the connection does not exist, zero otherwise. |
| 2086 | 788 | */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
789 | faim_export int aim_conn_setlatency(aim_conn_t *conn, int newval) |
| 2086 | 790 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
791 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
792 | if (!conn) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
793 | return -1; |
| 2086 | 794 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
795 | conn->forcedlatency = newval; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
796 | conn->lastactivity = 0; /* reset this just to make sure */ |
| 2086 | 797 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
798 | return 0; |
| 2086 | 799 | } |
| 800 | ||
| 801 | /** | |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
802 | * Configure a proxy for this session. |
| 2086 | 803 | * |
| 804 | * Call this with your SOCKS5 proxy server parameters before | |
| 805 | * the first call to aim_newconn(). If called with all %NULL | |
| 806 | * args, it will clear out a previously set proxy. | |
| 807 | * | |
| 808 | * Set username and password to %NULL if not applicable. | |
| 809 | * | |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
810 | * @param sess Session to set proxy for. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
811 | * @param server SOCKS server. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
812 | * @param username SOCKS username. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
813 | * @param password SOCKS password. |
| 2086 | 814 | */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
815 | faim_export void aim_setupproxy(aim_session_t *sess, const char *server, const char *username, const char *password) |
| 2086 | 816 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
817 | /* clear out the proxy info */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
818 | if (!server || !strlen(server)) { |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
819 | memset(sess->socksproxy.server, 0, sizeof(sess->socksproxy.server)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
820 | memset(sess->socksproxy.username, 0, sizeof(sess->socksproxy.username)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
821 | memset(sess->socksproxy.password, 0, sizeof(sess->socksproxy.password)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
822 | return; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
823 | } |
| 2086 | 824 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
825 | strncpy(sess->socksproxy.server, server, sizeof(sess->socksproxy.server)); |
|
10267
05279096b8c8
[gaim-migrate @ 11413]
Mark Doliner <markdoliner@pidgin.im>
parents:
10035
diff
changeset
|
826 | if (username && strlen(username)) |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
827 | strncpy(sess->socksproxy.username, username, sizeof(sess->socksproxy.username)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
828 | if (password && strlen(password)) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
829 | strncpy(sess->socksproxy.password, password, sizeof(sess->socksproxy.password)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
830 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
831 | return; |
| 2086 | 832 | } |
| 833 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
834 | static void defaultdebugcb(aim_session_t *sess, int level, const char *format, va_list va) |
| 2086 | 835 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
836 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
837 | vfprintf(stderr, format, va); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
838 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
839 | return; |
| 2086 | 840 | } |
| 841 | ||
| 842 | /** | |
|
7282
73b94979f76b
[gaim-migrate @ 7861]
Mark Doliner <markdoliner@pidgin.im>
parents:
7045
diff
changeset
|
843 | * Initializes a session structure by setting the initial values |
|
73b94979f76b
[gaim-migrate @ 7861]
Mark Doliner <markdoliner@pidgin.im>
parents:
7045
diff
changeset
|
844 | * stuff in the aim_session_t struct. |
| 2086 | 845 | * |
|
7282
73b94979f76b
[gaim-migrate @ 7861]
Mark Doliner <markdoliner@pidgin.im>
parents:
7045
diff
changeset
|
846 | * @param sess Session to initialize. |
|
7285
b9d07d0c9bc2
[gaim-migrate @ 7866]
Mark Doliner <markdoliner@pidgin.im>
parents:
7283
diff
changeset
|
847 | * @param nonblocking Set to true if you want connections to be non-blocking. |
|
7282
73b94979f76b
[gaim-migrate @ 7861]
Mark Doliner <markdoliner@pidgin.im>
parents:
7045
diff
changeset
|
848 | * @param debuglevel Level of debugging output (zero is least). |
| 2086 | 849 | */ |
|
10035
03f36b9a1276
[gaim-migrate @ 10994]
Mark Doliner <markdoliner@pidgin.im>
parents:
8888
diff
changeset
|
850 | faim_export void aim_session_init(aim_session_t *sess, fu8_t nonblocking, int debuglevel) |
| 2086 | 851 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
852 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
853 | if (!sess) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
854 | return; |
| 2086 | 855 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
856 | memset(sess, 0, sizeof(aim_session_t)); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
857 | aim_connrst(sess); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
858 | sess->queue_outgoing = NULL; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
859 | sess->queue_incoming = NULL; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
860 | aim_initsnachash(sess); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
861 | sess->msgcookies = NULL; |
|
7285
b9d07d0c9bc2
[gaim-migrate @ 7866]
Mark Doliner <markdoliner@pidgin.im>
parents:
7283
diff
changeset
|
862 | sess->nonblocking = nonblocking; |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
863 | sess->debug = debuglevel; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
864 | sess->debugcb = defaultdebugcb; |
|
7466
1dd3ed07bc24
[gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents:
7285
diff
changeset
|
865 | sess->modlistv = NULL; |
|
1dd3ed07bc24
[gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents:
7285
diff
changeset
|
866 | sess->snacid_next = 0x00000001; |
| 2086 | 867 | |
|
7466
1dd3ed07bc24
[gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents:
7285
diff
changeset
|
868 | sess->locate.userinfo = NULL; |
|
1dd3ed07bc24
[gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents:
7285
diff
changeset
|
869 | sess->locate.torequest = NULL; |
|
1dd3ed07bc24
[gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents:
7285
diff
changeset
|
870 | sess->locate.requested = NULL; |
|
1dd3ed07bc24
[gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents:
7285
diff
changeset
|
871 | sess->locate.waiting_for_response = FALSE; |
| 2991 | 872 | sess->ssi.received_data = 0; |
|
4230
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
4102
diff
changeset
|
873 | sess->ssi.numitems = 0; |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
4102
diff
changeset
|
874 | sess->ssi.official = NULL; |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
4102
diff
changeset
|
875 | sess->ssi.local = NULL; |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
4102
diff
changeset
|
876 | sess->ssi.pending = NULL; |
|
b5393db78439
[gaim-migrate @ 4475]
Mark Doliner <markdoliner@pidgin.im>
parents:
4102
diff
changeset
|
877 | sess->ssi.timestamp = (time_t)0; |
| 2991 | 878 | sess->ssi.waiting_for_ack = 0; |
|
7466
1dd3ed07bc24
[gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents:
7285
diff
changeset
|
879 | sess->icq_info = NULL; |
|
4102
06290da3f88d
[gaim-migrate @ 4317]
Mark Doliner <markdoliner@pidgin.im>
parents:
3952
diff
changeset
|
880 | sess->authinfo = NULL; |
|
7466
1dd3ed07bc24
[gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents:
7285
diff
changeset
|
881 | sess->emailinfo = NULL; |
|
1dd3ed07bc24
[gaim-migrate @ 8079]
Mark Doliner <markdoliner@pidgin.im>
parents:
7285
diff
changeset
|
882 | sess->oft_info = NULL; |
|
3694
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3630
diff
changeset
|
883 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
884 | /* |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
885 | * This must always be set. Default to the queue-based |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
886 | * version for back-compatibility. |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
887 | */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
888 | aim_tx_setenqueue(sess, AIM_TX_QUEUED, NULL); |
| 2086 | 889 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
890 | /* |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
891 | * Register all the modules for this session... |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
892 | */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
893 | aim__registermodule(sess, misc_modfirst); /* load the catch-all first */ |
|
7474
757569d68123
[gaim-migrate @ 8087]
Mark Doliner <markdoliner@pidgin.im>
parents:
7466
diff
changeset
|
894 | aim__registermodule(sess, service_modfirst); |
| 2672 | 895 | aim__registermodule(sess, locate_modfirst); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
896 | aim__registermodule(sess, buddylist_modfirst); |
| 2672 | 897 | aim__registermodule(sess, msg_modfirst); |
| 898 | aim__registermodule(sess, adverts_modfirst); | |
| 899 | aim__registermodule(sess, invite_modfirst); | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
900 | aim__registermodule(sess, admin_modfirst); |
| 2672 | 901 | aim__registermodule(sess, popups_modfirst); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
902 | aim__registermodule(sess, bos_modfirst); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
903 | aim__registermodule(sess, search_modfirst); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
904 | aim__registermodule(sess, stats_modfirst); |
| 2672 | 905 | aim__registermodule(sess, translate_modfirst); |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
906 | aim__registermodule(sess, chatnav_modfirst); |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
907 | aim__registermodule(sess, chat_modfirst); |
|
6879
cc7abcef355c
[gaim-migrate @ 7425]
Mark Doliner <markdoliner@pidgin.im>
parents:
5435
diff
changeset
|
908 | aim__registermodule(sess, odir_modfirst); |
|
cc7abcef355c
[gaim-migrate @ 7425]
Mark Doliner <markdoliner@pidgin.im>
parents:
5435
diff
changeset
|
909 | aim__registermodule(sess, bart_modfirst); |
|
4804
e6e0e6d50d39
[gaim-migrate @ 5124]
Mark Doliner <markdoliner@pidgin.im>
parents:
4624
diff
changeset
|
910 | /* missing 0x11 - 0x12 */ |
| 2672 | 911 | aim__registermodule(sess, ssi_modfirst); |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2675
diff
changeset
|
912 | /* missing 0x14 */ |
|
3952
d13e1fde68d8
[gaim-migrate @ 4133]
Mark Doliner <markdoliner@pidgin.im>
parents:
3717
diff
changeset
|
913 | 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
|
914 | /* missing 0x16 */ |
| 2672 | 915 | aim__registermodule(sess, auth_modfirst); |
|
3694
49a336931cc6
[gaim-migrate @ 3824]
Mark Doliner <markdoliner@pidgin.im>
parents:
3630
diff
changeset
|
916 | aim__registermodule(sess, email_modfirst); |
| 2086 | 917 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
918 | return; |
| 2086 | 919 | } |
| 920 | ||
| 921 | /** | |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
922 | * Logoff and deallocate a session. |
| 2086 | 923 | * |
| 8866 | 924 | * @param sess Session to kill |
| 2086 | 925 | */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
926 | faim_export void aim_session_kill(aim_session_t *sess) |
| 2086 | 927 | { |
|
2635
60897108c74c
[gaim-migrate @ 2648]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2270
diff
changeset
|
928 | aim_cleansnacs(sess, -1); |
| 2086 | 929 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
930 | aim_logoff(sess); |
| 2086 | 931 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
932 | aim__shutdownmodules(sess); |
| 2086 | 933 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
934 | return; |
| 2086 | 935 | } |
| 936 | ||
| 937 | /** | |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
938 | * Set the function to call when outputting debugging info. |
| 2086 | 939 | * |
| 940 | * The function specified is called whenever faimdprintf() is used within | |
| 941 | * libfaim, and the session's debugging level is greater tha nor equal to | |
| 942 | * the value faimdprintf was called with. | |
| 943 | * | |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
944 | * @param sess Session to change. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
945 | * @param cb Function to call. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
946 | * @return Returns -1 if the session does not exist, zero otherwise. |
| 2086 | 947 | */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
948 | faim_export int aim_setdebuggingcb(aim_session_t *sess, faim_debugging_callback_t cb) |
| 2086 | 949 | { |
| 950 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
951 | if (!sess) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
952 | return -1; |
| 2086 | 953 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
954 | sess->debugcb = cb; |
| 2086 | 955 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
956 | return 0; |
| 2086 | 957 | } |
| 958 | ||
| 959 | /** | |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
960 | * Determine if a connection is connecting. |
| 2086 | 961 | * |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
962 | * @param conn Connection to examine. |
| 8866 | 963 | * @return Returns nonzero if the connection is in the process of |
| 964 | * connecting (or if it just completed and | |
| 965 | * aim_conn_completeconnect() has yet to be called on it). | |
| 2086 | 966 | */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
967 | faim_export int aim_conn_isconnecting(aim_conn_t *conn) |
| 2086 | 968 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
969 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
970 | if (!conn) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
971 | return 0; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
972 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
973 | return !!(conn->status & AIM_CONN_STATUS_INPROGRESS); |
| 2086 | 974 | } |
| 975 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
976 | /* |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
977 | * XXX this is nearly as ugly as proxyconnect(). |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
978 | */ |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
979 | faim_export int aim_conn_completeconnect(aim_session_t *sess, aim_conn_t *conn) |
| 2086 | 980 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
981 | aim_rxcallback_t userfunc; |
| 2086 | 982 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
983 | if (!conn || (conn->fd == -1)) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
984 | return -1; |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
985 | |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
986 | if (!(conn->status & AIM_CONN_STATUS_INPROGRESS)) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
987 | return -1; |
| 2086 | 988 | |
|
5124
96cd4ae1204e
[gaim-migrate @ 5487]
Mark Doliner <markdoliner@pidgin.im>
parents:
4830
diff
changeset
|
989 | fcntl(conn->fd, F_SETFL, 0); |
|
96cd4ae1204e
[gaim-migrate @ 5487]
Mark Doliner <markdoliner@pidgin.im>
parents:
4830
diff
changeset
|
990 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
991 | conn->status &= ~AIM_CONN_STATUS_INPROGRESS; |
| 2086 | 992 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
993 | 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
|
994 | userfunc(sess, NULL, conn); |
| 2086 | 995 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
996 | /* 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
|
997 | aim_tx_flushqueue(sess); |
| 2086 | 998 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
999 | return 0; |
| 2086 | 1000 | } |
| 1001 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
1002 | faim_export aim_session_t *aim_conn_getsess(aim_conn_t *conn) |
| 2086 | 1003 | { |
| 1004 | ||
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
1005 | if (!conn) |
|
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
1006 | return NULL; |
| 2086 | 1007 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
1008 | return (aim_session_t *)conn->sessv; |
| 2086 | 1009 | } |
| 1010 | ||
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
1011 | /** |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
1012 | * Close -ALL- open connections. |
| 2086 | 1013 | * |
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
1014 | * @param sess The session. |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
1015 | * @return Zero. |
| 2086 | 1016 | */ |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
1017 | faim_export int aim_logoff(aim_session_t *sess) |
| 2086 | 1018 | { |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
1019 | aim_connrst(sess); /* in case we want to connect again */ |
| 2086 | 1020 | |
|
2246
8ade8b7421af
[gaim-migrate @ 2256]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2086
diff
changeset
|
1021 | return 0; |
| 2086 | 1022 | } |
| 1023 | ||
|
8880
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
1024 | /** |
|
15b365a0a7fe
[gaim-migrate @ 9649]
Mark Doliner <markdoliner@pidgin.im>
parents:
8866
diff
changeset
|
1025 | * 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
|
1026 | * sends these _every minute_ to keep the connection alive. |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2675
diff
changeset
|
1027 | */ |
|
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2675
diff
changeset
|
1028 | faim_export int aim_flap_nop(aim_session_t *sess, aim_conn_t *conn) |
|
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2675
diff
changeset
|
1029 | { |
|
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2675
diff
changeset
|
1030 | aim_frame_t *fr; |
|
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2675
diff
changeset
|
1031 | |
|
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2675
diff
changeset
|
1032 | if (!(fr = aim_tx_new(sess, conn, AIM_FRAMETYPE_FLAP, 0x05, 0))) |
|
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2675
diff
changeset
|
1033 | return -ENOMEM; |
|
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2675
diff
changeset
|
1034 | |
|
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2675
diff
changeset
|
1035 | aim_tx_enqueue(sess, fr); |
|
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2675
diff
changeset
|
1036 | |
|
7283
aa76f7c93746
[gaim-migrate @ 7863]
Mark Doliner <markdoliner@pidgin.im>
parents:
7282
diff
changeset
|
1037 | /* clean out SNACs over 60sec old */ |
|
aa76f7c93746
[gaim-migrate @ 7863]
Mark Doliner <markdoliner@pidgin.im>
parents:
7282
diff
changeset
|
1038 | aim_cleansnacs(sess, 60); |
|
aa76f7c93746
[gaim-migrate @ 7863]
Mark Doliner <markdoliner@pidgin.im>
parents:
7282
diff
changeset
|
1039 | |
|
2703
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2675
diff
changeset
|
1040 | return 0; |
|
6111a9790868
[gaim-migrate @ 2716]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
2675
diff
changeset
|
1041 | } |