src/protocols/sametime/meanwhile/message.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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
23 #include "mw_debug.h"
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
24 #include "mw_message.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 /* 7.1 Layering and message encapsulation */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
28 /* 7.1.1 The Sametime Message Header */
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 static void mwMessageHead_put(struct mwPutBuffer *b, struct mwMessage *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
32 guint16_put(b, msg->type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
33 guint16_put(b, msg->options);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
34 guint32_put(b, msg->channel);
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 if(msg->options & mwMessageOption_HAS_ATTRIBS)
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
37 mwOpaque_put(b, &msg->attribs);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
38 }
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 static void mwMessageHead_get(struct mwGetBuffer *b, struct mwMessage *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
42
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
43 if(mwGetBuffer_error(b)) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
44
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
45 guint16_get(b, &msg->type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
46 guint16_get(b, &msg->options);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
47 guint32_get(b, &msg->channel);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
48
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
49 if(msg->options & mwMessageOption_HAS_ATTRIBS)
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
50 mwOpaque_get(b, &msg->attribs);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
51 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
52
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 static void mwMessageHead_clone(struct mwMessage *to,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
55 struct mwMessage *from) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
56
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
57 to->type = from->type;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
58 to->options = from->options;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
59 to->channel = from->channel;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
60 mwOpaque_clone(&to->attribs, &from->attribs);
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 static void mwMessageHead_clear(struct mwMessage *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
65 mwOpaque_clear(&msg->attribs);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
66 }
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
69 /* 8.4 Messages */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
70 /* 8.4.1 Basic Community Messages */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
71 /* 8.4.1.1 Handshake */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
72
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 static void HANDSHAKE_put(struct mwPutBuffer *b, struct mwMsgHandshake *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
75 guint16_put(b, msg->major);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
76 guint16_put(b, msg->minor);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
77 guint32_put(b, msg->head.channel);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
78 guint32_put(b, msg->srvrcalc_addr);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
79 guint16_put(b, msg->login_type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
80 guint32_put(b, msg->loclcalc_addr);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
81
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
82 if(msg->major >= 0x001e && msg->minor >= 0x001d) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
83 guint16_put(b, msg->unknown_a);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
84 guint32_put(b, msg->unknown_b);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
85 mwString_put(b, msg->local_host);
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 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
88
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
89
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
90 static void HANDSHAKE_get(struct mwGetBuffer *b, struct mwMsgHandshake *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
91 if(mwGetBuffer_error(b)) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
92
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
93 guint16_get(b, &msg->major);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
94 guint16_get(b, &msg->minor);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
95 guint32_get(b, &msg->head.channel);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
96 guint32_get(b, &msg->srvrcalc_addr);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
97 guint16_get(b, &msg->login_type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
98 guint32_get(b, &msg->loclcalc_addr);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
99
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
100 if(msg->major >= 0x001e && msg->minor >= 0x001d) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
101 guint16_get(b, &msg->unknown_a);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
102 guint32_get(b, &msg->unknown_b);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
103 mwString_get(b, &msg->local_host);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
104 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
105 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
106
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 static void HANDSHAKE_clear(struct mwMsgHandshake *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
109 ; /* nothing to clean up */
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
112
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
113 /* 8.4.1.2 HandshakeAck */
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
116 static void HANDSHAKE_ACK_get(struct mwGetBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
117 struct mwMsgHandshakeAck *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
118
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
119 if(mwGetBuffer_error(b)) return;
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 guint16_get(b, &msg->major);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
122 guint16_get(b, &msg->minor);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
123 guint32_get(b, &msg->srvrcalc_addr);
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 /** @todo: get a better handle on what versions support what parts
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
126 of this message. eg: minor version 0x0018 doesn't send the
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
127 following */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
128 if(msg->major >= 0x1e && msg->minor > 0x18) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
129 guint32_get(b, &msg->magic);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
130 mwOpaque_get(b, &msg->data);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
131 }
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
134
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
135 static void HANDSHAKE_ACK_put(struct mwPutBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
136 struct mwMsgHandshakeAck *msg) {
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 guint16_put(b, msg->major);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
139 guint16_put(b, msg->minor);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
140 guint32_put(b, msg->srvrcalc_addr);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
141
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
142 if(msg->major >= 0x1e && msg->minor > 0x18) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
143 guint32_put(b, msg->magic);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
144 mwOpaque_put(b, &msg->data);
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
148
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
149 static void HANDSHAKE_ACK_clear(struct mwMsgHandshakeAck *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
150 mwOpaque_clear(&msg->data);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
151 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
152
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 /* 8.4.1.3 Login */
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 static void LOGIN_put(struct mwPutBuffer *b, struct mwMsgLogin *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
158 guint16_put(b, msg->login_type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
159 mwString_put(b, msg->name);
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 /* ordering reversed from houri draft?? */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
162 mwOpaque_put(b, &msg->auth_data);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
163 guint16_put(b, msg->auth_type);
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 guint16_put(b, 0x0000); /* unknown */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
166 }
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 static void LOGIN_get(struct mwGetBuffer *b, struct mwMsgLogin *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
170 if(mwGetBuffer_error(b)) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
171
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
172 guint16_get(b, &msg->login_type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
173 mwString_get(b, &msg->name);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
174 mwOpaque_get(b, &msg->auth_data);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
175 guint16_get(b, &msg->auth_type);
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
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 static void LOGIN_clear(struct mwMsgLogin *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
180 g_free(msg->name); msg->name = NULL;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
181 mwOpaque_clear(&msg->auth_data);
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
184
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
185 /* 8.4.1.4 LoginAck */
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
188 static void LOGIN_ACK_get(struct mwGetBuffer *b, struct mwMsgLoginAck *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
189 guint16 junk;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
190
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
191 if(mwGetBuffer_error(b)) return;
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 mwLoginInfo_get(b, &msg->login);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
194 guint16_get(b, &junk);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
195 mwPrivacyInfo_get(b, &msg->privacy);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
196 mwUserStatus_get(b, &msg->status);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
197 }
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 static void LOGIN_ACK_clear(struct mwMsgLoginAck *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
201 mwLoginInfo_clear(&msg->login);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
202 mwPrivacyInfo_clear(&msg->privacy);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
203 mwUserStatus_clear(&msg->status);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
204 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
205
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 /* 8.4.1.5 LoginCont */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
208
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 static void LOGIN_CONTINUE_put(struct mwPutBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
211 struct mwMsgLoginContinue *msg) {
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 ; /* nothing but a message header */
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 static void LOGIN_CONTINUE_get(struct mwGetBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
218 struct mwMsgLoginContinue *msg) {
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 ; /* nothing but a message header */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
221 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
222
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 static void LOGIN_CONTINUE_clear(struct mwMsgLoginContinue *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
225 ; /* this is a very simple message */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
226 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
227
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
228
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
229 /* 8.4.1.6 AuthPassed */
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 static void LOGIN_REDIRECT_get(struct mwGetBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
233 struct mwMsgLoginRedirect *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
234
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
235 if(mwGetBuffer_error(b)) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
236 mwString_get(b, &msg->host);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
237 mwString_get(b, &msg->server_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
238 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
239
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
240
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
241 static void LOGIN_REDIRECT_put(struct mwPutBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
242 struct mwMsgLoginRedirect *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
243 mwString_put(b, msg->host);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
244 mwString_put(b, msg->server_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
245 }
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 static void LOGIN_REDIRECT_clear(struct mwMsgLoginRedirect *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
249 g_free(msg->host);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
250 msg->host = NULL;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
251
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
252 g_free(msg->server_id);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
253 msg->server_id = NULL;
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 /* 8.4.1.7 CreateCnl */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
258
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 static void enc_offer_put(struct mwPutBuffer *b, struct mwEncryptOffer *enc) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
261 guint16_put(b, enc->mode);
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 if(enc->items) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
264 guint32 count;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
265 struct mwPutBuffer *p;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
266 struct mwOpaque o;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
267 GList *list;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
268
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
269 /* write the count, items, extra, and flag into a tmp buffer,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
270 render that buffer into an opaque, and write it into b */
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 count = g_list_length(enc->items);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
273 p = mwPutBuffer_new();
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 guint32_put(p, count);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
276 for(list = enc->items; list; list = list->next) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
277 mwEncryptItem_put(p, list->data);
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
280 guint16_put(p, enc->extra);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
281 gboolean_put(p, enc->flag);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
282
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
283 mwPutBuffer_finalize(&o, p);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
284 mwOpaque_put(b, &o);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
285 mwOpaque_clear(&o);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
286 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
287 }
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 static void CHANNEL_CREATE_put(struct mwPutBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
291 struct mwMsgChannelCreate *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
292
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
293 guint32_put(b, msg->reserved);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
294 guint32_put(b, msg->channel);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
295 mwIdBlock_put(b, &msg->target);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
296 guint32_put(b, msg->service);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
297 guint32_put(b, msg->proto_type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
298 guint32_put(b, msg->proto_ver);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
299 guint32_put(b, msg->options);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
300 mwOpaque_put(b, &msg->addtl);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
301 gboolean_put(b, msg->creator_flag);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
302
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
303 if(msg->creator_flag)
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
304 mwLoginInfo_put(b, &msg->creator);
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 enc_offer_put(b, &msg->encrypt);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
307
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
308 guint32_put(b, 0x00);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
309 guint32_put(b, 0x00);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
310 guint16_put(b, 0x07);
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
314 static void enc_offer_get(struct mwGetBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
315 struct mwEncryptOffer *enc) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
316 guint32 skip;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
317
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
318 if(mwGetBuffer_error(b)) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
319
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
320 guint16_get(b, &enc->mode);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
321 guint32_get(b, &skip);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
322
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
323 if(skip >= 7) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
324 guint32 count;
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 guint32_get(b, &count);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
327
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
328 while(count-- && (! mwGetBuffer_error(b))) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
329 struct mwEncryptItem *ei = g_new0(struct mwEncryptItem, 1);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
330 mwEncryptItem_get(b, ei);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
331 enc->items = g_list_append(enc->items, ei);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
332 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
333
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
334 guint16_get(b, &enc->extra);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
335 gboolean_get(b, &enc->flag);
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
339
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
340 static void CHANNEL_CREATE_get(struct mwGetBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
341 struct mwMsgChannelCreate *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
342
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
343 if(mwGetBuffer_error(b)) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
344
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
345 guint32_get(b, &msg->reserved);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
346 guint32_get(b, &msg->channel);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
347 mwIdBlock_get(b, &msg->target);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
348 guint32_get(b, &msg->service);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
349 guint32_get(b, &msg->proto_type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
350 guint32_get(b, &msg->proto_ver);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
351 guint32_get(b, &msg->options);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
352 mwOpaque_get(b, &msg->addtl);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
353 gboolean_get(b, &msg->creator_flag);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
354
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
355 if(msg->creator_flag)
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
356 mwLoginInfo_get(b, &msg->creator);
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 enc_offer_get(b, &msg->encrypt);
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
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 static void CHANNEL_CREATE_clear(struct mwMsgChannelCreate *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
363 GList *list;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
364
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
365 mwIdBlock_clear(&msg->target);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
366 mwOpaque_clear(&msg->addtl);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
367 mwLoginInfo_clear(&msg->creator);
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 for(list = msg->encrypt.items; list; list = list->next) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
370 mwEncryptItem_clear(list->data);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
371 g_free(list->data);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
372 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
373 g_list_free(msg->encrypt.items);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
374 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
375
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 /* 8.4.1.8 AcceptCnl */
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
380 static void enc_accept_put(struct mwPutBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
381 struct mwEncryptAccept *enc) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
382
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
383 guint16_put(b, enc->mode);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
384
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
385 if(enc->item) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
386 struct mwPutBuffer *p;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
387 struct mwOpaque o;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
388
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
389 p = mwPutBuffer_new();
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 mwEncryptItem_put(p, enc->item);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
392 guint16_put(p, enc->extra);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
393 gboolean_put(p, enc->flag);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
394
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
395 mwPutBuffer_finalize(&o, p);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
396 mwOpaque_put(b, &o);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
397 mwOpaque_clear(&o);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
398 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
399 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
400
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 static void CHANNEL_ACCEPT_put(struct mwPutBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
403 struct mwMsgChannelAccept *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
404
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
405 guint32_put(b, msg->service);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
406 guint32_put(b, msg->proto_type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
407 guint32_put(b, msg->proto_ver);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
408 mwOpaque_put(b, &msg->addtl);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
409 gboolean_put(b, msg->acceptor_flag);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
410
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
411 if(msg->acceptor_flag)
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
412 mwLoginInfo_put(b, &msg->acceptor);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
413
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
414 enc_accept_put(b, &msg->encrypt);
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 guint32_put(b, 0x00);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
417 guint32_put(b, 0x00);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
418 guint16_put(b, 0x07);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
419 }
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
422 static void enc_accept_get(struct mwGetBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
423 struct mwEncryptAccept *enc) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
424 guint32 skip;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
425
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
426 if(mwGetBuffer_error(b)) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
427
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
428 guint16_get(b, &enc->mode);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
429 guint32_get(b, &skip);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
430
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
431 if(skip >= 6) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
432 enc->item = g_new0(struct mwEncryptItem, 1);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
433 mwEncryptItem_get(b, enc->item);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
434 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
435
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
436 if(skip >= 9) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
437 guint16_get(b, &enc->extra);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
438 gboolean_get(b, &enc->flag);
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
442
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
443 static void CHANNEL_ACCEPT_get(struct mwGetBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
444 struct mwMsgChannelAccept *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
445
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
446 if(mwGetBuffer_error(b)) return;
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 guint32_get(b, &msg->service);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
449 guint32_get(b, &msg->proto_type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
450 guint32_get(b, &msg->proto_ver);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
451 mwOpaque_get(b, &msg->addtl);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
452 gboolean_get(b, &msg->acceptor_flag);
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 if(msg->acceptor_flag)
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
455 mwLoginInfo_get(b, &msg->acceptor);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
456
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
457 enc_accept_get(b, &msg->encrypt);
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
460
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
461 static void CHANNEL_ACCEPT_clear(struct mwMsgChannelAccept *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
462 mwOpaque_clear(&msg->addtl);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
463 mwLoginInfo_clear(&msg->acceptor);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
464
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
465 if(msg->encrypt.item) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
466 mwEncryptItem_clear(msg->encrypt.item);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
467 g_free(msg->encrypt.item);
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
471
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
472 /* 8.4.1.9 SendOnCnl */
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
475 static void CHANNEL_SEND_put(struct mwPutBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
476 struct mwMsgChannelSend *msg) {
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 guint16_put(b, msg->type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
479 mwOpaque_put(b, &msg->data);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
480 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
481
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
482
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
483 static void CHANNEL_SEND_get(struct mwGetBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
484 struct mwMsgChannelSend *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
485
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
486 if(mwGetBuffer_error(b)) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
487
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
488 guint16_get(b, &msg->type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
489 mwOpaque_get(b, &msg->data);
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 static void CHANNEL_SEND_clear(struct mwMsgChannelSend *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
494 mwOpaque_clear(&msg->data);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
495 }
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
498 /* 8.4.1.10 DestroyCnl */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
499
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
500
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
501 static void CHANNEL_DESTROY_put(struct mwPutBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
502 struct mwMsgChannelDestroy *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
503 guint32_put(b, msg->reason);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
504 mwOpaque_put(b, &msg->data);
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
507
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
508 static void CHANNEL_DESTROY_get(struct mwGetBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
509 struct mwMsgChannelDestroy *msg) {
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 if(mwGetBuffer_error(b)) return;
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 guint32_get(b, &msg->reason);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
514 mwOpaque_get(b, &msg->data);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
515 }
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
518 static void CHANNEL_DESTROY_clear(struct mwMsgChannelDestroy *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
519 mwOpaque_clear(&msg->data);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
520 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
521
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
522
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
523 /* 8.4.1.11 SetUserStatus */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
524
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 static void SET_USER_STATUS_put(struct mwPutBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
527 struct mwMsgSetUserStatus *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
528 mwUserStatus_put(b, &msg->status);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
529 }
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
532 static void SET_USER_STATUS_get(struct mwGetBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
533 struct mwMsgSetUserStatus *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
534
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
535 if(mwGetBuffer_error(b)) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
536 mwUserStatus_get(b, &msg->status);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
537 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
538
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 static void SET_USER_STATUS_clear(struct mwMsgSetUserStatus *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
541 mwUserStatus_clear(&msg->status);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
542 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
543
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 /* 8.4.1.12 SetPrivacyList */
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 static void SET_PRIVACY_LIST_put(struct mwPutBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
549 struct mwMsgSetPrivacyList *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
550 mwPrivacyInfo_put(b, &msg->privacy);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
551 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
552
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
553
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
554 static void SET_PRIVACY_LIST_get(struct mwGetBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
555 struct mwMsgSetPrivacyList *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
556
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
557 if(mwGetBuffer_error(b)) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
558 mwPrivacyInfo_get(b, &msg->privacy);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
559 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
560
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 static void SET_PRIVACY_LIST_clear(struct mwMsgSetPrivacyList *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
563 mwPrivacyInfo_clear(&msg->privacy);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
564 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
565
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
566
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
567 /* Sense Service messages */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
568
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 static void SENSE_SERVICE_put(struct mwPutBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
571 struct mwMsgSenseService *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
572 guint32_put(b, msg->service);
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
575
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
576 static void SENSE_SERVICE_get(struct mwGetBuffer *b,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
577 struct mwMsgSenseService *msg) {
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 if(mwGetBuffer_error(b)) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
580 guint32_get(b, &msg->service);
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
583
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
584 static void SENSE_SERVICE_clear(struct mwMsgSenseService *msg) {
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 }
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 /* Admin messages */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
590
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
591
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
592 static void ADMIN_get(struct mwGetBuffer *b, struct mwMsgAdmin *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
593 mwString_get(b, &msg->text);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
594 }
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
597 static void ADMIN_clear(struct mwMsgAdmin *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
598 g_free(msg->text);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
599 msg->text = 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 /* Announcement messages */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
604
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
605
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
606 static void ANNOUNCE_get(struct mwGetBuffer *b, struct mwMsgAnnounce *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
607 struct mwOpaque o = { 0, 0 };
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
608 struct mwGetBuffer *gb;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
609 guint32 count;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
610
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
611 gboolean_get(b, &msg->sender_present);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
612 if(msg->sender_present)
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
613 mwLoginInfo_get(b, &msg->sender);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
614 guint16_get(b, &msg->unknown_a);
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 mwOpaque_get(b, &o);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
617 gb = mwGetBuffer_wrap(&o);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
618
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
619 gboolean_get(gb, &msg->may_reply);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
620 mwString_get(gb, &msg->text);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
621
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
622 mwGetBuffer_free(gb);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
623 mwOpaque_clear(&o);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
624
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
625 guint32_get(b, &count);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
626 while(count--) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
627 char *r = NULL;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
628 mwString_get(b, &r);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
629 msg->recipients = g_list_prepend(msg->recipients, r);
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 static void ANNOUNCE_put(struct mwPutBuffer *b, struct mwMsgAnnounce *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
635 struct mwOpaque o = { 0, 0 };
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
636 struct mwPutBuffer *pb;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
637 GList *l;
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 gboolean_put(b, msg->sender_present);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
640 if(msg->sender_present)
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
641 mwLoginInfo_put(b, &msg->sender);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
642 guint16_put(b, msg->unknown_a);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
643
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
644 pb = mwPutBuffer_new();
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
645
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
646 gboolean_put(pb, msg->may_reply);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
647 mwString_put(pb, msg->text);
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 mwPutBuffer_finalize(&o, pb);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
650 mwOpaque_put(b, &o);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
651 mwOpaque_clear(&o);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
652
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
653 guint32_put(b, g_list_length(msg->recipients));
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
654 for(l = msg->recipients; l; l = l->next) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
655 mwString_put(b, l->data);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
656 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
657 }
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
660 static void ANNOUNCE_clear(struct mwMsgAnnounce *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
661 mwLoginInfo_clear(&msg->sender);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
662
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
663 g_free(msg->text);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
664 msg->text = NULL;
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 while(msg->recipients) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
667 g_free(msg->recipients->data);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
668 msg->recipients = g_list_delete_link(msg->recipients, msg->recipients);
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 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
671
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 /* general functions */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
674
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 #define CASE(v, t) \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
677 case mwMessage_ ## v: \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
678 msg = (struct mwMessage *) g_new0(struct t, 1); \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
679 msg->type = type; \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
680 break;
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
683 struct mwMessage *mwMessage_new(enum mwMessageType type) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
684 struct mwMessage *msg = 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 switch(type) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
687 CASE(HANDSHAKE, mwMsgHandshake);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
688 CASE(HANDSHAKE_ACK, mwMsgHandshakeAck);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
689 CASE(LOGIN, mwMsgLogin);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
690 CASE(LOGIN_REDIRECT, mwMsgLoginRedirect);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
691 CASE(LOGIN_CONTINUE, mwMsgLoginContinue);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
692 CASE(LOGIN_ACK, mwMsgLoginAck);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
693 CASE(CHANNEL_CREATE, mwMsgChannelCreate);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
694 CASE(CHANNEL_DESTROY, mwMsgChannelDestroy);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
695 CASE(CHANNEL_SEND, mwMsgChannelSend);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
696 CASE(CHANNEL_ACCEPT, mwMsgChannelAccept);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
697 CASE(SET_USER_STATUS, mwMsgSetUserStatus);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
698 CASE(SET_PRIVACY_LIST, mwMsgSetPrivacyList);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
699 CASE(SENSE_SERVICE, mwMsgSenseService);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
700 CASE(ADMIN, mwMsgAdmin);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
701 CASE(ANNOUNCE, mwMsgAnnounce);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
702
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
703 default:
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
704 g_warning("unknown message type 0x%02x\n", type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
705 }
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 return msg;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
708 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
709
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 #undef CASE
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
714 /* each type needs to be passed to a specially named _get functions,
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
715 and cast to a specific subclass of mwMessage. */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
716 #define CASE(v, t) \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
717 case mwMessage_ ## v: \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
718 msg = (struct mwMessage *) g_new0(struct t, 1); \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
719 mwMessageHead_clone(msg, &head); \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
720 v ## _get(b, (struct t *) msg); \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
721 break;
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 struct mwMessage *mwMessage_get(struct mwGetBuffer *b) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
725 struct mwMessage *msg = NULL;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
726 struct mwMessage head;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
727
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
728 g_return_val_if_fail(b != NULL, NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
729
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
730 head.attribs.len = 0;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
731 head.attribs.data = NULL;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
732
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
733 /* attempt to read the header first */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
734 mwMessageHead_get(b, &head);
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 if(mwGetBuffer_error(b)) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
737 mwMessageHead_clear(&head);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
738 g_warning("problem parsing message head from buffer");
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
739 return NULL;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
740 }
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 /* load the rest of the message depending on the header type */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
743 switch(head.type) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
744 CASE(HANDSHAKE, mwMsgHandshake);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
745 CASE(HANDSHAKE_ACK, mwMsgHandshakeAck);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
746 CASE(LOGIN, mwMsgLogin);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
747 CASE(LOGIN_REDIRECT, mwMsgLoginRedirect);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
748 CASE(LOGIN_CONTINUE, mwMsgLoginContinue);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
749 CASE(LOGIN_ACK, mwMsgLoginAck);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
750 CASE(CHANNEL_CREATE, mwMsgChannelCreate);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
751 CASE(CHANNEL_DESTROY, mwMsgChannelDestroy);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
752 CASE(CHANNEL_SEND, mwMsgChannelSend);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
753 CASE(CHANNEL_ACCEPT, mwMsgChannelAccept);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
754 CASE(SET_USER_STATUS, mwMsgSetUserStatus);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
755 CASE(SET_PRIVACY_LIST, mwMsgSetPrivacyList);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
756 CASE(SENSE_SERVICE, mwMsgSenseService);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
757 CASE(ADMIN, mwMsgAdmin);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
758 CASE(ANNOUNCE, mwMsgAnnounce);
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 default:
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
761 g_warning("unknown message type 0x%02x, no parse handler", head.type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
762 }
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 if(mwGetBuffer_error(b)) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
765 g_warning("problem parsing message type 0x%02x, not enough data",
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
766 head.type);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
767 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
768
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
769 mwMessageHead_clear(&head);
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 return msg;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
772 }
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
775 #undef CASE
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
776
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
777
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
778 #define CASE(v, t) \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
779 case mwMessage_ ## v: \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
780 v ## _put(b, (struct t *) msg); \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
781 break;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
782
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
783
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
784 void mwMessage_put(struct mwPutBuffer *b, struct mwMessage *msg) {
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 g_return_if_fail(b != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
787 g_return_if_fail(msg != NULL);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
788
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
789 mwMessageHead_put(b, msg);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
790
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
791 switch(msg->type) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
792 CASE(HANDSHAKE, mwMsgHandshake);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
793 CASE(HANDSHAKE_ACK, mwMsgHandshakeAck);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
794 CASE(LOGIN, mwMsgLogin);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
795 CASE(LOGIN_REDIRECT, mwMsgLoginRedirect);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
796 CASE(LOGIN_CONTINUE, mwMsgLoginContinue);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
797 CASE(CHANNEL_CREATE, mwMsgChannelCreate);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
798 CASE(CHANNEL_DESTROY, mwMsgChannelDestroy);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
799 CASE(CHANNEL_SEND, mwMsgChannelSend);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
800 CASE(CHANNEL_ACCEPT, mwMsgChannelAccept);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
801 CASE(SET_USER_STATUS, mwMsgSetUserStatus);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
802 CASE(SET_PRIVACY_LIST, mwMsgSetPrivacyList);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
803 CASE(SENSE_SERVICE, mwMsgSenseService);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
804 CASE(ANNOUNCE, mwMsgAnnounce);
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 default:
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
807 ; /* hrm. */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
808 }
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 #undef CASE
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 #define CASE(v, t) \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
816 case mwMessage_ ## v: \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
817 v ## _clear((struct t *) msg); \
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
818 break;
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
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
821 void mwMessage_free(struct mwMessage *msg) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
822 if(! msg) return;
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
823
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
824 mwMessageHead_clear(msg);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
825
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
826 switch(msg->type) {
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
827 CASE(HANDSHAKE, mwMsgHandshake);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
828 CASE(HANDSHAKE_ACK, mwMsgHandshakeAck);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
829 CASE(LOGIN, mwMsgLogin);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
830 CASE(LOGIN_REDIRECT, mwMsgLoginRedirect);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
831 CASE(LOGIN_CONTINUE, mwMsgLoginContinue);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
832 CASE(LOGIN_ACK, mwMsgLoginAck);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
833 CASE(CHANNEL_CREATE, mwMsgChannelCreate);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
834 CASE(CHANNEL_DESTROY, mwMsgChannelDestroy);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
835 CASE(CHANNEL_SEND, mwMsgChannelSend);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
836 CASE(CHANNEL_ACCEPT, mwMsgChannelAccept);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
837 CASE(SET_USER_STATUS, mwMsgSetUserStatus);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
838 CASE(SET_PRIVACY_LIST, mwMsgSetPrivacyList);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
839 CASE(SENSE_SERVICE, mwMsgSenseService);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
840 CASE(ADMIN, mwMsgAdmin);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
841 CASE(ANNOUNCE, mwMsgAnnounce);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
842
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
843 default:
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
844 ; /* hrm. */
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
845 }
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 g_free(msg);
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
848 }
39a4efae983c [gaim-migrate @ 15309]
Ethan Blanton <elb@pidgin.im>
parents:
diff changeset
849
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 #undef CASE
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

mercurial