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