Mercurial > pidgin
comparison libfaim/aim_conn.c @ 279:501e09c51cbc
[gaim-migrate @ 289]
Updates to libfaim -> updates to gaim.
committer: Tailor Script <tailor@pidgin.im>
author | Eric Warmenhoven <eric@warmenhoven.org> |
---|---|
date | Mon, 29 May 2000 20:30:48 +0000 |
parents | 6ced2f1c8b24 |
children | 7b06ba09ffe2 |
comparison
equal
deleted
inserted
replaced
278:29e1669b006b | 279:501e09c51cbc |
---|---|
9 #include <aim.h> | 9 #include <aim.h> |
10 | 10 |
11 void aim_connrst(struct aim_session_t *sess) | 11 void aim_connrst(struct aim_session_t *sess) |
12 { | 12 { |
13 int i; | 13 int i; |
14 for (i = 0; i < AIM_CONN_MAX; i++) | 14 for (i = 0; i < AIM_CONN_MAX; i++) { |
15 { | 15 aim_conn_close(&sess->conns[i]); |
16 sess->conns[i].fd = -1; | 16 } |
17 sess->conns[i].type = -1; | |
18 sess->conns[i].status = 0; | |
19 sess->conns[i].seqnum = 0; | |
20 sess->conns[i].lastactivity = 0; | |
21 sess->conns[i].forcedlatency = 0; | |
22 aim_clearhandlers(&(sess->conns[i])); | |
23 sess->conns[i].handlerlist = NULL; | |
24 } | |
25 | |
26 } | 17 } |
27 | 18 |
28 struct aim_conn_t *aim_conn_getnext(struct aim_session_t *sess) | 19 struct aim_conn_t *aim_conn_getnext(struct aim_session_t *sess) |
29 { | 20 { |
30 int i; | 21 int i; |
46 aim_clearhandlers(deadconn); | 37 aim_clearhandlers(deadconn); |
47 deadconn->handlerlist = NULL; | 38 deadconn->handlerlist = NULL; |
48 if (deadconn->priv) | 39 if (deadconn->priv) |
49 free(deadconn->priv); | 40 free(deadconn->priv); |
50 deadconn->priv = NULL; | 41 deadconn->priv = NULL; |
42 faim_mutex_init(&deadconn->active, NULL); | |
51 } | 43 } |
52 | 44 |
53 struct aim_conn_t *aim_getconn_type(struct aim_session_t *sess, | 45 struct aim_conn_t *aim_getconn_type(struct aim_session_t *sess, |
54 int type) | 46 int type) |
55 { | 47 { |
98 * | 90 * |
99 * We put this here to catch every case. | 91 * We put this here to catch every case. |
100 * | 92 * |
101 */ | 93 */ |
102 | 94 |
103 for(i=0;i<strlen(dest);i++) | 95 for(i=0;i<strlen(dest);i++) { |
104 { | 96 if (dest[i] == ':') { |
105 if (dest[i] == ':') { | 97 port = atoi(&(dest[i+1])); |
106 port = atoi(&(dest[i+1])); | 98 break; |
107 break; | |
108 } | |
109 } | 99 } |
100 } | |
110 host = (char *)malloc(i+1); | 101 host = (char *)malloc(i+1); |
111 strncpy(host, dest, i); | 102 strncpy(host, dest, i); |
112 host[i] = '\0'; | 103 host[i] = '\0'; |
113 | 104 |
114 hp = gethostbyname2(host, AF_INET); | 105 hp = gethostbyname2(host, AF_INET); |
115 free(host); | 106 free(host); |
116 | 107 |
117 if (hp == NULL) | 108 if (hp == NULL) { |
118 { | 109 connstruct->status = (h_errno | AIM_CONN_STATUS_RESOLVERR); |
119 connstruct->status = (h_errno | AIM_CONN_STATUS_RESOLVERR); | 110 return connstruct; |
120 return connstruct; | 111 } |
121 } | |
122 | 112 |
123 memset(&sa.sin_zero, 0, 8); | 113 memset(&sa.sin_zero, 0, 8); |
124 sa.sin_port = htons(port); | 114 sa.sin_port = htons(port); |
125 memcpy(&sa.sin_addr, hp->h_addr, hp->h_length); | 115 memcpy(&sa.sin_addr, hp->h_addr, hp->h_length); |
126 sa.sin_family = hp->h_addrtype; | 116 sa.sin_family = hp->h_addrtype; |
127 | 117 |
128 connstruct->fd = socket(hp->h_addrtype, SOCK_STREAM, 0); | 118 connstruct->fd = socket(hp->h_addrtype, SOCK_STREAM, 0); |
129 ret = connect(connstruct->fd, (struct sockaddr *)&sa, sizeof(struct sockaddr_in)); | 119 ret = connect(connstruct->fd, (struct sockaddr *)&sa, sizeof(struct sockaddr_in)); |
130 if( ret < 0) | 120 if(ret < 0) { |
131 { | 121 connstruct->fd = -1; |
132 connstruct->fd = -1; | 122 connstruct->status = (errno | AIM_CONN_STATUS_CONNERR); |
133 connstruct->status = (errno | AIM_CONN_STATUS_CONNERR); | 123 return connstruct; |
134 return connstruct; | 124 } |
135 } | |
136 | 125 |
137 return connstruct; | 126 return connstruct; |
138 } | 127 } |
139 | 128 |
140 int aim_conngetmaxfd(struct aim_session_t *sess) | 129 int aim_conngetmaxfd(struct aim_session_t *sess) |
141 { | 130 { |
142 int i,j; | 131 int i,j; |
143 j=0; | 132 |
144 for (i=0;i<AIM_CONN_MAX;i++) | 133 for (i=0,j=0;i<AIM_CONN_MAX;i++) |
145 if(sess->conns[i].fd > j) | 134 if(sess->conns[i].fd > j) |
146 j = sess->conns[i].fd; | 135 j = sess->conns[i].fd; |
147 return j; | 136 return j; |
148 } | 137 } |
149 | 138 |
150 int aim_countconn(struct aim_session_t *sess) | 139 int aim_countconn(struct aim_session_t *sess) |
151 { | 140 { |
152 int i,cnt; | 141 int i,cnt; |
153 cnt = 0; | 142 |
154 for (i=0;i<AIM_CONN_MAX;i++) | 143 for (i=0,cnt=0;i<AIM_CONN_MAX;i++) |
155 if (sess->conns[i].fd > -1) | 144 if (sess->conns[i].fd > -1) |
156 cnt++; | 145 cnt++; |
157 return cnt; | 146 return cnt; |
158 } | 147 } |
159 | 148 |
237 return 0; | 226 return 0; |
238 } | 227 } |
239 | 228 |
240 void aim_session_init(struct aim_session_t *sess) | 229 void aim_session_init(struct aim_session_t *sess) |
241 { | 230 { |
242 int i; | |
243 | |
244 if (!sess) | 231 if (!sess) |
245 return; | 232 return; |
246 | 233 |
247 memset(sess->logininfo.screen_name, 0x00, MAXSNLEN); | 234 memset(sess->logininfo.screen_name, 0x00, MAXSNLEN); |
248 sess->logininfo.BOSIP = NULL; | 235 sess->logininfo.BOSIP = NULL; |
249 memset(sess->logininfo.cookie, 0x00, AIM_COOKIELEN); | 236 memset(sess->logininfo.cookie, 0x00, AIM_COOKIELEN); |
250 sess->logininfo.email = NULL; | 237 sess->logininfo.email = NULL; |
251 sess->logininfo.regstatus = 0x00; | 238 sess->logininfo.regstatus = 0x00; |
252 | 239 |
253 for (i = 0; i < AIM_CONN_MAX; i++) | 240 aim_connrst(sess); |
254 { | 241 |
255 sess->conns[i].fd = -1; | |
256 sess->conns[i].type = -1; | |
257 sess->conns[i].status = 0; | |
258 sess->conns[i].seqnum = 0; | |
259 sess->conns[i].lastactivity = 0; | |
260 sess->conns[i].forcedlatency = 0; | |
261 sess->conns[i].handlerlist = NULL; | |
262 sess->conns[i].priv = NULL; | |
263 } | |
264 | |
265 sess->queue_outgoing = NULL; | 242 sess->queue_outgoing = NULL; |
266 sess->queue_incoming = NULL; | 243 sess->queue_incoming = NULL; |
267 sess->pendingjoin = NULL; | 244 sess->pendingjoin = NULL; |
268 sess->outstanding_snacs = NULL; | 245 sess->outstanding_snacs = NULL; |
269 sess->snac_nextid = 0x00000001; | 246 sess->snac_nextid = 0x00000001; |
270 | 247 |
248 /* | |
249 * This must always be set. Default to the queue-based | |
250 * version for back-compatibility. | |
251 */ | |
252 sess->tx_enqueue = &aim_tx_enqueue__queuebased; | |
253 | |
271 return; | 254 return; |
272 } | 255 } |