src/protocols/sametime/meanwhile/common.c

Fri, 20 Jan 2006 00:19:53 +0000

author
Ethan Blanton <elb@pidgin.im>
date
Fri, 20 Jan 2006 00:19:53 +0000
changeset 12956
39a4efae983c
permissions
-rw-r--r--

[gaim-migrate @ 15309]
Add .cvsignore actions to meanwhile so cvs shuts up about it.

12956
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
1
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
2 /*
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
3 Meanwhile - Unofficial Lotus Sametime Community Client Library
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
4 Copyright (C) 2004 Christopher (siege) O'Brien
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
5
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
6 This library is free software; you can redistribute it and/or
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
7 modify it under the terms of the GNU Library General Public
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
8 License as published by the Free Software Foundation; either
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
9 version 2 of the License, or (at your option) any later version.
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
10
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
11 This library is distributed in the hope that it will be useful,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
14 Library General Public License for more details.
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
15
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
16 You should have received a copy of the GNU Library General Public
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
17 License along with this library; if not, write to the Free
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
19 */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
20
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
21 #include <glib.h>
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
22 #include <string.h>
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
23
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
24 #include "mw_common.h"
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
25
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
26
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
27 /** @todo the *_get functions should make sure to clear their
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
28 structures in the event of failure, to prevent memory leaks */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
29
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
30
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
31 #define MW16_PUT(b, val) \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
32 *(b)++ = ((val) >> 0x08) & 0xff; \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
33 *(b)++ = (val) & 0xff;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
34
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
35
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
36 #define MW16_GET(b, val) \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
37 val = (*(b)++ & 0xff) << 8; \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
38 val = val | (*(b)++ & 0xff);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
39
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
40
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
41 #define MW32_PUT(b, val) \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
42 *(b)++ = ((val) >> 0x18) & 0xff; \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
43 *(b)++ = ((val) >> 0x10) & 0xff; \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
44 *(b)++ = ((val) >> 0x08) & 0xff; \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
45 *(b)++ = (val) & 0xff;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
46
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
47
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
48 #define MW32_GET(b, val) \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
49 val = (*(b)++ & 0xff) << 0x18; \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
50 val = val | (*(b)++ & 0xff) << 0x10; \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
51 val = val | (*(b)++ & 0xff) << 0x08; \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
52 val = val | (*(b)++ & 0xff);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
53
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
54
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
55 struct mwPutBuffer {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
56 guchar *buf; /**< head of buffer */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
57 gsize len; /**< length of buffer */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
58
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
59 guchar *ptr; /**< offset to first unused byte */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
60 gsize rem; /**< count of unused bytes remaining */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
61 };
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
62
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
63
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
64 struct mwGetBuffer {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
65 guchar *buf; /**< head of buffer */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
66 gsize len; /**< length of buffer */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
67
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
68 guchar *ptr; /**< offset to first unused byte */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
69 gsize rem; /**< count of unused bytes remaining */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
70
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
71 gboolean wrap; /**< TRUE to indicate buf shouldn't be freed */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
72 gboolean error; /**< TRUE to indicate an error */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
73 };
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
74
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
75
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
76 #define BUFFER_USED(buffer) \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
77 ((buffer)->len - (buffer)->rem)
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
78
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
79
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
80 /** ensure that there's at least enough space remaining in the put
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
81 buffer to fit needed. */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
82 static void ensure_buffer(struct mwPutBuffer *b, gsize needed) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
83 if(b->rem < needed) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
84 gsize len = b->len, use = BUFFER_USED(b);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
85 guchar *buf;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
86
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
87 /* newly created buffers are empty until written to, and then they
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
88 have 1024 available */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
89 if(! len) len = 1024;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
90
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
91 /* double len until it's large enough to fit needed */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
92 while( (len - use) < needed ) len = len << 1;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
93
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
94 /* create the new buffer. if there was anything in the old buffer,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
95 copy it into the new buffer and free the old copy */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
96 buf = g_malloc(len);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
97 if(b->buf) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
98 memcpy(buf, b->buf, use);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
99 g_free(b->buf);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
100 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
101
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
102 /* put the new buffer into b */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
103 b->buf = buf;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
104 b->len = len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
105 b->ptr = buf + use;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
106 b->rem = len - use;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
107 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
108 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
109
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
110
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
111 /** determine if there are at least needed bytes available in the
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
112 buffer. sets the error flag if there's not at least needed bytes
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
113 left in the buffer
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
114
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
115 @returns true if there's enough data, false if not */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
116 static gboolean check_buffer(struct mwGetBuffer *b, gsize needed) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
117 if(! b->error) b->error = (b->rem < needed);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
118 return ! b->error;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
119 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
120
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
121
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
122 struct mwPutBuffer *mwPutBuffer_new() {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
123 return g_new0(struct mwPutBuffer, 1);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
124 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
125
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
126
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
127 void mwPutBuffer_write(struct mwPutBuffer *b, gpointer data, gsize len) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
128 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
129 g_return_if_fail(data != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
130
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
131 if(! len) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
132
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
133 ensure_buffer(b, len);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
134 memcpy(b->ptr, data, len);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
135 b->ptr += len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
136 b->rem -= len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
137 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
138
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
139
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
140 void mwPutBuffer_free(struct mwPutBuffer *b) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
141 if(! b) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
142 g_free(b->buf);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
143 g_free(b);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
144 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
145
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
146
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
147 void mwPutBuffer_finalize(struct mwOpaque *to, struct mwPutBuffer *from) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
148 g_return_if_fail(to != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
149 g_return_if_fail(from != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
150
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
151 to->len = BUFFER_USED(from);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
152 to->data = from->buf;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
153
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
154 g_free(from);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
155 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
156
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
157
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
158 struct mwGetBuffer *mwGetBuffer_new(struct mwOpaque *o) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
159 struct mwGetBuffer *b = g_new0(struct mwGetBuffer, 1);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
160
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
161 if(o && o->len) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
162 b->buf = b->ptr = g_memdup(o->data, o->len);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
163 b->len = b->rem = o->len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
164 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
165
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
166 return b;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
167 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
168
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
169
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
170 struct mwGetBuffer *mwGetBuffer_wrap(const struct mwOpaque *o) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
171 struct mwGetBuffer *b = g_new0(struct mwGetBuffer, 1);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
172
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
173 if(o && o->len) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
174 b->buf = b->ptr = o->data;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
175 b->len = b->rem = o->len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
176 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
177 b->wrap = TRUE;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
178
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
179 return b;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
180 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
181
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
182
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
183 gsize mwGetBuffer_read(struct mwGetBuffer *b, gpointer data, gsize len) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
184 g_return_val_if_fail(b != NULL, 0);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
185 g_return_val_if_fail(data != NULL, 0);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
186
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
187 if(b->error) return 0;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
188 if(! len) return 0;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
189
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
190 if(b->rem < len)
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
191 len = b->rem;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
192
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
193 memcpy(data, b->ptr, len);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
194 b->ptr += len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
195 b->rem -= len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
196
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
197 return len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
198 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
199
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
200
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
201 gsize mwGetBuffer_advance(struct mwGetBuffer *b, gsize len) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
202 g_return_val_if_fail(b != NULL, 0);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
203
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
204 if(b->error) return 0;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
205 if(! len) return 0;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
206
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
207 if(b->rem < len)
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
208 len = b->rem;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
209
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
210 b->ptr += len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
211 b->rem -= len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
212
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
213 return len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
214 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
215
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
216
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
217 void mwGetBuffer_reset(struct mwGetBuffer *b) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
218 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
219
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
220 b->rem = b->len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
221 b->ptr = b->buf;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
222 b->error = FALSE;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
223 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
224
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
225
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
226 gsize mwGetBuffer_remaining(struct mwGetBuffer *b) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
227 g_return_val_if_fail(b != NULL, 0);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
228 return b->rem;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
229 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
230
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
231
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
232 gboolean mwGetBuffer_error(struct mwGetBuffer *b) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
233 g_return_val_if_fail(b != NULL, TRUE);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
234 return b->error;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
235 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
236
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
237
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
238 void mwGetBuffer_free(struct mwGetBuffer *b) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
239 if(! b) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
240 if(! b->wrap) g_free(b->buf);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
241 g_free(b);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
242 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
243
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
244
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
245 #define guint16_buflen() 2
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
246
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
247
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
248 void guint16_put(struct mwPutBuffer *b, guint16 val) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
249 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
250
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
251 ensure_buffer(b, guint16_buflen());
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
252 MW16_PUT(b->ptr, val);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
253 b->rem -= guint16_buflen();
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
254 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
255
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
256
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
257 void guint16_get(struct mwGetBuffer *b, guint16 *val) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
258 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
259
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
260 if(b->error) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
261 g_return_if_fail(check_buffer(b, guint16_buflen()));
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
262
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
263 MW16_GET(b->ptr, *val);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
264 b->rem -= guint16_buflen();
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
265 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
266
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
267
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
268 guint16 guint16_peek(struct mwGetBuffer *b) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
269 guchar *buf = b->buf;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
270 guint16 r = 0;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
271
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
272 if(b->rem >= guint16_buflen())
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
273 MW16_GET(buf, r);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
274
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
275 return r;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
276 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
277
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
278
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
279 #define guint32_buflen() 4
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
280
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
281
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
282 void guint32_put(struct mwPutBuffer *b, guint32 val) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
283 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
284
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
285 ensure_buffer(b, guint32_buflen());
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
286 MW32_PUT(b->ptr, val);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
287 b->rem -= guint32_buflen();
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
288 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
289
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
290
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
291 void guint32_get(struct mwGetBuffer *b, guint32 *val) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
292 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
293
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
294 if(b->error) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
295 g_return_if_fail(check_buffer(b, guint32_buflen()));
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
296
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
297 MW32_GET(b->ptr, *val);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
298 b->rem -= guint32_buflen();
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
299 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
300
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
301
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
302 guint32 guint32_peek(struct mwGetBuffer *b) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
303 guchar *buf = b->buf;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
304 guint32 r = 0;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
305
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
306 if(b->rem >= guint32_buflen())
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
307 MW32_GET(buf, r);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
308
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
309 return r;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
310 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
311
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
312
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
313 #define gboolean_buflen() 1
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
314
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
315
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
316 void gboolean_put(struct mwPutBuffer *b, gboolean val) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
317 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
318
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
319 ensure_buffer(b, gboolean_buflen());
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
320 *(b->ptr) = !! val;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
321 b->ptr++;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
322 b->rem--;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
323 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
324
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
325
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
326 void gboolean_get(struct mwGetBuffer *b, gboolean *val) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
327 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
328
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
329 if(b->error) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
330 g_return_if_fail(check_buffer(b, gboolean_buflen()));
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
331
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
332 *val = !! *(b->ptr);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
333 b->ptr++;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
334 b->rem--;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
335 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
336
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
337
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
338 gboolean gboolean_peek(struct mwGetBuffer *b) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
339 gboolean v = FALSE;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
340
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
341 if(b->rem >= gboolean_buflen())
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
342 v = !! *(b->ptr);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
343
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
344 return v;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
345 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
346
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
347
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
348 gboolean mw_streq(const char *a, const char *b) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
349 return (a == b) || (a && b && !strcmp(a, b));
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
350 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
351
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
352
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
353 void mwString_put(struct mwPutBuffer *b, const char *val) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
354 gsize len = 0;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
355
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
356 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
357
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
358 if(val) len = strlen(val);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
359
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
360 guint16_put(b, (guint16) len);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
361
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
362 if(len) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
363 ensure_buffer(b, len);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
364 memcpy(b->ptr, val, len);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
365 b->ptr += len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
366 b->rem -= len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
367 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
368 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
369
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
370
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
371 void mwString_get(struct mwGetBuffer *b, char **val) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
372 guint16 len = 0;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
373
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
374 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
375 g_return_if_fail(val != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
376
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
377 *val = NULL;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
378
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
379 if(b->error) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
380 guint16_get(b, &len);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
381
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
382 g_return_if_fail(check_buffer(b, (gsize) len));
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
383
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
384 if(len) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
385 *val = g_malloc0(len + 1);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
386 memcpy(*val, b->ptr, len);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
387 b->ptr += len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
388 b->rem -= len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
389 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
390 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
391
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
392
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
393 void mwOpaque_put(struct mwPutBuffer *b, const struct mwOpaque *o) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
394 gsize len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
395
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
396 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
397
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
398 if(! o) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
399 guint32_put(b, 0x00);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
400 return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
401 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
402
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
403 len = o->len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
404 if(len)
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
405 g_return_if_fail(o->data != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
406
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
407 guint32_put(b, (guint32) len);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
408
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
409 if(len) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
410 ensure_buffer(b, len);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
411 memcpy(b->ptr, o->data, len);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
412 b->ptr += len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
413 b->rem -= len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
414 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
415 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
416
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
417
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
418 void mwOpaque_get(struct mwGetBuffer *b, struct mwOpaque *o) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
419 guint32 tmp = 0;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
420
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
421 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
422 g_return_if_fail(o != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
423
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
424 o->len = 0;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
425 o->data = NULL;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
426
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
427 if(b->error) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
428 guint32_get(b, &tmp);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
429
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
430 g_return_if_fail(check_buffer(b, (gsize) tmp));
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
431
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
432 o->len = (gsize) tmp;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
433 if(tmp > 0) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
434 o->data = g_memdup(b->ptr, tmp);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
435 b->ptr += tmp;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
436 b->rem -= tmp;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
437 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
438 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
439
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
440
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
441 void mwOpaque_clear(struct mwOpaque *o) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
442 if(! o) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
443 g_free(o->data);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
444 o->data = NULL;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
445 o->len = 0;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
446 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
447
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
448
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
449 void mwOpaque_free(struct mwOpaque *o) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
450 if(! o) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
451 g_free(o->data);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
452 g_free(o);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
453 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
454
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
455
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
456 void mwOpaque_clone(struct mwOpaque *to, const struct mwOpaque *from) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
457 g_return_if_fail(to != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
458
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
459 to->len = 0;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
460 to->data = NULL;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
461
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
462 if(from) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
463 to->len = from->len;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
464 if(to->len)
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
465 to->data = g_memdup(from->data, to->len);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
466 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
467 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
468
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
469
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
470 /* 8.2 Common Structures */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
471 /* 8.2.1 Login Info block */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
472
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
473
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
474 void mwLoginInfo_put(struct mwPutBuffer *b, const struct mwLoginInfo *login) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
475 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
476 g_return_if_fail(login != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
477
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
478 mwString_put(b, login->login_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
479 guint16_put(b, login->type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
480 mwString_put(b, login->user_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
481 mwString_put(b, login->user_name);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
482 mwString_put(b, login->community);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
483 gboolean_put(b, login->full);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
484
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
485 if(login->full) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
486 mwString_put(b, login->desc);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
487 guint32_put(b, login->ip_addr);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
488 mwString_put(b, login->server_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
489 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
490 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
491
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
492
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
493 void mwLoginInfo_get(struct mwGetBuffer *b, struct mwLoginInfo *login) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
494 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
495 g_return_if_fail(login != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
496
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
497 if(b->error) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
498
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
499 mwString_get(b, &login->login_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
500 guint16_get(b, &login->type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
501 mwString_get(b, &login->user_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
502 mwString_get(b, &login->user_name);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
503 mwString_get(b, &login->community);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
504 gboolean_get(b, &login->full);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
505
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
506 if(login->full) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
507 mwString_get(b, &login->desc);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
508 guint32_get(b, &login->ip_addr);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
509 mwString_get(b, &login->server_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
510 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
511 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
512
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
513
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
514 void mwLoginInfo_clear(struct mwLoginInfo *login) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
515 if(! login) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
516
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
517 g_free(login->login_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
518 g_free(login->user_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
519 g_free(login->user_name);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
520 g_free(login->community);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
521 g_free(login->desc);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
522 g_free(login->server_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
523
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
524 memset(login, 0x00, sizeof(struct mwLoginInfo));
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
525 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
526
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
527
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
528 void mwLoginInfo_clone(struct mwLoginInfo *to,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
529 const struct mwLoginInfo *from) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
530
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
531 g_return_if_fail(to != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
532 g_return_if_fail(from != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
533
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
534 to->login_id= g_strdup(from->login_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
535 to->type = from->type;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
536 to->user_id = g_strdup(from->user_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
537 to->user_name = g_strdup(from->user_name);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
538 to->community = g_strdup(from->community);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
539
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
540 if( (to->full = from->full) ) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
541 to->desc = g_strdup(from->desc);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
542 to->ip_addr = from->ip_addr;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
543 to->server_id = g_strdup(from->server_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
544 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
545 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
546
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
547
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
548 /* 8.2.2 Private Info Block */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
549
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
550
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
551 void mwUserItem_put(struct mwPutBuffer *b, const struct mwUserItem *user) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
552 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
553 g_return_if_fail(user != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
554
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
555 gboolean_put(b, user->full);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
556 mwString_put(b, user->id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
557 mwString_put(b, user->community);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
558
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
559 if(user->full)
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
560 mwString_put(b, user->name);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
561 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
562
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
563
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
564 void mwUserItem_get(struct mwGetBuffer *b, struct mwUserItem *user) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
565 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
566 g_return_if_fail(user != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
567
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
568 if(b->error) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
569
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
570 gboolean_get(b, &user->full);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
571 mwString_get(b, &user->id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
572 mwString_get(b, &user->community);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
573
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
574 if(user->full)
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
575 mwString_get(b, &user->name);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
576 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
577
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
578
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
579 void mwUserItem_clear(struct mwUserItem *user) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
580 if(! user) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
581
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
582 g_free(user->id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
583 g_free(user->community);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
584 g_free(user->name);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
585
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
586 memset(user, 0x00, sizeof(struct mwUserItem));
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
587 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
588
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
589
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
590 void mwUserItem_clone(struct mwUserItem *to,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
591 const struct mwUserItem *from) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
592
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
593 g_return_if_fail(to != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
594 g_return_if_fail(from != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
595
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
596 to->full = from->full;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
597 to->id = g_strdup(from->id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
598 to->community = g_strdup(from->community);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
599 to->name = (to->full)? g_strdup(from->name): NULL;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
600 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
601
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
602
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
603 void mwPrivacyInfo_put(struct mwPutBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
604 const struct mwPrivacyInfo *info) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
605 guint32 c;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
606
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
607 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
608 g_return_if_fail(info != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
609
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
610 gboolean_put(b, info->deny);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
611 guint32_put(b, info->count);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
612
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
613 for(c = info->count; c--; ) mwUserItem_put(b, info->users + c);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
614 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
615
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
616
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
617 void mwPrivacyInfo_get(struct mwGetBuffer *b, struct mwPrivacyInfo *info) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
618 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
619 g_return_if_fail(info != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
620
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
621 if(b->error) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
622
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
623 gboolean_get(b, &info->deny);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
624 guint32_get(b, &info->count);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
625
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
626 if(info->count) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
627 guint32 c = info->count;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
628 info->users = g_new0(struct mwUserItem, c);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
629 while(c--) mwUserItem_get(b, info->users + c);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
630 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
631 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
632
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
633
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
634 void mwPrivacyInfo_clone(struct mwPrivacyInfo *to,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
635 const struct mwPrivacyInfo *from) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
636
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
637 guint32 c;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
638
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
639 g_return_if_fail(to != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
640 g_return_if_fail(from != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
641
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
642 to->deny = from->deny;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
643 c = to->count = from->count;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
644
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
645 to->users = g_new0(struct mwUserItem, c);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
646 while(c--) mwUserItem_clone(to->users+c, from->users+c);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
647 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
648
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
649
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
650 void mwPrivacyInfo_clear(struct mwPrivacyInfo *info) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
651 struct mwUserItem *u;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
652 guint32 c;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
653
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
654 g_return_if_fail(info != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
655
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
656 u = info->users;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
657 c = info->count;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
658
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
659 while(c--) mwUserItem_clear(u + c);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
660 g_free(u);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
661
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
662 info->count = 0;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
663 info->users = NULL;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
664 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
665
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
666
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
667 /* 8.2.3 User Status Block */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
668
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
669
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
670 void mwUserStatus_put(struct mwPutBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
671 const struct mwUserStatus *stat) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
672
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
673 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
674 g_return_if_fail(stat != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
675
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
676 guint16_put(b, stat->status);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
677 guint32_put(b, stat->time);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
678 mwString_put(b, stat->desc);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
679 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
680
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
681
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
682 void mwUserStatus_get(struct mwGetBuffer *b, struct mwUserStatus *stat) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
683 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
684 g_return_if_fail(stat != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
685
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
686 if(b->error) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
687
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
688 guint16_get(b, &stat->status);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
689 guint32_get(b, &stat->time);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
690 mwString_get(b, &stat->desc);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
691 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
692
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
693
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
694 void mwUserStatus_clear(struct mwUserStatus *stat) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
695 if(! stat) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
696 g_free(stat->desc);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
697 memset(stat, 0x00, sizeof(struct mwUserStatus));
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
698 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
699
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
700
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
701 void mwUserStatus_clone(struct mwUserStatus *to,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
702 const struct mwUserStatus *from) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
703
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
704 g_return_if_fail(to != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
705 g_return_if_fail(from != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
706
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
707 to->status = from->status;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
708 to->time = from->time;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
709 to->desc = g_strdup(from->desc);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
710 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
711
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
712
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
713 /* 8.2.4 ID Block */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
714
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
715
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
716 void mwIdBlock_put(struct mwPutBuffer *b, const struct mwIdBlock *id) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
717 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
718 g_return_if_fail(id != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
719
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
720 mwString_put(b, id->user);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
721 mwString_put(b, id->community);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
722 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
723
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
724
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
725 void mwIdBlock_get(struct mwGetBuffer *b, struct mwIdBlock *id) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
726 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
727 g_return_if_fail(id != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
728
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
729 if(b->error) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
730
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
731 mwString_get(b, &id->user);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
732 mwString_get(b, &id->community);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
733 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
734
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
735
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
736 void mwIdBlock_clear(struct mwIdBlock *id) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
737 if(! id) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
738
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
739 g_free(id->user);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
740 id->user = NULL;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
741
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
742 g_free(id->community);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
743 id->community = NULL;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
744 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
745
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
746
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
747 void mwIdBlock_clone(struct mwIdBlock *to, const struct mwIdBlock *from) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
748 g_return_if_fail(to != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
749 g_return_if_fail(from != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
750
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
751 to->user = g_strdup(from->user);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
752 to->community = g_strdup(from->community);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
753 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
754
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
755
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
756 guint mwIdBlock_hash(const struct mwIdBlock *idb) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
757 return (idb)? g_str_hash(idb->user): 0;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
758 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
759
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
760
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
761 gboolean mwIdBlock_equal(const struct mwIdBlock *a,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
762 const struct mwIdBlock *b) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
763
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
764 g_return_val_if_fail(a != NULL, FALSE);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
765 g_return_val_if_fail(b != NULL, FALSE);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
766
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
767 return ( mw_streq(a->user, b->user) &&
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
768 mw_streq(a->community, b->community) );
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
769 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
770
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
771
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
772 /* 8.2.5 Encryption Block */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
773
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
774 /** @todo I think this can be put into cipher */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
775
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
776 void mwEncryptItem_put(struct mwPutBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
777 const struct mwEncryptItem *ei) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
778
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
779 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
780 g_return_if_fail(ei != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
781
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
782 guint16_put(b, ei->id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
783 mwOpaque_put(b, &ei->info);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
784
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
785 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
786
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
787
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
788 void mwEncryptItem_get(struct mwGetBuffer *b, struct mwEncryptItem *ei) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
789 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
790 g_return_if_fail(ei != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
791
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
792 if(b->error) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
793
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
794 guint16_get(b, &ei->id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
795 mwOpaque_get(b, &ei->info);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
796 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
797
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
798
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
799 void mwEncryptItem_clear(struct mwEncryptItem *ei) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
800 if(! ei) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
801 ei->id = 0x0000;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
802 mwOpaque_clear(&ei->info);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
803 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
804
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
805
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
806 void mwEncryptItem_free(struct mwEncryptItem *ei) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
807 mwEncryptItem_clear(ei);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
808 g_free(ei);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
809 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
810
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
811
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
812 /* 8.4.2.1 Awareness ID Block */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
813
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
814
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
815 /** @todo move this into srvc_aware */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
816
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
817 void mwAwareIdBlock_put(struct mwPutBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
818 const struct mwAwareIdBlock *idb) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
819
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
820 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
821 g_return_if_fail(idb != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
822
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
823 guint16_put(b, idb->type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
824 mwString_put(b, idb->user);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
825 mwString_put(b, idb->community);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
826 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
827
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
828
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
829 void mwAwareIdBlock_get(struct mwGetBuffer *b, struct mwAwareIdBlock *idb) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
830 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
831 g_return_if_fail(idb != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
832
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
833 if(b->error) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
834
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
835 guint16_get(b, &idb->type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
836 mwString_get(b, &idb->user);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
837 mwString_get(b, &idb->community);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
838 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
839
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
840
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
841 void mwAwareIdBlock_clone(struct mwAwareIdBlock *to,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
842 const struct mwAwareIdBlock *from) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
843
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
844 g_return_if_fail(to != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
845 g_return_if_fail(from != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
846
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
847 to->type = from->type;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
848 to->user = g_strdup(from->user);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
849 to->community = g_strdup(from->community);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
850 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
851
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
852
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
853 void mwAwareIdBlock_clear(struct mwAwareIdBlock *idb) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
854 if(! idb) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
855 g_free(idb->user);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
856 g_free(idb->community);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
857 memset(idb, 0x00, sizeof(struct mwAwareIdBlock));
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
858 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
859
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
860
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
861 guint mwAwareIdBlock_hash(const struct mwAwareIdBlock *a) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
862 return (a)? g_str_hash(a->user): 0;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
863 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
864
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
865
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
866 gboolean mwAwareIdBlock_equal(const struct mwAwareIdBlock *a,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
867 const struct mwAwareIdBlock *b) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
868
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
869 g_return_val_if_fail(a != NULL, FALSE);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
870 g_return_val_if_fail(b != NULL, FALSE);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
871
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
872 return ( (a->type == b->type) &&
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
873 mw_streq(a->user, b->user) &&
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
874 mw_streq(a->community, b->community) );
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
875 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
876
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
877
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
878 /* 8.4.2.4 Snapshot */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
879
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
880 void mwAwareSnapshot_get(struct mwGetBuffer *b, struct mwAwareSnapshot *idb) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
881 guint32 junk;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
882 char *empty = NULL;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
883
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
884 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
885 g_return_if_fail(idb != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
886
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
887 guint32_get(b, &junk);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
888 mwAwareIdBlock_get(b, &idb->id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
889 mwString_get(b, &idb->group);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
890 gboolean_get(b, &idb->online);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
891
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
892 g_free(empty);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
893
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
894 if(idb->online) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
895 mwString_get(b, &idb->alt_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
896 mwUserStatus_get(b, &idb->status);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
897 mwString_get(b, &idb->name);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
898 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
899 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
900
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
901
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
902 void mwAwareSnapshot_clone(struct mwAwareSnapshot *to,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
903 const struct mwAwareSnapshot *from) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
904
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
905 g_return_if_fail(to != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
906 g_return_if_fail(from != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
907
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
908 mwAwareIdBlock_clone(&to->id, &from->id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
909 if( (to->online = from->online) ) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
910 to->alt_id = g_strdup(from->alt_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
911 mwUserStatus_clone(&to->status, &from->status);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
912 to->name = g_strdup(from->name);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
913 to->group = g_strdup(from->group);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
914 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
915 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
916
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
917
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
918 void mwAwareSnapshot_clear(struct mwAwareSnapshot *idb) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
919 if(! idb) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
920 mwAwareIdBlock_clear(&idb->id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
921 mwUserStatus_clear(&idb->status);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
922 g_free(idb->alt_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
923 g_free(idb->name);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
924 g_free(idb->group);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
925 memset(idb, 0x00, sizeof(struct mwAwareSnapshot));
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
926 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
927

mercurial