13234
|
1 /*
|
|
2 * Gaim's oscar protocol plugin
|
|
3 * This file is the legal property of its developers.
|
|
4 * Please see the AUTHORS file distributed alongside this file.
|
|
5 *
|
|
6 * This library is free software; you can redistribute it and/or
|
|
7 * modify it under the terms of the GNU Lesser General Public
|
|
8 * License as published by the Free Software Foundation; either
|
|
9 * version 2 of the License, or (at your option) any later version.
|
|
10 *
|
|
11 * This library is distributed in the hope that it will be useful,
|
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
14 * Lesser General Public License for more details.
|
|
15 *
|
|
16 * You should have received a copy of the GNU Lesser General Public
|
|
17 * License along with this library; if not, write to the Free Software
|
|
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
19 */
|
|
20
|
|
21 /*
|
|
22 * OFT Services
|
|
23 *
|
|
24 * For all of the above #defines, the number is the subtype
|
|
25 * of the SNAC. For OFT #defines, the number is the
|
|
26 * "hdrtype" which comes after the magic string and OFT
|
|
27 * packet length.
|
|
28 *
|
|
29 * I'm pretty sure the ODC ones are arbitrary right now,
|
|
30 * that should be changed.
|
|
31 */
|
|
32
|
|
33 #ifndef _PEER_H_
|
|
34 #define _PEER_H_
|
|
35
|
|
36 #define AIM_CB_FAM_OFT 0xfffe /* OFT/Rvous */
|
|
37
|
|
38 #define OFT_TYPE_DIRECTIMCONNECTREQ 0x0001 /* connect request -- actually an OSCAR CAP */
|
|
39 #define OFT_TYPE_DIRECTIMINCOMING 0x0002
|
|
40 #define OFT_TYPE_DIRECTIMDISCONNECT 0x0003
|
|
41 #define OFT_TYPE_DIRECTIMTYPING 0x0004
|
|
42 #define OFT_TYPE_DIRECTIM_ESTABLISHED 0x0005
|
|
43
|
|
44 #define OFT_TYPE_PROMPT 0x0101 /* "I am going to send you this file, is that ok?" */
|
|
45 #define OFT_TYPE_RESUMESOMETHING 0x0106 /* I really don't know */
|
|
46 #define OFT_TYPE_ACK 0x0202 /* "Yes, it is ok for you to send me that file" */
|
|
47 #define OFT_TYPE_DONE 0x0204 /* "I received that file with no problems, thanks a bunch" */
|
|
48 #define OFT_TYPE_RESUME 0x0205 /* Resume transferring, sent by whoever paused? */
|
|
49 #define OFT_TYPE_RESUMEACK 0x0207 /* Not really sure */
|
|
50
|
|
51 #define OFT_TYPE_GETFILE_REQUESTLISTING 0x1108 /* "I have a listing.txt file, do you want it?" */
|
|
52 #define OFT_TYPE_GETFILE_RECEIVELISTING 0x1209 /* "Yes, please send me your listing.txt file" */
|
|
53 #define OFT_TYPE_GETFILE_RECEIVEDLISTING 0x120a /* received corrupt listing.txt file? I'm just guessing about this one... */
|
|
54 #define OFT_TYPE_GETFILE_ACKLISTING 0x120b /* "I received the listing.txt file successfully" */
|
|
55 #define OFT_TYPE_GETFILE_REQUESTFILE 0x120c /* "Please send me this file" */
|
|
56
|
|
57 #define OFT_TYPE_ESTABLISHED 0xFFFF /* connection to buddy initiated */
|
|
58
|
|
59
|
|
60 struct aim_fileheader_t {
|
|
61 #if 0
|
|
62 char magic[4]; /* 0 */
|
|
63 guint16 hdrlen; /* 4 */
|
|
64 guint16 hdrtype; /* 6 */
|
|
65 #endif
|
|
66 guchar bcookie[8]; /* 8 */
|
|
67 guint16 encrypt; /* 16 */
|
|
68 guint16 compress; /* 18 */
|
|
69 guint16 totfiles; /* 20 */
|
|
70 guint16 filesleft; /* 22 */
|
|
71 guint16 totparts; /* 24 */
|
|
72 guint16 partsleft; /* 26 */
|
|
73 guint32 totsize; /* 28 */
|
|
74 guint32 size; /* 32 */
|
|
75 guint32 modtime; /* 36 */
|
|
76 guint32 checksum; /* 40 */
|
|
77 guint32 rfrcsum; /* 44 */
|
|
78 guint32 rfsize; /* 48 */
|
|
79 guint32 cretime; /* 52 */
|
|
80 guint32 rfcsum; /* 56 */
|
|
81 guint32 nrecvd; /* 60 */
|
|
82 guint32 recvcsum; /* 64 */
|
|
83 char idstring[32]; /* 68 */
|
|
84 guint8 flags; /* 100 */
|
|
85 guint8 lnameoffset; /* 101 */
|
|
86 guint8 lsizeoffset; /* 102 */
|
|
87 char dummy[69]; /* 103 */
|
|
88 char macfileinfo[16]; /* 172 */
|
|
89 guint16 nencode; /* 188 */
|
|
90 guint16 nlanguage; /* 190 */
|
|
91 char name[64]; /* 192 */
|
|
92 /* 256 */
|
|
93 };
|
|
94
|
|
95 struct aim_rv_proxy_info {
|
|
96 guint16 packet_ver;
|
|
97 guint16 cmd_type;
|
|
98 guint16 flags;
|
|
99 char* ip; /* IP address sent along with this packet */
|
|
100 guint16 port; /* This is NOT the port we should use to connect. Always connect to 5190 */
|
|
101 guchar cookie[8];
|
|
102 guint32 unknownA;
|
|
103 guint16 err_code; /* Valid only for cmd_type of AIM_RV_PROXY_ERROR */
|
|
104 aim_conn_t *conn;
|
|
105 aim_session_t *sess;
|
|
106 };
|
|
107
|
|
108 struct aim_oft_info {
|
|
109 guchar cookie[8];
|
|
110 char *sn;
|
|
111 char *proxyip;
|
|
112 char *clientip;
|
|
113 char *verifiedip;
|
|
114 guint16 port;
|
|
115
|
|
116 int send_or_recv; /* Send or receive */
|
|
117 int method; /* What method is being used to transfer this file? DIRECT, REDIR, or PROXY */
|
|
118 int stage; /* At what stage was a proxy requested? NONE, STG1, STG2*/
|
|
119 int xfer_reffed; /* There are many timers, but we should only ref the xfer once */
|
|
120 int redir_attempted; /* Have we previously attempted to redirect the connection? */
|
|
121 guint32 res_bytes; /* The bytes already received for resuming a transfer */
|
|
122
|
|
123 aim_conn_t *conn;
|
|
124 aim_session_t *sess;
|
|
125 int success; /* Was the connection successful? Used for timing out the transfer. */
|
|
126 struct aim_fileheader_t fh;
|
|
127 struct aim_oft_info *next;
|
|
128 struct aim_rv_proxy_info *proxy_info;
|
|
129 };
|
|
130
|
|
131 faim_export guint32 aim_oft_checksum_chunk(const guint8 *buffer, int bufferlen, guint32 prevcheck);
|
|
132 faim_export guint32 aim_oft_checksum_file(char *filename);
|
|
133 faim_export int aim_handlerendconnect(aim_session_t *sess, aim_conn_t *cur);
|
|
134 faim_export int aim_odc_send_typing(aim_session_t *sess, aim_conn_t *conn, int typing);
|
|
135 faim_export int aim_odc_send_im(aim_session_t *sess, aim_conn_t *conn, const char *msg, int len, int encoding, int isawaymsg);
|
|
136 faim_export const char *aim_odc_getsn(aim_conn_t *conn);
|
|
137 faim_export const guchar *aim_odc_getcookie(aim_conn_t *conn);
|
|
138 faim_export aim_conn_t *aim_odc_getconn(aim_session_t *sess, const char *sn);
|
|
139 faim_export aim_conn_t *aim_odc_initiate(aim_session_t *sess, const char *sn, int listenfd,
|
|
140 const guint8 *localip, guint16 port, const guchar *mycookie);
|
|
141 faim_export aim_conn_t *aim_odc_connect(aim_session_t *sess, const char *sn, const char *addr, const guchar *cookie);
|
|
142
|
|
143 faim_export struct aim_oft_info *aim_oft_createinfo(aim_session_t *sess, const guchar *cookie, const char *sn,
|
|
144 const char *ip, guint16 port, guint32 size, guint32 modtime, char *filename, int send_or_recv,
|
|
145 int method, int stage);
|
|
146 faim_export int aim_oft_destroyinfo(struct aim_oft_info *oft_info);
|
|
147 faim_export struct aim_rv_proxy_info *aim_rv_proxy_createinfo(aim_session_t *sess, const guchar *cookie, guint16 port);
|
|
148 faim_export int aim_sendfile_listen(aim_session_t *sess, struct aim_oft_info *oft_info, int listenfd);
|
|
149 faim_export int aim_oft_sendheader(aim_session_t *sess, guint16 type, struct aim_oft_info *oft_info);
|
|
150
|
|
151 faim_export int aim_rv_proxy_init_recv(struct aim_rv_proxy_info *proxy_info);
|
|
152 faim_export int aim_rv_proxy_init_send(struct aim_rv_proxy_info *proxy_info);
|
|
153
|
|
154 faim_export int aim_sendfile_listen(aim_session_t *sess, struct aim_oft_info *oft_info, int listenfd);
|
|
155 faim_export int aim_oft_sendheader(aim_session_t *sess, guint16 type, struct aim_oft_info *oft_info);
|
|
156 faim_internal struct aim_rv_proxy_info *aim_rv_proxy_read(aim_session_t *sess, aim_conn_t *conn);
|
|
157
|
|
158
|
|
159 faim_internal int aim_rxdispatch_rendezvous(aim_session_t *sess, aim_frame_t *fr);
|
|
160
|
|
161 #endif /* _PEER_H_ */
|