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 }