libfaim/aim_ft.c

Mon, 04 Dec 2000 21:46:39 +0000

author
Eric Warmenhoven <warmenhoven@yahoo.com>
date
Mon, 04 Dec 2000 21:46:39 +0000
changeset 1200
7fa464e62e7d
parent 1186
17204492d19d
child 1245
5f8458b2e8e8
permissions
-rw-r--r--

[gaim-migrate @ 1210]
unsigned int

503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 #include <faim/aim.h>
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2
889
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
3 #ifndef _WIN32
840
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
4 #include <netdb.h>
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
5 #include <sys/socket.h>
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
6 #include <netinet/in.h>
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
7 #include <sys/utsname.h> /* for aim_directim_initiate */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
8 #include <arpa/inet.h> /* for inet_ntoa */
889
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
9 #endif
640
dd167c2daf41 [gaim-migrate @ 650]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 503
diff changeset
10
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
11 /* aim_msgcookies.c is mostly new. just look at the diff and replace yours, easiest. */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
12
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
13 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
14 function name where i had it
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
15 aim_send_im_direct aim_im.c
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
16 aim_directim_initiate aim_im.c
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
17 aim_filetransfer_accept aim_im.c
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
18 aim_getlisting aim_misc.c (?!) -- prototype function. can be ignored.
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
19 establish aim_misc.c
840
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
20 aim_get_command_rendezvous aim_r
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
21 oft_getfh aim_rxqueue.c
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
22 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
23
840
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
24 faim_export int aim_handlerendconnect(struct aim_session_t *sess, struct aim_conn_t *cur)
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
25 {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26 int acceptfd = 0;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
27 rxcallback_t userfunc;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
28 struct sockaddr cliaddr;
1200
7fa464e62e7d [gaim-migrate @ 1210]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1186
diff changeset
29 unsigned int clilen = sizeof(cliaddr);
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
30 int ret = 0;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
31
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
32 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
33 * Listener sockets only have incoming connections. No data.
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
34 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
35 if( (acceptfd = accept(cur->fd, &cliaddr, &clilen)) == -1)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
36 return -1;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
37
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
38 if (cliaddr.sa_family != AF_INET) /* just in case IPv6 really is happening */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
39 return -1;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
40
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
41 switch(cur->subtype) {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
42 case AIM_CONN_SUBTYPE_OFT_DIRECTIM: {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
43 struct aim_directim_priv *priv;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
44
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
45 priv = (struct aim_directim_priv *)calloc(1, sizeof(struct aim_directim_priv));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
46
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
47 snprintf(priv->ip, sizeof(priv->ip), "%s:%u", inet_ntoa(((struct sockaddr_in *)&cliaddr)->sin_addr), ntohs(((struct sockaddr_in *)&cliaddr)->sin_port));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
48
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
49 if(!cur->priv)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
50 cur->priv = priv; /* what happens if there is one?! -- mid */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
51
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
52 cur->type = AIM_CONN_TYPE_RENDEZVOUS;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
53 close(cur->fd); /* should we really do this? seems like the client should decide. maybe clone the connection and keep the listener open. -- mid */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
54 cur->fd = acceptfd;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
55
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
56 if ( (userfunc = aim_callhandler(cur, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINITIATE)))
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
57 ret = userfunc(sess, NULL, cur);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
58
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
59 break;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
60 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
61 case AIM_CONN_SUBTYPE_OFT_GETFILE: {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
62 struct aim_filetransfer_priv *priv;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
63
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
64 priv = (struct aim_filetransfer_priv *)calloc(1, sizeof(struct aim_filetransfer_priv));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
65
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
66 snprintf(priv->ip, sizeof(priv->ip), "%s:%u", inet_ntoa(((struct sockaddr_in *)&cliaddr)->sin_addr), ntohs(((struct sockaddr_in *)&cliaddr)->sin_port));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
67
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
68 if(!cur->priv)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
69 cur->priv = priv;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
70
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
71 if ( (userfunc = aim_callhandler(cur, AIM_CB_FAM_OFT, AIM_CB_OFT_GETFILEINITIATE)))
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
72 ret = userfunc(sess, NULL, cur);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
73 break;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
74 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
75 default: {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
76 /* XXX */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
77 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
78 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
79 return ret;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
80 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
81
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
82
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
83 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
84 * aim_send_im_direct:
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
85 * sess - session
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
86 * conn - directim connection
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
87 * msg - null-terminated string to send
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
88 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
89
840
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
90 faim_export int aim_send_im_direct(struct aim_session_t *sess,
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
91 struct aim_conn_t *conn,
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
92 char *msg)
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
93 {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
94 struct command_tx_struct *newpacket , *newpacket2;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
95
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
96 /* newpacket contains a real header with data, newpacket2 is just a
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
97 null packet, with a cookie and a lot of 0x00s. newpacket is the
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
98 "i'm sending", newpacket2 is the "i'm typing".*/
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
99
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
100 /* uhm. the client should send those as two seperate things -- mid */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
101
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
102 struct aim_directim_priv *priv = NULL;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
103 int i;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
104
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
105 if (!sess || !conn || !(conn->type) || (conn->type != AIM_CONN_TYPE_RENDEZVOUS) || !conn->priv || !msg) {
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
106 printf("faim: directim: invalid arguments\n");
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
107 return -1;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
108 };
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
109
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
110 if (strlen(msg) >= MAXMSGLEN)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
111 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
112
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
113 priv = (struct aim_directim_priv *)conn->priv;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
114
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
115 /* NULLish Header */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
116
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
117 if (!(newpacket2 = aim_tx_new(AIM_FRAMETYPE_OFT, 0x0001, conn, 0))) {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
118 printf("faim: directim: tx_new2 failed\n");
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
119 return -1;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
120 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
121
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
122 newpacket2->lock = 1; /* lock struct */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
123
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
124 memcpy(newpacket2->hdr.oft.magic, "ODC2", 4);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
125 newpacket2->hdr.oft.hdr2len = 0x44;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
126
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
127 if (!(newpacket2->hdr.oft.hdr2 = calloc(1,newpacket2->hdr.oft.hdr2len))) {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
128 free(newpacket2);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
129 return -1;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
130 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
131
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
132 i = 0;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
133 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0006);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
134 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
135
840
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
136 i += aimutil_putstr(newpacket2->hdr.oft.hdr2+i, (char *)priv->cookie, 8);
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
137
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
138 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
139 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
140 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
141 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
142
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
143 i += aimutil_put32(newpacket2->hdr.oft.hdr2+i, 0x00000000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
144
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
145 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
146 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
147 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
148
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
149 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x000e);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
150
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
151 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
152 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
153
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
154 i += aimutil_putstr(newpacket2->hdr.oft.hdr2+i, sess->logininfo.screen_name, strlen(sess->logininfo.screen_name));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
155
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
156 i = 52; /* 0x34 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
157 i += aimutil_put8(newpacket2->hdr.oft.hdr2+i, 0x00); /* 53 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
158 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000); /* 55 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
159 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
160 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
161 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);/* 61 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
162 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
163 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);/* 65 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
164 i += aimutil_put16(newpacket2->hdr.oft.hdr2+i, 0x0000);/* end of hdr2 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
165
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
166 newpacket2->lock = 0;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
167 newpacket2->data = NULL;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
168
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
169 aim_tx_enqueue(sess, newpacket2);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
170
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
171 /* Header packet */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
172
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
173 if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OFT, 0x0001, conn, strlen(msg)))) {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
174 printf("faim: directim: tx_new failed\n");
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
175 return -1;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
176 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
177
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
178 newpacket->lock = 1; /* lock struct */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
179
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
180 memcpy(newpacket->hdr.oft.magic, "ODC2", 4);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
181 newpacket->hdr.oft.hdr2len = 0x54;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
182
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
183 if (!(newpacket->hdr.oft.hdr2 = calloc(1,newpacket->hdr.oft.hdr2len))) {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
184 free(newpacket);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
185 return -1;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
186 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
187
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
188 i = 0;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
189 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0006);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
190 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
191
840
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
192 i += aimutil_putstr(newpacket->hdr.oft.hdr2+i, (char *)priv->cookie, 8);
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
193
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
194 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
195 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
196 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
197 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
198
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
199 i += aimutil_put32(newpacket->hdr.oft.hdr2+i, strlen(msg));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
200
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
201 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
202 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
203 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
204 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
205 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
206 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
207
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
208 i += aimutil_putstr(newpacket->hdr.oft.hdr2+i, sess->logininfo.screen_name, strlen(sess->logininfo.screen_name));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
209
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
210 i = 52; /* 0x34 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
211 i += aimutil_put8(newpacket->hdr.oft.hdr2+i, 0x00); /* 53 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
212 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000); /* 55 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
213 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
214 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
215 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);/* 61 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
216 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
217 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);/* 65 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
218 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);/* end of hdr2 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
219
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
220 /* values grabbed from a dump */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
221 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0008); /* 69 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
222 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x000c);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
223 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0000);/* 71 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
224 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x1466);/* 73 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
225 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x0001);/* 73 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
226 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x2e0f);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
227 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0x393e);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
228 i += aimutil_put16(newpacket->hdr.oft.hdr2+i, 0xcac8);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
229
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
230 memcpy(newpacket->data, msg, strlen(msg));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
231
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
232 newpacket->lock = 0;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
233
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
234 aim_tx_enqueue(sess, newpacket);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
235
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
236 return 0;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
237 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
238
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
239 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
240 * aim_directim_intitiate:
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
241 * For those times when we want to open up the directim channel ourselves.
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
242 * sess is your session,
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
243 * conn is the BOS conn,
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
244 * priv is a dummy priv value (we'll let it get filled in later) (if
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
245 * you pass a NULL, we alloc one)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
246 * destsn is the SN to connect to.
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
247 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
248
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
249
840
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
250 faim_export struct aim_conn_t *aim_directim_initiate(struct aim_session_t *sess,
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
251 struct aim_conn_t *conn,
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
252 struct aim_directim_priv *priv,
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
253 char *destsn)
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
254 {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
255 struct command_tx_struct *newpacket;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
256 struct aim_conn_t *newconn;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
257
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
258 struct aim_msgcookie_t *cookie;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
259
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
260 int curbyte, i, listenfd;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
261 short port = 4443;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
262
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
263 struct hostent *hptr;
889
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
264 char localhost[129];
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
265
840
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
266 unsigned char cap[16];
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
267 char d[4]; /* XXX: IPv6. *cough* */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
268
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
269 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
270 * Open our socket
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
271 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
272
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
273 if( (listenfd = aim_listenestablish(port)) == -1)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
274 return NULL;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
275
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
276 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
277 * get our local IP
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
278 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
279
889
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
280 if(gethostname(localhost, 128) < 0)
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
281 return NULL;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
282
889
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
283 if( (hptr = gethostbyname(localhost)) == NULL)
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
284 return NULL;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
285
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
286 memcpy(&d, hptr->h_addr_list[0], 4); /* XXX: this probably isn't quite kosher, but it works */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
287
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
288 aim_putcap(cap, 16, AIM_CAPS_IMIMAGE);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
289
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
290 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
291 * create the OSCAR packet
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
292 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
293
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
294 if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 10+8+2+1+strlen(destsn)+4+4+0x32)))
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
295 return NULL;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
296
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
297 newpacket->lock = 1; /* lock struct */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
298
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
299 curbyte = 0;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
300 curbyte += aim_putsnac(newpacket->data+curbyte,
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
301 0x0004, 0x0006, 0x0000, sess->snac_nextid);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
302
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
303 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
304 * Generate a random message cookie
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
305 * This cookie needs to be alphanumeric and NULL-terminated to be TOC-compatible.
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
306 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
307 for (i=0;i<7;i++)
889
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
308 curbyte += aimutil_put8(newpacket->data+curbyte, 0x30 + ((u_char) rand() % 20));
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
309 curbyte += aimutil_put8(newpacket->data+curbyte, 0x00);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
310
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
311 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
312 * grab all the data for cookie caching.
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
313 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
314 cookie = (struct aim_msgcookie_t *)calloc(1, sizeof(struct aim_msgcookie_t));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
315
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
316 memcpy(cookie->cookie, newpacket->data+curbyte-8, 8);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
317 cookie->type = AIM_COOKIETYPE_OFTIM;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
318
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
319 if(!priv)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
320 priv = (struct aim_directim_priv *)calloc(1, sizeof(struct aim_directim_priv));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
321
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
322 memcpy(priv->cookie, cookie, 8);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
323 memcpy(priv->sn, destsn, sizeof(priv->sn));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
324
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
325 cookie->data = priv;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
326
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
327 aim_cachecookie(sess, cookie); /* cache da cookie */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
328
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
329 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
330 * Channel ID
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
331 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
332 curbyte += aimutil_put16(newpacket->data+curbyte,0x0002);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
333
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
334 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
335 * Destination SN (prepended with byte length)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
336 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
337 curbyte += aimutil_put8(newpacket->data+curbyte,strlen(destsn));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
338 curbyte += aimutil_putstr(newpacket->data+curbyte, destsn, strlen(destsn));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
339
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
340 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0003);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
341 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
342
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
343 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
344 * enTLV start
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
345 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
346 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0005);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
347 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0032);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
348
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
349 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
350 * Flag data / ICBM Parameters?
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
351 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
352 curbyte += aimutil_put8(newpacket->data+curbyte, 0x00);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
353 curbyte += aimutil_put8(newpacket->data+curbyte, 0x00);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
354
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
355 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
356 * Cookie
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
357 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
358 curbyte += aimutil_putstr(newpacket->data+curbyte, (char *)cookie, 8);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
359
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
360 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
361 * Capability String
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
362 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
363 curbyte += aimutil_putstr(newpacket->data+curbyte, (char *)cap, 0x10);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
364
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
365 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
366 * 000a/0002 : 0001
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
367 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
368 curbyte += aimutil_put16(newpacket->data+curbyte, 0x000a);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
369 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0002);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
370 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0001);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
371
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
372 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
373 * 0003/0004: IP address
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
374 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
375
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
376 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0003);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
377 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0004);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
378
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
379 for(i = 0; i < 4; i++)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
380 curbyte += aimutil_put8(newpacket->data+curbyte, d[i]); /* already in network byte order */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
381
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
382 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
383 * 0005/0002: Port
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
384 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
385
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
386 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0005);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
387 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0002);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
388 curbyte += aimutil_put16(newpacket->data+curbyte, port);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
389
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
390 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
391 * 000f/0000: umm.. dunno. Zigamorph[1]?
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
392 * [1]: see esr's TNHD.
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
393 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
394
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
395 curbyte += aimutil_put16(newpacket->data+curbyte, 0x000f);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
396 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0000);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
397
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
398 printf("curbyte: 0x%x\n",curbyte);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
399
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
400 newpacket->commandlen = curbyte;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
401 newpacket->lock = 0;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
402
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
403 aim_tx_enqueue(sess, newpacket);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
404
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
405 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
406 * allocate and set up our connection
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
407 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
408
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
409 newconn = aim_newconn(sess, AIM_CONN_TYPE_RENDEZVOUS_OUT, NULL);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
410 if (!newconn) {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
411 perror("aim_newconn");
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
412 aim_conn_kill(sess, &newconn);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
413 return NULL;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
414 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
415
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
416 newconn->fd = listenfd;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
417 newconn->subtype = AIM_CONN_SUBTYPE_OFT_DIRECTIM;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
418 newconn->priv = priv;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
419 printf("faim: listening (fd = %d, unconnected)\n", newconn->fd);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
420
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
421 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
422 * XXX We need some way of closing the listener socket after
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
423 * n seconds of no connection. -- mid
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
424 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
425
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
426 #ifdef USE_SNAC_FOR_IMS
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
427 {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
428 struct aim_snac_t snac;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
429
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
430 snac.id = sess->snac_nextid;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
431 snac.family = 0x0004;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
432 snac.type = 0x0006;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
433 snac.flags = 0x0000;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
434
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
435 snac.data = malloc(strlen(destsn)+1);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
436 memcpy(snac.data, destsn, strlen(destsn)+1);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
437
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
438 aim_newsnac(sess, &snac);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
439
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
440 aim_cleansnacs(sess, 60); /* clean out all SNACs over 60sec old */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
441 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
442 #endif
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
443
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
444 return (newconn);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
445 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
446
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
447 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
448 * struct aim_conn_t *aim_directim_connect(struct aim_session_t *sess, struct aim_conn_t *conn, struct aim_directim_priv *priv)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
449 * sess is the session to append the conn to,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
450 * conn is the BOS connection,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
451 * priv is the filled-in priv data structure for the connection
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
452 * returns conn if connected, NULL on error
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
453 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
454
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
455
840
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
456 faim_export struct aim_conn_t *aim_directim_connect(struct aim_session_t *sess,
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
457 struct aim_conn_t *conn,
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
458 struct aim_directim_priv *priv )
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
459 {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
460 struct aim_conn_t *newconn = NULL;;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
461
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
462 newconn = aim_newconn(sess, AIM_CONN_TYPE_RENDEZVOUS, priv->ip);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
463 if (!newconn || (newconn->fd == -1)) {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
464 printf("could not connect to %s\n", priv->ip);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
465 perror("aim_newconn");
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
466 aim_conn_kill(sess, &newconn);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
467 return NULL;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
468 } else {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
469 newconn->subtype = AIM_CONN_SUBTYPE_OFT_DIRECTIM;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
470 newconn->priv = priv;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
471 printf("faim: connected to peer (fd = %d)\n", newconn->fd);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
472 return newconn;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
473 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
474 return newconn;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
475 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
476
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
477 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
478 * struct aim_conn_t *aim_directim_getconn(struct aim_session_t *sess, const char *name)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
479 * sess is your session,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
480 * name is the name to get,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
481 * returns conn for directim with name, NULL if none found.
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
482 */
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
483
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
484 faim_export struct aim_conn_t *aim_directim_getconn(struct aim_session_t *sess, const char *name)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
485 {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
486 struct aim_conn_t *cur;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
487 struct aim_directim_priv *priv;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
488
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
489 faim_mutex_lock(&sess->connlistlock);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
490 for (cur = sess->connlist; cur; cur = cur->next) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
491 if (cur->type != AIM_CONN_TYPE_RENDEZVOUS || cur->subtype != AIM_CONN_SUBTYPE_OFT_DIRECTIM)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
492 continue;
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
493
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
494 priv = cur->priv;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
495 if (aim_sncmp(priv->sn, name) == 0)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
496 break;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
497 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
498 faim_mutex_unlock(&sess->connlistlock);
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
499
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
500 return cur;
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
501 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
502
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
503 /*
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
504 * aim_accepttransfer:
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
505 * accept a file transfer request.
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
506 * sess is the session,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
507 * conn is the BOS conn for the CAP reply
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
508 * sn is the screenname to send it to,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
509 * cookie is the cookie used
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
510 * ip is the ip to connect to
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
511 * file is the listing file to use
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
512 * rendid is CAP type
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
513 *
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
514 * returns connection
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
515 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
516
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
517 faim_export struct aim_conn_t *aim_accepttransfer(struct aim_session_t *sess,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
518 struct aim_conn_t *conn,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
519 char *sn,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
520 char *cookie,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
521 char *ip,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
522 FILE *file,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
523 unsigned short rendid)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
524 {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
525 struct command_tx_struct *newpacket, *newoft;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
526
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
527 struct aim_conn_t *newconn;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
528 struct aim_fileheader_t *listingfh;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
529 struct aim_filetransfer_priv *priv;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
530 struct aim_msgcookie_t *cachedcook;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
531
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
532 int curbyte, i;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
533
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
534 if(rendid == AIM_CAPS_GETFILE) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
535
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
536 newconn = aim_newconn(sess, AIM_CONN_TYPE_RENDEZVOUS, ip);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
537
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
538 newconn->subtype = AIM_CONN_SUBTYPE_OFT_GETFILE;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
539
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
540 if (!newconn || (newconn->fd == -1)) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
541 perror("aim_newconn");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
542 faimdprintf(2, "could not connect to %s (fd: %i)\n", ip, newconn?newconn->fd:0);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
543 aim_conn_kill(sess, &newconn);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
544 return NULL;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
545 } else {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
546 priv = (struct aim_filetransfer_priv *)calloc(1, sizeof(struct aim_filetransfer_priv));
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
547 memcpy(priv->cookie, cookie, 8);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
548 strncpy(priv->sn, sn, MAXSNLEN);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
549 strncpy(priv->ip, ip, sizeof(priv->ip));
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
550 newconn->priv = (void *)priv;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
551 faimdprintf(2, "faim: connected to peer (fd = %d)\n", newconn->fd);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
552 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
553
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
554 /* cache da cookie. COOOOOKIES! */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
555
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
556 if(!(cachedcook = (struct aim_msgcookie_t *)calloc(1, sizeof(struct aim_msgcookie_t)))) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
557 faimdprintf(1, "faim: accepttransfer: couldn't calloc cachedcook. yeep!\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
558 /* XXX die here, or go on? search for cachedcook for future references */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
559 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
560
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
561 if(cachedcook)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
562 memcpy(cachedcook->cookie, cookie, 8);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
563
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
564 /* strncpy(ft->fh.name, miscinfo->value+8, sizeof(ft->fh.name)); */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
565
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
566 if(cachedcook) { /* see above calloc of cachedcook */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
567 cachedcook->type = AIM_COOKIETYPE_OFTGET;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
568 cachedcook->data = (void *)priv;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
569
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
570 if (aim_cachecookie(sess, cachedcook) != 0)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
571 faimdprintf(1, "faim: ERROR caching message cookie\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
572 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
573
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
574 if(rendid == AIM_CAPS_GETFILE) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
575 faimdprintf(2, "faim: getfile request accept\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
576 if(!(newoft = aim_tx_new(AIM_FRAMETYPE_OFT, 0x1108, newconn, 0))) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
577 faimdprintf(2, "faim: aim_accepttransfer: tx_new OFT failed\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
578 /* XXX: what else do we need to clean up here? */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
579 return NULL;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
580 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
581
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
582 newoft->lock = 1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
583
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
584 memcpy(newoft->hdr.oft.magic, "OFT2", 4);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
585 newoft->hdr.oft.hdr2len = 0xf8; /* 0x100 - 8 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
586
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
587 if(!(listingfh = aim_getlisting(file))) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
588 return NULL;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
589 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
590
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
591 if (!(newoft->hdr.oft.hdr2 = (char *)calloc(1,newoft->hdr.oft.hdr2len))) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
592 free(newoft);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
593 return NULL;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
594 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
595
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
596 memcpy(listingfh->bcookie, cookie, 8);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
597
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
598 aim_oft_buildheader((void *)newoft->hdr.oft.hdr2, listingfh);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
599
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
600 free(listingfh);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
601
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
602 newoft->lock = 0;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
603 aim_tx_enqueue(sess, newoft);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
604 printf("faim: getfile: OFT listing enqueued.\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
605
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
606 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
607
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
608 /* OSCAR CAP accept packet */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
609
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
610 if(!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 10+8+2+1+strlen(sn)+4+2+8+16)))
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
611 return NULL;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
612
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
613 newpacket->lock = 1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
614
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
615 curbyte = aim_putsnac(newpacket->data, 0x0004, 0x0006, 0x0000, sess->snac_nextid);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
616 for (i = 0; i < 8; i++)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
617 curbyte += aimutil_put8(newpacket->data+curbyte, cookie[i]);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
618 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0002);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
619 curbyte += aimutil_put8(newpacket->data+curbyte, strlen(sn));
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
620 curbyte += aimutil_putstr(newpacket->data+curbyte, sn, strlen(sn));
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
621 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0005);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
622 curbyte += aimutil_put16(newpacket->data+curbyte, 0x001a);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
623 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0002 /* accept */);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
624 for (i = 0; i < 8; i++)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
625 curbyte += aimutil_put8(newpacket->data+curbyte, cookie[i]);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
626 curbyte += aim_putcap(newpacket->data+curbyte, 0x10, rendid);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
627
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
628 newpacket->lock = 0;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
629 aim_tx_enqueue(sess, newpacket);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
630
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
631 return newconn;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
632 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
633 return NULL;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
634 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
635
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
636 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
637 * aim_getlisting(FILE *file)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
638 *
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
639 * file is an opened listing file
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
640 * returns a pointer to the filled-in fileheader_t
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
641 *
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
642 * currently omits checksum. we'll fix this when AOL breaks us, i
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
643 * guess.
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
644 *
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
645 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
646
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
647 faim_internal struct aim_fileheader_t *aim_getlisting(FILE *file)
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
648 {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
649 struct aim_fileheader_t *fh;
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
650 u_long totsize = 0, size = 0, checksum = 0xffff0000;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
651 short totfiles = 0;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
652 char *linebuf, sizebuf[9];
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
653
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
654 int linelength = 1024;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
655
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
656 /* XXX: if we have a line longer than 1024chars, God help us. */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
657 if( (linebuf = (char *)calloc(1, linelength)) == NULL ) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
658 faimdprintf(2, "linebuf calloc failed\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
659 return NULL;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
660 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
661
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
662 if(fseek(file, 0, SEEK_END) == -1) { /* use this for sanity check */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
663 perror("getlisting END1 fseek:");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
664 faimdprintf(2, "getlising fseek END1 error\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
665 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
666
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
667 if(fgetpos(file, &size) == -1) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
668 perror("getlisting END1 getpos:");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
669 faimdprintf(2, "getlising getpos END1 error\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
670 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
671
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
672 if(fseek(file, 0, SEEK_SET) != 0) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
673 perror("getlesting fseek(SET):");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
674 faimdprintf(2, "faim: getlisting: couldn't seek to beginning of listing file\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
675 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
676
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
677 bzero(linebuf, linelength);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
678
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
679 size = 0;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
680
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
681 while(fgets(linebuf, linelength, file)) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
682 totfiles++;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
683 bzero(sizebuf, 9);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
684
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
685 size += strlen(linebuf);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
686
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
687 if(strlen(linebuf) < 23) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
688 faimdprintf(2, "line \"%s\" too short. skipping\n", linebuf);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
689 continue;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
690 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
691 if(linebuf[strlen(linebuf)-1] != '\n') {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
692 faimdprintf(2, "faim: OFT: getlisting -- hit EOF or line too long!\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
693 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
694
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
695 memcpy(sizebuf, linebuf+17, 8);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
696
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
697 totsize += strtol(sizebuf, NULL, 10);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
698 bzero(linebuf, linelength);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
699 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
700
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
701 /* if(size != 0) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
702 faimdprintf(2, "faim: getlisting: size != 0 after while.. %i\n", size);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
703 }*/
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
704
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
705 if(fseek(file, 0, SEEK_SET) == -1) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
706 perror("getlisting END2 fseek:");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
707 faimdprintf(2, "getlising fseek END2 error\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
708 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
709
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
710 free(linebuf);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
711
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
712 /* we're going to ignore checksumming the data for now -- that
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
713 * requires walking the whole listing.txt. it should probably be
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
714 * done at register time and cached, but, eh. */
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
715
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
716 if(!(fh = (struct aim_fileheader_t*)calloc(1, sizeof(struct aim_fileheader_t))))
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
717 return NULL;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
718
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
719 printf( "faim: OFT: getlisting: totfiles: %u, totsize: %lu, size: %lu\n", totfiles, totsize, size);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
720
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
721 fh->encrypt = 0x0000;
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
722 fh->compress = 0x0000;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
723 fh->totfiles = totfiles;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
724 fh->filesleft = totfiles; /* is this right ?*/
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
725 fh->totparts = 0x0001;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
726 fh->partsleft = 0x0001;
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
727 fh->totsize = totsize;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
728 fh->size = size; /* ls -l listing.txt */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
729 fh->modtime = (int)time(NULL); /* we'll go with current time for now */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
730 fh->checksum = checksum; /* XXX: checksum ! */
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
731 fh->rfcsum = 0x00000000;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
732 fh->rfsize = 0x00000000;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
733 fh->cretime = 0x00000000;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
734 fh->rfcsum = 0x00000000;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
735 fh->nrecvd = 0x00000000;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
736 fh->recvcsum = 0x00000000;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
737
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
738 /* memset(fh->idstring, 0, sizeof(fh->idstring)); */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
739 memcpy(fh->idstring, "OFT_Windows ICBMFT V1.1 32", sizeof(fh->idstring));
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
740 memset(fh->idstring+strlen(fh->idstring), 0, sizeof(fh->idstring)-strlen(fh->idstring));
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
741
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
742 fh->flags = 0x02;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
743 fh->lnameoffset = 0x1a;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
744 fh->lsizeoffset = 0x10;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
745
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
746 /* memset(fh->dummy, 0, sizeof(fh->dummy)); */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
747 memset(fh->macfileinfo, 0, sizeof(fh->macfileinfo));
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
748
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
749 fh->nencode = 0x0000; /* we need to figure out these encodings for filenames */
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
750 fh->nlanguage = 0x0000;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
751
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
752 /* memset(fh->name, 0, sizeof(fh->name)); */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
753 memcpy(fh->name, "listing.txt", sizeof(fh->name));
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
754 memset(fh->name+strlen(fh->name), 0, 64-strlen(fh->name));
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
755
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
756 faimdprintf(2, "faim: OFT: listing fh name %s / %s\n", fh->name, (fh->name+(strlen(fh->name))));
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
757 return fh;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
758 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
759
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
760 /*
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
761 * establish: create a listening socket on a port. you need to call
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
762 * accept() when it's connected.
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
763 * portnum is the port number to bind to.
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
764 * returns your fd
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
765 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
766
840
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
767 faim_internal int aim_listenestablish(u_short portnum)
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
768 {
889
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
769 #if defined(__linux__) /* XXX what other OS's support getaddrinfo? */
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
770 int listenfd;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
771 const int on = 1;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
772 struct addrinfo hints, *res, *ressave;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
773 char serv[5];
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
774 sprintf(serv, "%d", portnum);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
775 memset(&hints, 0, sizeof(struct addrinfo));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
776 hints.ai_flags = AI_PASSIVE;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
777 hints.ai_family = AF_UNSPEC;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
778 hints.ai_socktype = SOCK_STREAM;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
779 if (getaddrinfo(NULL/*any IP*/, serv, &hints, &res) != 0) {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
780 perror("getaddrinfo");
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
781 return -1;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
782 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
783 ressave = res;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
784 do {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
785 listenfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
786 if (listenfd < 0)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
787 continue;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
788 setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
789 if (bind(listenfd, res->ai_addr, res->ai_addrlen) == 0)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
790 break; /* success */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
791 close(listenfd);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
792 } while ( (res = res->ai_next) );
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
793 if (!res)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
794 return -1;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
795 if (listen(listenfd, 1024)!=0) {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
796 perror("listen");
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
797 return -1;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
798 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
799 freeaddrinfo(ressave);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
800 return listenfd;
889
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
801 #else
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
802 int listenfd;
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
803 const int on = 1;
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
804 struct sockaddr_in sockin;
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
805
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
806 if ((listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
807 perror("socket(listenfd)");
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
808 return -1;
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
809 }
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
810 if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on) != 0)) {
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
811 perror("setsockopt(listenfd)");
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
812 close(listenfd);
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
813 return -1;
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
814 }
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
815 memset(&sockin, 0, sizeof(struct sockaddr_in));
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
816 sockin.sin_family = AF_INET;
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
817 sockin.sin_port = htons(portnum);
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
818 if (bind(listenfd, (struct sockaddr *)&sockin, sizeof(struct sockaddr_in)) != 0) {
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
819 perror("bind(listenfd)");
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
820 close(listenfd);
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
821 return -1;
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
822 }
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
823 if (listen(listenfd, 4) != 0) {
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
824 perror("listen(listenfd)");
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
825 close(listenfd);
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
826 return -1;
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
827 }
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
828
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
829 return listenfd;
640
dd167c2daf41 [gaim-migrate @ 650]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 503
diff changeset
830 #endif
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
831 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
832
840
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
833 faim_internal int aim_get_command_rendezvous(struct aim_session_t *sess, struct aim_conn_t *conn)
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
834 {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
835 unsigned char hdrbuf1[6];
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
836 unsigned char *hdr = NULL;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
837 int hdrlen, hdrtype;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
838 int flags = 0;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
839 rxcallback_t userfunc = NULL;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
840
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
841
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
842 memset(hdrbuf1, 0, sizeof(hdrbuf1));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
843
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
844 faim_mutex_lock(&conn->active); /* gets locked down for the entirety */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
845
889
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
846 if ( (hdrlen = aim_recv(conn->fd, hdrbuf1, 6)) < 6) {
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
847
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
848 faimdprintf(2, "faim: rend: read error (fd: %i) %02x%02x%02x%02x%02x%02x (%i)\n", conn->fd, hdrbuf1[0],hdrbuf1[1],hdrbuf1[0],hdrbuf1[0],hdrbuf1[0],hdrbuf1[0],hdrlen);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
849 faim_mutex_unlock(&conn->active);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
850
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
851 if(hdrlen < 0)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
852 perror("read");
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
853 else { /* disconnected */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
854 switch(conn->subtype) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
855 case AIM_CONN_SUBTYPE_OFT_DIRECTIM: { /* XXX: clean up cookies here ? */
1002
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
856 struct aim_directim_priv *priv = NULL;
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
857 if(!(priv = (struct aim_directim_priv *)conn->priv) )
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
858 return -1; /* not much we can do */
1002
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
859 aim_uncachecookie(sess, priv->cookie, AIM_COOKIETYPE_OFTIM);
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
860
1002
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
861
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
862 if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMDISCONNECT)) ) {
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
863 aim_conn_close(conn);
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
864 return userfunc(sess, NULL, conn, priv->sn);
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
865 }
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
866
1002
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
867 break;
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
868 }
1002
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
869
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
870 case AIM_CONN_SUBTYPE_OFT_GETFILE: {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
871 struct aim_filetransfer_priv *priv;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
872 if(!(priv = (struct aim_filetransfer_priv *)conn->priv))
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
873 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
874
1002
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
875 aim_uncachecookie(sess, priv->cookie, AIM_COOKIETYPE_OFTGET);
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
876
1002
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
877 if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_GETFILEDISCONNECT)) ) {
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
878 aim_conn_close(conn);
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
879 return userfunc(sess, NULL, conn, priv->sn);
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
880 }
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
881
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
882 break;
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
883 }
1002
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
884
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
885 case AIM_CONN_SUBTYPE_OFT_SENDFILE: {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
886 struct aim_filetransfer_priv *priv;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
887 if(!(priv = (struct aim_filetransfer_priv *)conn->priv))
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
888 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
889
1002
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
890 aim_uncachecookie(sess, priv->cookie, AIM_COOKIETYPE_OFTSEND);
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
891
1002
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
892 if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_SENDFILEDISCONNECT)) ) {
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
893 aim_conn_close(conn);
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
894 return userfunc(sess, NULL, conn, priv->sn);
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
895 }
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
896
1002
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
897 break;
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
898 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
899 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
900
1002
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
901 aim_conn_close(conn);
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
902 aim_conn_kill(sess, &conn);
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
903
0c559888b1fb [gaim-migrate @ 1012]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 960
diff changeset
904 return -1;
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
905 }
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
906 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
907
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
908 hdrlen = aimutil_get16(hdrbuf1+4);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
909
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
910 hdrlen -= 6;
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
911 if (!(hdr = malloc(hdrlen))) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
912 faim_mutex_unlock(&conn->active);
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
913 return -1;
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
914 }
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
915
889
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
916 if (aim_recv(conn->fd, hdr, hdrlen) < hdrlen) {
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
917 perror("read");
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
918 faimdprintf(2,"faim: rend: read2 error\n");
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
919 free(hdr);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
920 faim_mutex_unlock(&conn->active);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
921 aim_conn_close(conn);
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
922 return -1;
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
923 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
924
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
925 hdrtype = aimutil_get16(hdr);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
926
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
927 switch (hdrtype) {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
928 case 0x0001: { /* directim */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
929 int payloadlength = 0;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
930 char *snptr = NULL;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
931 struct aim_directim_priv *priv;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
932 int i;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
933
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
934 priv = (struct aim_directim_priv *)calloc(1, sizeof(struct aim_directim_priv));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
935
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
936 payloadlength = aimutil_get32(hdr+22);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
937 flags = aimutil_get16(hdr+32);
840
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
938 snptr = (char *)hdr+38;
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
939
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
940 strncpy(priv->sn, snptr, MAXSNLEN);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
941
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
942 faimdprintf(2, "faim: OFT frame: %04x / %04x / %04x / %s\n", hdrtype, payloadlength, flags, snptr);
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
943
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
944 if (flags == 0x000e) {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
945 faim_mutex_unlock(&conn->active);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
946 if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMTYPING)) )
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
947 return userfunc(sess, NULL, snptr);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
948 } else if ((flags == 0x0000) && payloadlength) {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
949 unsigned char *msg;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
950
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
951 if(! (msg = calloc(1, payloadlength+1)) ) {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
952 faim_mutex_unlock(&conn->active);
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
953 return -1;
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
954 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
955
889
070eb1c6db95 [gaim-migrate @ 899]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 840
diff changeset
956 if (aim_recv(conn->fd, msg, payloadlength) < payloadlength) {
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
957 perror("read");
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
958 printf("faim: rend: read3 error\n");
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
959 free(msg);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
960 faim_mutex_unlock(&conn->active);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
961 aim_conn_close(conn);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
962 return -1;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
963 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
964 faim_mutex_unlock(&conn->active);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
965 msg[payloadlength] = '\0';
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
966 faimdprintf(2, "faim: directim: %s/%04x/%04x/%s\n", snptr, payloadlength, flags, msg);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
967
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
968
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
969 if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_DIRECTIMINCOMING)) )
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
970 i = userfunc(sess, NULL, conn, snptr, msg);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
971
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
972 free(msg);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
973 return i;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
974 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
975 break;
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
976 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
977 #if 0
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
978 /* currently experimental to a non-compiling degree */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
979 case 0x1108: { /* getfile listing.txt incoming tx->rx */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
980 struct aim_filetransfer_priv *ft;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
981 struct aim_fileheader_t *fh;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
982 struct aim_msgcookie_t *cook;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
983 struct aim_conn_type *newoft;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
984
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
985 int commandlen;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
986 char *data;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
987
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
988 faimdprintf(2,"faim: rend: fileget 0x1108\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
989
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
990 if(!(ft = (struct aim_filetransfer_priv *)calloc(1, sizeof(struct aim_filetransfer_priv)))) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
991 faimdprintf(2, "faim: couldn't malloc ft. um. bad. bad bad. file transfer will likely fail, sorry.\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
992 faim_mutex_unlock(&conn->active);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
993 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
994 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
995
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
996 ft->state = 1; /* we're waaaaiiiting.. */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
997
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
998 fh = aim_oft_getfh(hdr);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
999
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1000 memcpy(&(ft->fh), fh, sizeof(struct aim_fileheader_t));
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1001
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1002 if(!(cook = aim_checkcookie(sess, ft->fh.bcookie, AIM_COOKIETYPE_OFTGET))) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1003 faim_mutex_unlock(&conn->active);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1004 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1005 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1006
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1007 if(cook->data)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1008 free(cook->data);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1009
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1010 cook->data = ft;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1011
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1012 aim_cachecookie(sess, cook);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1013
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1014 if(!(newoft = aim_tx_new(AIM_FRAMETYPE_OFT, 0x1209, conn, 0))) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1015 /* XXX: what else do we need to clean up here? */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1016 faim_mutex_unlock(&conn->active);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1017 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1018 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1019
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1020
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1021 aim_oft_buildheader((void *)newoft->hdr.oft.hdr2, ft->fh); /* no change */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1022 newoft->lock = 0;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1023 aim_tx_enqueue(sess, newoft);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1024 break;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1025 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1026 #endif
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1027 case 0x1209: { /* get file listing ack rx->tx */
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1028 struct aim_filetransfer_priv *ft;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1029 struct aim_fileheader_t *fh;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1030 struct aim_msgcookie_t *cook;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1031
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1032 int commandlen;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1033 char *data;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1034
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1035 faimdprintf(2,"faim: rend: fileget 0x1209\n");
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1036
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1037 if(!(ft = (struct aim_filetransfer_priv *)calloc(1, sizeof(struct aim_filetransfer_priv)))) {
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1038 faimdprintf(2, "faim: couldn't malloc ft. um. bad. bad bad. file transfer will likely fail, sorry.\n");
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1039 faim_mutex_unlock(&conn->active);
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1040 return -1;
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1041 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1042
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1043 fh = aim_oft_getfh(hdr);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1044
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1045 memcpy(&(ft->fh), fh, sizeof(struct aim_fileheader_t));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1046
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1047 cook = aim_checkcookie(sess, ft->fh.bcookie, AIM_COOKIETYPE_OFTGET);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1048
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1049 /* we currently trust the other client to be giving us Valid
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1050 * Enough input, else this gets to be a messy function (and we
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1051 * won't break like winaim does when it gets bad input =) */
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1052
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1053 if(cook->data)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1054 free(cook->data); /* XXX */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1055
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1056 cook->data = ft;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1057
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1058 aim_cachecookie(sess, cook);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1059
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1060 /* XXX: have this send chunks of the file instead of the whole
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1061 * file. requires rethinking some code. */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1062
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1063 if(fseek(sess->oft.listing, 0, SEEK_SET) != 0) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1064 perror("get_command_rendezvous 1209 fseek(SET):");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1065 faimdprintf(2, "faim: getlisting: couldn't seek to beginning of listing file\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1066 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1067 commandlen = ft->fh.size;
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1068
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1069 if((data = (char *)calloc(1, commandlen)) == NULL) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1070 faimdprintf(2, "faim: get_command_rendezvous 1209: couldn't malloc data.\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1071 faim_mutex_unlock(&conn->active);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1072 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1073
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1074 }
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1075
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1076 for(commandlen = 0; commandlen < ft->fh.size; commandlen++)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1077 if( (data[commandlen] = (unsigned char)fgetc(sess->oft.listing)) == EOF)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1078 faimdprintf(2, "faim: get_command_rendezvous 1209: got early EOF (error?)\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1079
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1080 commandlen = ft->fh.size;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1081
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1082 if (write(conn->fd, data, commandlen) != commandlen) {
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1083 perror("listing write error");
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1084 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1085 faim_mutex_unlock(&conn->active);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1086
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1087 faimdprintf(2, "faim: get_command_rendezvous: hit end of 1209\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1088
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1089 free(data);
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1090
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1091 break;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1092 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1093 case 0x120b: { /* get file second */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1094 struct aim_filetransfer_priv *ft;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1095 struct aim_msgcookie_t *cook;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1096
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1097 struct aim_fileheader_t *fh;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1098
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1099 faimdprintf(2, "faim: rend: fileget 120b\n");
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1100
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1101 if(!(ft = (struct aim_filetransfer_priv *)calloc(1, sizeof(struct aim_filetransfer_priv)))) {
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1102 faimdprintf(2, "faim: couldn't malloc ft. um. bad. bad bad. file transfer will likely fail, sorry.\n");
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1103 faim_mutex_unlock(&conn->active);
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1104 return -1;
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1105 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1106
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1107 fh = aim_oft_getfh(hdr);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1108
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1109 memcpy(&(ft->fh), fh, sizeof(struct aim_fileheader_t));
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1110
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1111 if(!(cook = aim_checkcookie(sess, ft->fh.bcookie, AIM_COOKIETYPE_OFTGET))) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1112 faim_mutex_unlock(&conn->active);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1113 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1114 }
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1115
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1116 if(cook->data)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1117 free(cook->data); /* XXX: integrate cookie caching */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1118
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1119 cook->data = ft;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1120
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1121 aim_cachecookie(sess, cook);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1122
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1123 faim_mutex_unlock(&conn->active);
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1124
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1125 /* call listing.txt rx confirm */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1126
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1127 break;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1128 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1129 case 0x120c: { /* yet more get file */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1130 struct aim_filetransfer_priv *ft;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1131 struct aim_msgcookie_t *cook;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1132 struct aim_fileheader_t *listingfh;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1133 struct command_tx_struct *newoft;
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1134
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1135 int i;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1136
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1137 rxcallback_t userfunc;
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1138
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1139 printf("faim: rend: fileget 120c\n");
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1140
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1141 if(!(ft = (struct aim_filetransfer_priv *)calloc(1, sizeof(struct aim_filetransfer_priv)))) {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1142 printf("faim: couldn't malloc ft. um. bad. bad bad. file transfer will likely fail, sorry.\n");
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1143 faim_mutex_unlock(&conn->active);
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1144 return -1;
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1145 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1146
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1147 if(hdrlen != 0x100)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1148 printf("faim: fileget_command(120c): um. hdrlen != 0x100..\n");
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1149
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1150 listingfh = aim_oft_getfh((char *)hdr);
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1151
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1152 memcpy(&(ft->fh), listingfh, sizeof(struct aim_fileheader_t));
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1153
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1154 if(!(cook = aim_checkcookie(sess, ft->fh.bcookie, AIM_COOKIETYPE_OFTGET))) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1155 faim_mutex_unlock(&conn->active);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1156 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1157 }
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1158
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1159 if(cook->data)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1160 free(cook->data); /* XXX */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1161
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1162 cook->data = ft;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1163
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1164 aim_cachecookie(sess, cook);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1165
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1166 faim_mutex_unlock(&conn->active);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1167
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1168 faimdprintf(2, "faim: fileget: %s seems to want %s\n", ft->sn, ft->fh.name);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1169
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1170 if( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_GETFILEFILEREQ)) )
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1171 i = userfunc(sess, NULL, conn, &ft->fh, cook->cookie);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1172
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1173 if(i < 0)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1174 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1175
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1176 if(!(newoft = aim_tx_new(AIM_FRAMETYPE_OFT, 0x0101, conn, 0))) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1177 faimdprintf(2, "faim: send_final_transfer: tx_new OFT failed\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1178 return -1;
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1179 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1180
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1181 newoft->lock = 1;
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1182
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1183 memcpy(newoft->hdr.oft.magic, "OFT2", 4);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1184 newoft->hdr.oft.hdr2len = 0xf8; /* 0x100 - 8 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1185
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1186 if (!(newoft->hdr.oft.hdr2 = calloc(1,newoft->hdr.oft.hdr2len))) {
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1187 newoft->lock = 0;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1188 aim_tx_destroy(newoft);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1189 return -1;
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1190 }
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1191
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1192 /* memcpy(listingfh->bcookie, ft->fh.bcookie, 8); */
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1193
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1194 listingfh->nrecvd = 0; /* these need reset for protocol-correctness */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1195 listingfh->recvcsum = 0;
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1196
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1197 aim_oft_buildheader((void *)newoft->hdr.oft.hdr2, listingfh);
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1198
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1199 newoft->lock = 0;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1200 aim_tx_enqueue(sess, newoft);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1201 faimdprintf(2, "faim: OFT: OFT file enqueued.\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1202
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1203 if( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_GETFILEFILEREQ)) == NULL)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1204 return 1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1205
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1206 i = userfunc(sess, NULL, conn, listingfh, listingfh->bcookie);
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1207
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1208 free(listingfh);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1209
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1210 return i;
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1211
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1212 break;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1213 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1214 case 0x0202: { /* get file: ready to recieve data */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1215 struct aim_fileheader_t *fh;
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1216 fh = aim_oft_getfh((char *)hdr);
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1217
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1218 faimdprintf(2, "faim: get_rend: looks like we're ready to send data.(oft 0x0202)\n");
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1219
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1220 faim_mutex_unlock(&conn->active);
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1221
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1222 if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_GETFILEFILESEND)) == NULL)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1223 return 1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1224
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1225 return userfunc(sess, NULL, conn, fh);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1226
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1227 free(fh);
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1228
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1229 break;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1230 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1231 case 0x0204: { /* get file: finished. close it up */
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1232 int i;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1233
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1234 struct aim_fileheader_t *fh;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1235 fh = aim_oft_getfh((char *)hdr);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1236
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1237 faimdprintf(2, "faim: get_rend: looks like we're done with a transfer (oft 0x0204)\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1238
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1239 faim_mutex_unlock(&conn->active);
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1240
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1241 if ( (userfunc = aim_callhandler(conn, AIM_CB_FAM_OFT, AIM_CB_OFT_GETFILECOMPLETE)) )
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1242 i = userfunc(sess, NULL, conn, fh);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1243 else
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1244 i = 1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1245
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1246 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1247 free(fh); */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1248 /* not sure where to do this yet, as we need to keep it to allow multiple file sends... bleh */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1249
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1250 return i;
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1251 break;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1252 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1253 default: {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1254 printf("OFT frame: type %04x\n", hdrtype);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1255 /* data connection may be unreliable here */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1256 faim_mutex_unlock(&conn->active);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1257 break;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1258 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1259 } /* switch */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1260
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1261 free(hdr);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1262
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1263 return 0;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1264 }
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1265
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1266 /*
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1267 * aim_oft_registerlisting()
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1268 * sess: aim session
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1269 * file: opened FILE *
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1270 * listingdir: the path to listing.txt
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1271 * returns -1 on error, 0 on success.
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1272 *
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1273 * it's not my problem if the listing fd is already set.
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1274 */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1275
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1276 faim_export int aim_oft_registerlisting(struct aim_session_t *sess, FILE *file, char* listingdir)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1277 {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1278 if(!sess)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1279 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1280
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1281 /* XXX: checksum each file in the listing */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1282
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1283 #if 0
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1284 if(sess->oft.listing) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1285 faimdprintf(1, "We already have a file pointer. Closing and overwriting.\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1286 fclose(sess->oft.listing);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1287 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1288 #endif
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1289 sess->oft.listing = file;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1290 #if 0
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1291 if(sess->oft.listingdir) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1292 faimdprintf(1, "We already have a directory string. Freeing and overwriting\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1293 free(sess->oft.listingdir);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1294 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1295 #endif
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1296
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1297 if( (sess->oft.listingdir = (char *)calloc(1, strlen(listingdir)+1)) )
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1298 memcpy(sess->oft.listingdir, listingdir, strlen(listingdir));
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1299 else
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1300 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1301 return 0;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1302 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1303
840
b80a628d935f [gaim-migrate @ 850]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 642
diff changeset
1304 faim_internal struct aim_fileheader_t *aim_oft_getfh(unsigned char *hdr)
503
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1305 {
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1306 struct aim_fileheader_t *fh;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1307 int i, j;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1308
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1309 if(!(fh = calloc(1, sizeof(struct aim_fileheader_t))))
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1310 return NULL;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1311
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1312 /* [0] and [1] are the type. we can ignore those here. */
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1313
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1314 i = 2;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1315
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1316 for(j = 0; j < 8; j++, i++)
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1317 fh->bcookie[j] = hdr[i];
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1318 fh->encrypt = aimutil_get16(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1319 i += 2;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1320 fh->compress = aimutil_get16(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1321 i += 2;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1322 fh->totfiles = aimutil_get16(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1323 i += 2;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1324 fh->filesleft = aimutil_get16(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1325 i += 2;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1326 fh->totparts = aimutil_get16(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1327 i += 2;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1328 fh->partsleft = aimutil_get16(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1329 i += 2;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1330 fh->totsize = aimutil_get32(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1331 i += 4;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1332 fh->size = aimutil_get32(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1333 i += 4;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1334 fh->modtime = aimutil_get32(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1335 i += 4;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1336 fh->checksum = aimutil_get32(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1337 i += 4;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1338 fh->rfrcsum = aimutil_get32(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1339 i += 4;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1340 fh->rfsize = aimutil_get32(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1341 i += 4;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1342 fh->cretime = aimutil_get32(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1343 i += 4;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1344 fh->rfcsum = aimutil_get32(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1345 i += 4;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1346 fh->nrecvd = aimutil_get32(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1347 i += 4;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1348 fh->recvcsum = aimutil_get32(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1349 i += 4;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1350
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1351 memcpy(fh->idstring, hdr+i, 32);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1352 i += 32;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1353
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1354 fh->flags = aimutil_get8(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1355 i += 1;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1356 fh->lnameoffset = aimutil_get8(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1357 i += 1;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1358 fh->lsizeoffset = aimutil_get8(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1359 i += 1;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1360
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1361 memcpy(fh->dummy, hdr+i, 69);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1362 i += 69;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1363
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1364 memcpy(fh->macfileinfo, hdr+i, 16);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1365 i += 16;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1366
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1367 fh->nencode = aimutil_get16(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1368 i += 2;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1369 fh->nlanguage = aimutil_get16(hdr+i);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1370 i += 2;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1371
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1372 memcpy(fh->name, hdr+i, 64);
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1373 i += 64;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1374
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1375 return fh;
308fa214f11a [gaim-migrate @ 513]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1376 }
960
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1377
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1378 faim_export int aim_oft_checksum(char *buffer, int bufsize, int *checksum)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1379 {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1380 short check0, check1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1381 int i;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1382
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1383 check0 = ((*checksum & 0xFF000000) >> 16);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1384 check1 = ((*checksum & 0x00ff0000) >> 16);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1385
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1386 for(i = 0; i < bufsize; i++) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1387
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1388 if(i % 2) { /* use check1 -- second byte */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1389 if ( (short)buffer[i] > check1 ) { /* wrapping */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1390
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1391 check1 += 0x100; /* this is a cheap way to wrap */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1392
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1393 /* if we're wrapping, decrement the other one */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1394 if(check0 == 0) /* XXX: check this corner case */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1395 check0 = 0x00ff;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1396 else
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1397 check0--;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1398 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1399
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1400 check1 -= buffer[i];
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1401 } else { /* use check0 -- first byte */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1402 if ( (short)buffer[i] > check0 ) { /* wrapping */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1403
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1404 check0 += 0x100; /* this is a cheap way to wrap */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1405
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1406 /* if we're wrapping, decrement the other one */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1407 if(check1 == 0) /* XXX: check this corner case */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1408 check1 = 0x00ff;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1409 else
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1410 check1--;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1411 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1412
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1413 check0 -= buffer[i];
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1414 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1415 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1416
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1417 if(check0 > 0xff || check1 > 0xff) { /* they shouldn't be able to do this. error! */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1418 faimdprintf(2, "check0 or check1 is too high: 0x%04x, 0x%04x\n", check0, check1);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1419 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1420 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1421
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1422 check0 &= 0xff; /* grab just the lowest byte */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1423 check1 &= 0xff; /* this should be clean, but just in case */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1424
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1425 *checksum = ((check0 * 0x1000000) + (check1 * 0x10000));
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1426
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1427 return *checksum;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1428 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1429
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1430
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1431 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1432 * aim_oft_buildheader:
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1433 * fills a buffer with network-order fh data.
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1434 * returns length written; -1 on error.
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1435 * dest: buffer to fill -- pre-alloced
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1436 * listingfh: fh to get data from
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1437 *
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1438 * DOES NOT DO BOUNDS CHECKING!
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1439 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1440
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1441
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1442 faim_internal int aim_oft_buildheader(char *dest,struct aim_fileheader_t *listingfh)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1443 {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1444 int i, curbyte;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1445
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1446 if(!dest || !listingfh)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1447 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1448
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1449 curbyte = 0;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1450 for(i = 0; i < 8; i++)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1451 curbyte += aimutil_put8(dest+curbyte, listingfh->bcookie[i]);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1452 curbyte += aimutil_put16(dest+curbyte, listingfh->encrypt);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1453 curbyte += aimutil_put16(dest+curbyte, listingfh->compress);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1454 curbyte += aimutil_put16(dest+curbyte, listingfh->totfiles);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1455 curbyte += aimutil_put16(dest+curbyte, listingfh->filesleft);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1456 curbyte += aimutil_put16(dest+curbyte, listingfh->totparts);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1457 curbyte += aimutil_put16(dest+curbyte, listingfh->partsleft);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1458 curbyte += aimutil_put32(dest+curbyte, listingfh->totsize);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1459 curbyte += aimutil_put32(dest+curbyte, listingfh->size);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1460 curbyte += aimutil_put32(dest+curbyte, listingfh->modtime);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1461 curbyte += aimutil_put32(dest+curbyte, listingfh->checksum);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1462 curbyte += aimutil_put32(dest+curbyte, listingfh->rfrcsum);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1463 curbyte += aimutil_put32(dest+curbyte, listingfh->rfsize);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1464 curbyte += aimutil_put32(dest+curbyte, listingfh->cretime);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1465 curbyte += aimutil_put32(dest+curbyte, listingfh->rfcsum);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1466 curbyte += aimutil_put32(dest+curbyte, listingfh->nrecvd);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1467 curbyte += aimutil_put32(dest+curbyte, listingfh->recvcsum);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1468
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1469 memcpy(dest+curbyte, listingfh->idstring, 32);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1470 curbyte += 32;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1471
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1472 curbyte += aimutil_put8(dest+curbyte, listingfh->flags);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1473 curbyte += aimutil_put8(dest+curbyte, listingfh->lnameoffset);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1474 curbyte += aimutil_put8(dest+curbyte, listingfh->lsizeoffset);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1475
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1476 memcpy(dest+curbyte, listingfh->dummy, 69);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1477 curbyte += 69;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1478
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1479 memcpy(dest+curbyte, listingfh->macfileinfo, 16);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1480 curbyte += 16;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1481
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1482 curbyte += aimutil_put16(dest+curbyte, listingfh->nencode);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1483 curbyte += aimutil_put16(dest+curbyte, listingfh->nlanguage);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1484
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1485 memcpy(dest+curbyte, listingfh->name, 64); /* XXX: Filenames longer than 64B */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1486 curbyte += 64;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1487
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1488 return curbyte;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1489 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1490
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1491 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1492 * int aim_getfile_send(struct aim_conn_t *conn, FILE *tosend, struct aim_fileheader_t *fh)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1493 * conn is the OFT connection to shove the data down,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1494 * tosend is the FILE * for the file to send
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1495 * fh is the filled-in fh value
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1496 * returns -1 on error, 1 on success.
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1497 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1498
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1499 faim_export int aim_getfile_send(struct aim_conn_t *conn, FILE *tosend, struct aim_fileheader_t *fh)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1500 {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1501 int pos, bufpos, i;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1502 const int bufsize = 4096;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1503 char *buf;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1504
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1505 /* sanity checks */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1506 if(conn->type != AIM_CONN_TYPE_RENDEZVOUS || conn->subtype != AIM_CONN_SUBTYPE_OFT_GETFILE) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1507 faimdprintf(1, "getfile_send: conn->type(0x%04x) != RENDEZVOUS or conn->subtype(0x%04x) != GETFILE\n", conn->type, conn->subtype);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1508 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1509 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1510
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1511 if(!tosend) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1512 faimdprintf(1, "getfile_send: file pointer isn't valid\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1513 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1514 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1515
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1516 if(!fh) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1517 faimdprintf(1, "getfile_send: fh isn't valid\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1518 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1519 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1520
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1521 /* real code */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1522
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1523 if(!(buf = (char *)calloc(1, bufsize))) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1524 perror("faim: getfile_send: calloc:");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1525 faimdprintf(2, "getfile_send calloc error\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1526 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1527 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1528
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1529 pos = 0;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1530
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1531 if( fseek(tosend, 0, SEEK_SET) == -1) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1532 perror("faim: getfile_send: fseek:");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1533 faimdprintf(2, "getfile_send fseek error\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1534 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1535
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1536 faimdprintf(2, "faim: getfile_send: using %i byte blocks\n", bufsize);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1537
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1538 for(pos = 0; pos < fh->size; pos++) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1539 bufpos = pos % bufsize;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1540
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1541 if(bufpos == 0 && pos > 0) { /* filled our buffer. spit it across the wire */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1542 if ( (i = write(conn->fd, buf, bufsize)) != bufsize ) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1543 perror("faim: getfile_send: write1: ");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1544 faimdprintf(1, "faim: getfile_send: whoopsy, didn't write it all...\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1545 free(buf);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1546 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1547 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1548 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1549 if( (buf[bufpos] = fgetc(tosend)) == EOF) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1550 if(pos != fh->size) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1551 printf("faim: getfile_send: hrm... apparent early EOF at pos 0x%x of 0x%lx\n", pos, fh->size);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1552 faimdprintf(1, "faim: getfile_send: hrm... apparent early EOF at pos 0x%lx of 0x%lx\n", pos, fh->size);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1553 free(buf);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1554 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1555 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1556 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1557
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1558
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1559 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1560
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1561 if( (i = write(conn->fd, buf, bufpos+1)) != (bufpos+1)) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1562 perror("faim: getfile_send: write2: ");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1563 faimdprintf(1, "faim: getfile_send cleanup: whoopsy, didn't write it all...\n");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1564 free(buf);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1565 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1566 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1567
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1568 free(buf);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1569
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1570 fclose(tosend);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1571 return 1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1572 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1573
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1574 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1575 * aim_tx_destroy:
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1576 * free's tx_command_t's. if command is locked, doesn't free.
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1577 * returns -1 on error (locked struct); 0 on success.
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1578 * command is the command to free
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1579 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1580
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1581 faim_internal int aim_tx_destroy(struct command_tx_struct *command)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1582 {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1583 if(command->lock)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1584 return -1;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1585 if(command->data)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1586 free(command->data);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1587 free(command);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1588
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1589 return 0;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1590 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1591
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1592 #if 0
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1593 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1594 * aim_getfile_intitiate:
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1595 * For those times when we want to open up the directim channel ourselves.
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1596 * sess is your session,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1597 * conn is the BOS conn,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1598 * priv is a dummy priv value (we'll let it get filled in later) (if
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1599 * you pass a NULL, we alloc one)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1600 * destsn is the SN to connect to.
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1601 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1602
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1603
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1604 faim_export struct aim_conn_t *aim_getfile_initiate(struct aim_session_t *sess,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1605 struct aim_conn_t *conn,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1606 struct aim_getfile_priv *priv,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1607 char *destsn)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1608 {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1609 struct command_tx_struct *newpacket;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1610 struct aim_conn_t *newconn;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1611
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1612 struct aim_msgcookie_t *cookie;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1613
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1614 int curbyte, i, listenfd;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1615 short port = 4443;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1616
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1617 struct hostent *hptr;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1618 struct utsname myname;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1619
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1620 char cap[16];
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1621 char d[4]; /* XXX: IPv6. *cough* */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1622
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1623 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1624 * Open our socket
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1625 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1626
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1627 if( (listenfd = aim_listenestablish(port)) == -1)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1628 return NULL;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1629
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1630 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1631 * get our local IP
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1632 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1633
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1634 if(uname(&myname) < 0)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1635 return NULL;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1636
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1637 if( (hptr = gethostbyname(myname.nodename)) == NULL)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1638 return NULL;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1639
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1640 memcpy(&d, hptr->h_addr_list[0], 4); /* XXX: this probably isn't quite kosher, but it works */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1641
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1642 aim_putcap(cap, 16, AIM_CAPS_IMIMAGE);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1643
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1644 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1645 * create the OSCAR packet
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1646 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1647
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1648 if (!(newpacket = aim_tx_new(AIM_FRAMETYPE_OSCAR, 0x0002, conn, 10+8+2+1+strlen(destsn)+4+4+0x32)))
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1649 return NULL;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1650
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1651 newpacket->lock = 1; /* lock struct */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1652
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1653 curbyte = 0;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1654 curbyte += aim_putsnac(newpacket->data+curbyte,
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1655 0x0004, 0x0006, 0x0000, sess->snac_nextid);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1656
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1657 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1658 * Generate a random message cookie
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1659 * This cookie needs to be alphanumeric and NULL-terminated to be TOC-compatible.
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1660 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1661 for (i=0;i<7;i++)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1662 curbyte += aimutil_put8(newpacket->data+curbyte, 0x30 + ((u_char) random() % 20));
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1663 curbyte += aimutil_put8(newpacket->data+curbyte, 0x00);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1664
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1665 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1666 * grab all the data for cookie caching.
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1667 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1668 cookie = (struct aim_msgcookie_t *)calloc(1, sizeof(struct aim_msgcookie_t));
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1669
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1670 memcpy(cookie->cookie, newpacket->data+curbyte-8, 8);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1671 cookie->type = AIM_COOKIETYPE_OFTIM;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1672
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1673 if(!priv)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1674 priv = (struct aim_directim_priv *)calloc(1, sizeof(struct aim_directim_priv));
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1675
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1676 memcpy(priv->cookie, cookie, 8);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1677 memcpy(priv->sn, destsn, sizeof(priv->sn));
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1678
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1679 cookie->data = priv;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1680
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1681 aim_cachecookie(sess, cookie); /* cache da cookie */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1682
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1683 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1684 * Channel ID
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1685 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1686 curbyte += aimutil_put16(newpacket->data+curbyte,0x0002);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1687
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1688 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1689 * Destination SN (prepended with byte length)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1690 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1691 curbyte += aimutil_put8(newpacket->data+curbyte,strlen(destsn));
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1692 curbyte += aimutil_putstr(newpacket->data+curbyte, destsn, strlen(destsn));
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1693
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1694 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0003);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1695 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0000);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1696
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1697 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1698 * enTLV start
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1699 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1700 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0005);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1701 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0032);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1702
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1703 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1704 * Flag data / ICBM Parameters?
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1705 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1706 curbyte += aimutil_put8(newpacket->data+curbyte, 0x00);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1707 curbyte += aimutil_put8(newpacket->data+curbyte, 0x00);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1708
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1709 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1710 * Cookie
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1711 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1712 curbyte += aimutil_putstr(newpacket->data+curbyte, (char *)cookie, 8);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1713
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1714 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1715 * Capability String
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1716 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1717 curbyte += aimutil_putstr(newpacket->data+curbyte, (char *)cap, 0x10);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1718
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1719 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1720 * 000a/0002 : 0001
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1721 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1722 curbyte += aimutil_put16(newpacket->data+curbyte, 0x000a);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1723 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0002);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1724 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0001);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1725
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1726 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1727 * 0003/0004: IP address
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1728 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1729
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1730 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0003);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1731 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0004);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1732
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1733 for(i = 0; i < 4; i++)
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1734 curbyte += aimutil_put8(newpacket->data+curbyte, d[i]); /* already in network byte order */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1735
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1736 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1737 * 0005/0002: Port
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1738 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1739
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1740 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0005);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1741 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0002);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1742 curbyte += aimutil_put16(newpacket->data+curbyte, port);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1743
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1744 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1745 * 000f/0000: umm.. dunno. Zigamorph[1]?
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1746 * [1]: see esr's TNHD.
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1747 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1748
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1749 curbyte += aimutil_put16(newpacket->data+curbyte, 0x000f);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1750 curbyte += aimutil_put16(newpacket->data+curbyte, 0x0000);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1751
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1752 printf("curbyte: 0x%x\n",curbyte);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1753
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1754 newpacket->commandlen = curbyte;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1755 newpacket->lock = 0;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1756
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1757 aim_tx_enqueue(sess, newpacket);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1758
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1759 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1760 * allocate and set up our connection
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1761 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1762
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1763 i = fcntl(listenfd, F_GETFL, 0);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1764 fcntl(listenfd, F_SETFL, i | O_NONBLOCK);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1765
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1766 newconn = aim_newconn(sess, AIM_CONN_TYPE_RENDEZVOUS_OUT, NULL);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1767 if (!newconn) {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1768 perror("aim_newconn");
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1769 aim_conn_kill(sess, &newconn);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1770 return NULL;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1771 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1772
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1773 newconn->fd = listenfd;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1774 newconn->subtype = AIM_CONN_SUBTYPE_OFT_DIRECTIM;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1775 newconn->priv = priv;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1776 printf("faim: listening (fd = %d, unconnected)\n", newconn->fd);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1777
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1778 /*
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1779 * XXX We need some way of closing the listener socket after
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1780 * n seconds of no connection. -- mid
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1781 */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1782
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1783 #ifdef USE_SNAC_FOR_IMS
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1784 {
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1785 struct aim_snac_t snac;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1786
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1787 snac.id = sess->snac_nextid;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1788 snac.family = 0x0004;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1789 snac.type = 0x0006;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1790 snac.flags = 0x0000;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1791
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1792 snac.data = malloc(strlen(destsn)+1);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1793 memcpy(snac.data, destsn, strlen(destsn)+1);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1794
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1795 aim_newsnac(sess, &snac);
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1796
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1797 aim_cleansnacs(sess, 60); /* clean out all SNACs over 60sec old */
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1798 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1799 #endif
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1800
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1801 return newconn;
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1802 }
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1803
c4012584334f [gaim-migrate @ 970]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 932
diff changeset
1804 #endif
1186
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1805
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1806 /*
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1807 * int aim_getfile_send_chunk(struct aim_conn_t *conn, FILE *tosend, struct aim_fileheader_t *fh, int pos, int bufsize)
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1808 * conn is the OFT connection to shove the data down,
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1809 * tosend is the FILE * for the file to send
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1810 * fh is the filled-in fh value
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1811 * pos is the position to start at (at beginning should be 0, after 5
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1812 * bytes are sent should be 5); -1 for "don't seek"
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1813 * bufsize is the size of the chunk to send
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1814 *
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1815 * returns -1 on error, new pos on success. 0 on EOF
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1816 *
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1817 *
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1818 * Notes on usage:
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1819 * You don't really have to keep track of pos if you don't want
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1820 * to. just always call with -1 for pos, and it'll use the one
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1821 * contained within the FILE *.
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1822 *
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1823 * if (pos + chunksize > fh->size), we only send as much data as we
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1824 * can get (ie: up to fh->size.
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1825 */
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1826
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1827 faim_export int aim_getfile_send_chunk(struct aim_conn_t *conn, FILE *tosend, struct aim_fileheader_t *fh, int pos, int bufsize)
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1828 {
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1829 int bufpos;
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1830 int curpos;
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1831 char *buf;
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1832
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1833 /* sanity checks */
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1834 if(conn->type != AIM_CONN_TYPE_RENDEZVOUS || conn->subtype != AIM_CONN_SUBTYPE_OFT_GETFILE) {
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1835 faimdprintf(1, "faim: getfile_send_chunk: conn->type(0x%04x) != RENDEZVOUS or conn->subtype(0x%04x) != GETFILE\n", conn->type, conn->subtype);
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1836 return -1;
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1837 }
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1838
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1839 if(!tosend) {
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1840 faimdprintf(1, "faim: getfile_send_chunk: file pointer isn't valid\n");
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1841 return -1;
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1842 }
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1843
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1844 if(!fh) {
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1845 faimdprintf(1, "faim: getfile_send_chunk: fh isn't valid\n");
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1846 return -1;
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1847 }
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1848
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1849 /* real code */
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1850
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1851 if(!(buf = (char *)calloc(1, bufsize))) {
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1852 perror("faim: getfile_send_chunk: calloc:");
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1853 faimdprintf(2, "faim: getfile_send_chunk calloc error\n");
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1854 return -1;
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1855 }
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1856
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1857 if(pos != -1) {
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1858 if( fseek(tosend, pos, SEEK_SET) == -1) {
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1859 perror("faim: getfile_send_chunk: fseek:");
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1860 faimdprintf(2, "faim: getfile_send_chunk fseek error\n");
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1861 }
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1862 curpos = pos;
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1863 } else
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1864 pos = ftell(tosend);
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1865
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1866
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1867 faimdprintf(2, "faim: getfile_send_chunk: using %i byte blocks\n", bufsize);
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1868
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1869 for(bufpos = 0; (bufpos < bufsize) && (pos < fh->size); bufpos++, pos++) {
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1870 if( (buf[bufpos] = fgetc(tosend)) == EOF) {
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1871 #if 0 /* fuck checking */
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1872 if(pos != fh->size) {
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1873 fprintf(stderr, "faim: getfile_send_chunk: hrm... apparent early EOF at pos 0x%x of 0x%x\n", pos, fh->size);
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1874 perror("getfile_send_chunk: fgetc: ");
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1875 free(buf);
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1876 return -1;
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1877 }
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1878 #endif
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1879 return 0;
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1880 }
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1881 }
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1882
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1883 if( write(conn->fd, buf, bufpos+1) != (bufpos+1)) {
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1884 faimdprintf(1, "faim: getfile_send_chunk cleanup: whoopsy, didn't write it all...\n");
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1885 perror("getfile_send_chunk: write: ");
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1886 free(buf);
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1887 return -1;
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1888 }
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1889
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1890 free(buf);
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1891
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1892 return (pos+1);
17204492d19d [gaim-migrate @ 1196]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1002
diff changeset
1893 }

mercurial