6
* Purple is the legal property of its developers, whose names are too numerous
7
* to list here. Please refer to the COPYRIGHT file distributed with this
10
* This program is free software; you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License as published by
12
* the Free Software Foundation; either version 2 of the License, or
13
* (at your option) any later version.
15
* This program is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
* GNU General Public License for more details.
20
* You should have received a copy of the GNU General Public License
21
* along with this program; if not, write to the Free Software
22
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
25
#ifndef _QQ_PACKET_PARSE_H_
26
#define _QQ_PACKET_PARSE_H_
31
/* According to "UNIX Network Programming", all TCP/IP implementations
32
* must support a minimum IP datagram size of 576 bytes, regardless of the MTU.
33
* Assuming a 20 byte IP header and 8 byte UDP header, this leaves 548 bytes
34
* as a safe maximum size for UDP messages.
36
* TCP allows packet 64K
38
#define MAX_PACKET_SIZE 65535
41
#include <netinet/in.h>
46
gint qq_get8(guint8 *b, guint8 *buf);
47
gint qq_get16(guint16 *w, guint8 *buf);
48
gint qq_get32(guint32 *dw, guint8 *buf);
49
gint qq_getIP(struct in_addr *ip, guint8 *buf);
50
gint qq_getime(time_t *t, guint8 *buf);
51
gint qq_getdata(guint8 *data, gint datalen, guint8 *buf);
53
gint qq_put8(guint8 *buf, guint8 b);
54
gint qq_put16(guint8 *buf, guint16 w);
55
gint qq_put32(guint8 *buf, guint32 dw);
56
gint qq_putIP(guint8* buf, struct in_addr *ip);
57
gint qq_putime(guint8 *buf, time_t *t);
58
gint qq_putdata(guint8 *buf, const guint8 *data, const int datalen);
61
gint read_packet_b(guint8 *buf, guint8 **cursor, gint buflen, guint8 *b);
62
gint read_packet_w(guint8 *buf, guint8 **cursor, gint buflen, guint16 *w);
63
gint read_packet_dw(guint8 *buf, guint8 **cursor, gint buflen, guint32 *dw);
64
gint read_packet_time(guint8 *buf, guint8 **cursor, gint buflen, time_t *t);
65
gint read_packet_data(guint8 *buf, guint8 **cursor, gint buflen, guint8 *data, gint datalen);
67
gint create_packet_b(guint8 *buf, guint8 **cursor, guint8 b);
68
gint create_packet_w(guint8 *buf, guint8 **cursor, guint16 w);
69
gint create_packet_dw(guint8 *buf, guint8 **cursor, guint32 dw);
70
gint create_packet_data(guint8 *buf, guint8 **cursor, guint8 *data, gint datalen);