annotate src/protocols/msn/msg.c @ 8808:bbd8cdaf0ad5

[gaim-migrate @ 9570] A massive patch by shx to reorganize MSN some more and add command processor support. This allows us to do cool things like produce more detailed error messages. For example, the Invalid Username dialog now shows the username of the invalid user. I modified the aforementioned dialog so it'll look a little nicer looking, and also mention the account this happened on. It also removes the user from your blist, as there's no point to keeping the user on there. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Sun, 25 Apr 2004 22:02:06 +0000
parents d16e1bfaf08a
children 9e5a709c30a8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4542
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1 /**
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2 * @file msg.c Message functions
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
3 *
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
4 * gaim
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
5 *
8475
06f57183e29f [gaim-migrate @ 9208]
Christian Hammond <chipx86@chipx86.com>
parents: 7846
diff changeset
6 * Copyright (C) 2003-2004 Christian Hammond <chipx86@gnupdate.org>
6701
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
7 *
4542
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
8 * This program is free software; you can redistribute it and/or modify
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
9 * it under the terms of the GNU General Public License as published by
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
10 * the Free Software Foundation; either version 2 of the License, or
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 * (at your option) any later version.
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 *
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 * This program is distributed in the hope that it will be useful,
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 * GNU General Public License for more details.
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 *
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 * You should have received a copy of the GNU General Public License
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 * along with this program; if not, write to the Free Software
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21 */
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
22 #include "msn.h"
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
23 #include "msg.h"
4542
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
24
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
25 #define GET_NEXT(tmp) \
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
26 while (*(tmp) && *(tmp) != ' ' && *(tmp) != '\r') \
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
27 (tmp)++; \
5315
b1c430fbf9d5 [gaim-migrate @ 5687]
Christian Hammond <chipx86@chipx86.com>
parents: 5310
diff changeset
28 if (*(tmp) != '\0') *(tmp)++ = '\0'; \
6075
f7ddc1f6227e [gaim-migrate @ 6534]
Christian Hammond <chipx86@chipx86.com>
parents: 6011
diff changeset
29 if (*(tmp) == '\n') (tmp)++; \
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
30 while (*(tmp) && *(tmp) == ' ') \
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
31 (tmp)++
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
32
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
33 #define GET_NEXT_LINE(tmp) \
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
34 while (*(tmp) && *(tmp) != '\r') \
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
35 (tmp)++; \
5315
b1c430fbf9d5 [gaim-migrate @ 5687]
Christian Hammond <chipx86@chipx86.com>
parents: 5310
diff changeset
36 if (*(tmp) != '\0') *(tmp)++ = '\0'; \
6075
f7ddc1f6227e [gaim-migrate @ 6534]
Christian Hammond <chipx86@chipx86.com>
parents: 6011
diff changeset
37 if (*(tmp) == '\n') (tmp)++
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
38
6827
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
39
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
40 #define msn_put16(buf, data) ( \
7475
08ce2a94d9c7 [gaim-migrate @ 8088]
Mark Doliner <mark@kingant.net>
parents: 7386
diff changeset
41 (*(buf) = (unsigned char)((data)>>8)&0xff), \
08ce2a94d9c7 [gaim-migrate @ 8088]
Mark Doliner <mark@kingant.net>
parents: 7386
diff changeset
42 (*((buf)+1) = (unsigned char)(data)&0xff), \
6827
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
43 2)
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
44 #define msn_get16(buf) ((((*(buf))<<8)&0xff00) + ((*((buf)+1)) & 0xff))
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
45 #define msn_put32(buf, data) ( \
7475
08ce2a94d9c7 [gaim-migrate @ 8088]
Mark Doliner <mark@kingant.net>
parents: 7386
diff changeset
46 (*((buf)) = (unsigned char)((data)>>24)&0xff), \
08ce2a94d9c7 [gaim-migrate @ 8088]
Mark Doliner <mark@kingant.net>
parents: 7386
diff changeset
47 (*((buf)+1) = (unsigned char)((data)>>16)&0xff), \
08ce2a94d9c7 [gaim-migrate @ 8088]
Mark Doliner <mark@kingant.net>
parents: 7386
diff changeset
48 (*((buf)+2) = (unsigned char)((data)>>8)&0xff), \
08ce2a94d9c7 [gaim-migrate @ 8088]
Mark Doliner <mark@kingant.net>
parents: 7386
diff changeset
49 (*((buf)+3) = (unsigned char)(data)&0xff), \
6827
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
50 4)
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
51 #define msn_get32(buf) ((((*(buf))<<24)&0xff000000) + \
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
52 (((*((buf)+1))<<16)&0x00ff0000) + \
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
53 (((*((buf)+2))<< 8)&0x0000ff00) + \
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
54 (((*((buf)+3) )&0x000000ff)))
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
55
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
56
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
57 /*
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
58 * "MIME-Version: 1.0\r\n" == 19
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
59 * "Content-Type: " == 14
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
60 * "\r\n" == 2
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
61 * "\r\n" before body == 2
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
62 * ----
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
63 * 37
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
64 * MATH PAYS OFF!!
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
65 */
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
66 #define MSN_MESSAGE_BASE_SIZE 37
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
67
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
68 MsnMessage *
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
69 msn_message_new(void)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
70 {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
71 MsnMessage *msg;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
72
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
73 msg = g_new0(MsnMessage, 1);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
74
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
75 msg->attr_table = g_hash_table_new_full(g_str_hash, g_str_equal,
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
76 g_free, g_free);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
77 msg->size = MSN_MESSAGE_BASE_SIZE;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
78
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
79 msn_message_set_attr(msg, "User-Agent", "Gaim/" VERSION);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
80 msn_message_set_content_type(msg, "text/plain");
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
81 msn_message_set_charset(msg, "UTF-8");
6958
4c29ee932d67 [gaim-migrate @ 7505]
Christian Hammond <chipx86@chipx86.com>
parents: 6868
diff changeset
82 msn_message_set_flag(msg, 'U');
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
83
5506
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
84 msn_message_ref(msg);
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
85
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
86 return msg;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
87 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
88
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
89 MsnMessage *
6800
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
90 msn_message_new_msnslp(void)
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
91 {
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
92 MsnMessage *msg;
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
93
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
94 msg = msn_message_new();
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
95
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
96 msn_message_set_attr(msg, "User-Agent", NULL);
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
97
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
98 msg->msnslp_message = TRUE;
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
99 msg->size += 52;
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
100
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
101 msn_message_set_flag(msg, 'D');
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
102 msn_message_set_content_type(msg, "application/x-msnmsgrp2p");
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
103 msn_message_set_charset(msg, NULL);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
104
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
105 return msg;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
106 }
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
107
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
108 MsnMessage *
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
109 msn_message_new_msnslp_ack(MsnMessage *acked_msg)
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
110 {
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
111 MsnMessage *msg;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
112
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
113 g_return_val_if_fail(acked_msg != NULL, NULL);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
114 g_return_val_if_fail(acked_msg->msnslp_message, NULL);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
115
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
116 msg = msn_message_new_msnslp();
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
117
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
118 msg->msnslp_ack_message = TRUE;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
119 msg->acked_msg = msn_message_ref(acked_msg);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
120
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
121 msg->msnslp_header.session_id = acked_msg->msnslp_header.session_id;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
122 msg->msnslp_header.total_size_1 = acked_msg->msnslp_header.total_size_1;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
123 msg->msnslp_header.total_size_2 = acked_msg->msnslp_header.total_size_2;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
124 msg->msnslp_header.flags = 0x02;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
125 msg->msnslp_header.ack_session_id = acked_msg->msnslp_header.session_id;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
126 msg->msnslp_header.ack_unique_id = acked_msg->msnslp_header.ack_session_id;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
127 msg->msnslp_header.ack_length_1 = acked_msg->msnslp_header.total_size_1;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
128 msg->msnslp_header.ack_length_2 = acked_msg->msnslp_header.total_size_2;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
129
6800
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
130 return msg;
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
131 }
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
132
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
133 void
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
134 msn_message_parse_payload(MsnMessage *msg, const char *payload,
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
135 size_t payload_len)
4542
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
136 {
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
137 char *tmp_base, *tmp, *c;
7845
59f9508c9a31 [gaim-migrate @ 8499]
Christian Hammond <chipx86@chipx86.com>
parents: 7604
diff changeset
138 const char *content_type;
5454
c6efac0e28ff [gaim-migrate @ 5842]
Christian Hammond <chipx86@chipx86.com>
parents: 5315
diff changeset
139
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
140 tmp_base = g_malloc(payload_len + 1);
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
141 memcpy(tmp_base, payload, payload_len);
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
142 tmp_base[payload_len] = '\0';
7604
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
143
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
144 tmp = tmp_base;
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
145
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
146 /* Back to the parsination. */
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
147 while (*tmp != '\r')
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
148 {
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
149 char *key, *value;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
150
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
151 key = tmp;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
152
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
153 GET_NEXT(tmp); /* Key */
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
154
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
155 value = tmp;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
156
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
157 GET_NEXT_LINE(tmp); /* Value */
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
158
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
159 if ((c = strchr(key, ':')) != NULL)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
160 *c = '\0';
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
161
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
162 if (!g_ascii_strcasecmp(key, "Content-Type"))
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
163 {
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
164 char *charset;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
165
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
166 if ((c = strchr(value, ';')) != NULL)
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
167 {
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
168 if ((charset = strchr(c, '=')) != NULL)
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
169 {
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
170 charset++;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
171 msn_message_set_charset(msg, charset);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
172 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
173
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
174 *c = '\0';
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
175 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
176
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
177 msn_message_set_content_type(msg, value);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
178 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
179 else
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
180 msn_message_set_attr(msg, key, value);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
181 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
182
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
183 /* "\r\n" */
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
184 tmp += 2;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
185
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
186 /* Now we *should* be at the body. */
7845
59f9508c9a31 [gaim-migrate @ 8499]
Christian Hammond <chipx86@chipx86.com>
parents: 7604
diff changeset
187 content_type = msn_message_get_content_type(msg);
59f9508c9a31 [gaim-migrate @ 8499]
Christian Hammond <chipx86@chipx86.com>
parents: 7604
diff changeset
188
59f9508c9a31 [gaim-migrate @ 8499]
Christian Hammond <chipx86@chipx86.com>
parents: 7604
diff changeset
189 if (content_type != NULL &&
59f9508c9a31 [gaim-migrate @ 8499]
Christian Hammond <chipx86@chipx86.com>
parents: 7604
diff changeset
190 !strcmp(content_type, "application/x-msnmsgrp2p"))
6701
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
191 {
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
192 char header[48];
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
193 char footer[4];
7592
582f764b26f6 [gaim-migrate @ 8210]
Christian Hammond <chipx86@chipx86.com>
parents: 7590
diff changeset
194 size_t body_len;
7604
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
195 char *tmp2;
6701
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
196
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
197 msg->msnslp_message = TRUE;
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
198
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
199 memcpy(header, tmp, 48);
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
200
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
201 tmp += 48;
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
202
8647
d16e1bfaf08a [gaim-migrate @ 9399]
Christian Hammond <chipx86@chipx86.com>
parents: 8646
diff changeset
203 body_len = payload_len - (tmp - tmp_base) - 4;
7592
582f764b26f6 [gaim-migrate @ 8210]
Christian Hammond <chipx86@chipx86.com>
parents: 7590
diff changeset
204
582f764b26f6 [gaim-migrate @ 8210]
Christian Hammond <chipx86@chipx86.com>
parents: 7590
diff changeset
205 if (body_len > 0)
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
206 {
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
207 msg->body = g_malloc(body_len + 1);
7592
582f764b26f6 [gaim-migrate @ 8210]
Christian Hammond <chipx86@chipx86.com>
parents: 7590
diff changeset
208 memcpy(msg->body, tmp, body_len);
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
209 msg->body[body_len] = '\0';
7592
582f764b26f6 [gaim-migrate @ 8210]
Christian Hammond <chipx86@chipx86.com>
parents: 7590
diff changeset
210
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
211 tmp++;
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
212 }
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
213 else
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
214 msg->body = NULL;
6701
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
215
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
216 memcpy(footer, tmp, 4);
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
217
7604
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
218 tmp += 4;
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
219
6701
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
220 /* Import the header. */
7604
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
221 tmp2 = header;
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
222 msg->msnslp_header.session_id = msn_get32(tmp2); tmp2 += 4;
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
223 msg->msnslp_header.id = msn_get32(tmp2); tmp2 += 4;
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
224 msg->msnslp_header.offset_1 = msn_get32(tmp2); tmp2 += 4;
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
225 msg->msnslp_header.offset_2 = msn_get32(tmp2); tmp2 += 4;
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
226 msg->msnslp_header.total_size_1 = msn_get32(tmp2); tmp2 += 4;
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
227 msg->msnslp_header.total_size_2 = msn_get32(tmp2); tmp2 += 4;
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
228 msg->msnslp_header.length = msn_get32(tmp2); tmp2 += 4;
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
229 msg->msnslp_header.flags = msn_get32(tmp2); tmp2 += 4;
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
230 msg->msnslp_header.ack_session_id = msn_get32(tmp2); tmp2 += 4;
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
231 msg->msnslp_header.ack_unique_id = msn_get32(tmp2); tmp2 += 4;
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
232 msg->msnslp_header.ack_length_1 = msn_get32(tmp2); tmp2 += 4;
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
233 msg->msnslp_header.ack_length_2 = msn_get32(tmp2); tmp2 += 4;
6701
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
234
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
235 /* Convert to the right endianness */
6786
8efafdc38718 [gaim-migrate @ 7325]
Christian Hammond <chipx86@chipx86.com>
parents: 6705
diff changeset
236 msg->msnslp_header.session_id = ntohl(msg->msnslp_header.session_id);
8efafdc38718 [gaim-migrate @ 7325]
Christian Hammond <chipx86@chipx86.com>
parents: 6705
diff changeset
237 msg->msnslp_header.id = ntohl(msg->msnslp_header.id);
8efafdc38718 [gaim-migrate @ 7325]
Christian Hammond <chipx86@chipx86.com>
parents: 6705
diff changeset
238 msg->msnslp_header.length = ntohl(msg->msnslp_header.length);
8efafdc38718 [gaim-migrate @ 7325]
Christian Hammond <chipx86@chipx86.com>
parents: 6705
diff changeset
239 msg->msnslp_header.flags = ntohl(msg->msnslp_header.flags);
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
240 msg->msnslp_header.ack_length_1 =
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
241 ntohl(msg->msnslp_header.ack_length_1);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
242 msg->msnslp_header.ack_length_2 =
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
243 ntohl(msg->msnslp_header.ack_length_2);
6786
8efafdc38718 [gaim-migrate @ 7325]
Christian Hammond <chipx86@chipx86.com>
parents: 6705
diff changeset
244 msg->msnslp_header.ack_session_id =
8efafdc38718 [gaim-migrate @ 7325]
Christian Hammond <chipx86@chipx86.com>
parents: 6705
diff changeset
245 ntohl(msg->msnslp_header.ack_session_id);
8efafdc38718 [gaim-migrate @ 7325]
Christian Hammond <chipx86@chipx86.com>
parents: 6705
diff changeset
246 msg->msnslp_header.ack_unique_id =
8efafdc38718 [gaim-migrate @ 7325]
Christian Hammond <chipx86@chipx86.com>
parents: 6705
diff changeset
247 ntohl(msg->msnslp_header.ack_unique_id);
6701
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
248
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
249 /* Import the footer. */
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
250 msg->msnslp_footer.app_id = (long)footer;
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
251 }
6705
cebd49f42b56 [gaim-migrate @ 7231]
Christian Hammond <chipx86@chipx86.com>
parents: 6701
diff changeset
252 else
cebd49f42b56 [gaim-migrate @ 7231]
Christian Hammond <chipx86@chipx86.com>
parents: 6701
diff changeset
253 {
7846
61c07fefe1fc [gaim-migrate @ 8500]
Christian Hammond <chipx86@chipx86.com>
parents: 7845
diff changeset
254 char *tmp2;
61c07fefe1fc [gaim-migrate @ 8500]
Christian Hammond <chipx86@chipx86.com>
parents: 7845
diff changeset
255 size_t body_len;
61c07fefe1fc [gaim-migrate @ 8500]
Christian Hammond <chipx86@chipx86.com>
parents: 7845
diff changeset
256
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
257 body_len = payload_len - (tmp - tmp_base);
7846
61c07fefe1fc [gaim-migrate @ 8500]
Christian Hammond <chipx86@chipx86.com>
parents: 7845
diff changeset
258
61c07fefe1fc [gaim-migrate @ 8500]
Christian Hammond <chipx86@chipx86.com>
parents: 7845
diff changeset
259 tmp2 = g_malloc(body_len + 1);
61c07fefe1fc [gaim-migrate @ 8500]
Christian Hammond <chipx86@chipx86.com>
parents: 7845
diff changeset
260
61c07fefe1fc [gaim-migrate @ 8500]
Christian Hammond <chipx86@chipx86.com>
parents: 7845
diff changeset
261 if (body_len > 0)
61c07fefe1fc [gaim-migrate @ 8500]
Christian Hammond <chipx86@chipx86.com>
parents: 7845
diff changeset
262 memcpy(tmp2, tmp, body_len);
61c07fefe1fc [gaim-migrate @ 8500]
Christian Hammond <chipx86@chipx86.com>
parents: 7845
diff changeset
263
61c07fefe1fc [gaim-migrate @ 8500]
Christian Hammond <chipx86@chipx86.com>
parents: 7845
diff changeset
264 tmp2[body_len] = '\0';
61c07fefe1fc [gaim-migrate @ 8500]
Christian Hammond <chipx86@chipx86.com>
parents: 7845
diff changeset
265
61c07fefe1fc [gaim-migrate @ 8500]
Christian Hammond <chipx86@chipx86.com>
parents: 7845
diff changeset
266 msn_message_set_body(msg, tmp2);
61c07fefe1fc [gaim-migrate @ 8500]
Christian Hammond <chipx86@chipx86.com>
parents: 7845
diff changeset
267
61c07fefe1fc [gaim-migrate @ 8500]
Christian Hammond <chipx86@chipx86.com>
parents: 7845
diff changeset
268 g_free(tmp2);
6705
cebd49f42b56 [gaim-migrate @ 7231]
Christian Hammond <chipx86@chipx86.com>
parents: 6701
diff changeset
269 }
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
270
6011
b8abf266dd3b [gaim-migrate @ 6459]
Christian Hammond <chipx86@chipx86.com>
parents: 5506
diff changeset
271 g_free(tmp_base);
b8abf266dd3b [gaim-migrate @ 6459]
Christian Hammond <chipx86@chipx86.com>
parents: 5506
diff changeset
272
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
273 /* Done! */
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
274 }
4542
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
275
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
276 void
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
277 msn_message_destroy(MsnMessage *msg)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
278 {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
279 g_return_if_fail(msg != NULL);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
280
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
281 if (msg->ref_count > 0)
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
282 {
5506
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
283 msn_message_unref(msg);
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
284
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
285 return;
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
286 }
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
287
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
288 if (msg->body != NULL)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
289 g_free(msg->body);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
290
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
291 if (msg->content_type != NULL)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
292 g_free(msg->content_type);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
293
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
294 if (msg->charset != NULL)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
295 g_free(msg->charset);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
296
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
297 g_hash_table_destroy(msg->attr_table);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
298 g_list_free(msg->attr_list);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
299
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
300 if (msg->msnslp_ack_message)
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
301 msn_message_unref(msg->acked_msg);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
302
5506
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
303 gaim_debug(GAIM_DEBUG_INFO, "msn", "Destroying message\n");
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
304 g_free(msg);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
305 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
306
5506
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
307 MsnMessage *
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
308 msn_message_ref(MsnMessage *msg)
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
309 {
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
310 g_return_val_if_fail(msg != NULL, NULL);
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
311
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
312 msg->ref_count++;
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
313
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
314 return msg;
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
315 }
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
316
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
317 MsnMessage *
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
318 msn_message_unref(MsnMessage *msg)
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
319 {
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
320 g_return_val_if_fail(msg != NULL, NULL);
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
321
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
322 if (msg->ref_count <= 0)
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
323 return NULL;
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
324
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
325 msg->ref_count--;
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
326
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
327 if (msg->ref_count == 0) {
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
328 msn_message_destroy(msg);
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
329
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
330 return NULL;
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
331 }
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
332
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
333 return msg;
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
334 }
4f72b611f0ee [gaim-migrate @ 5905]
Christian Hammond <chipx86@chipx86.com>
parents: 5478
diff changeset
335
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
336 char *
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
337 msn_message_gen_payload(const MsnMessage *msg, size_t *ret_size)
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
338 {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
339 GList *l;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
340 char *str;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
341 char buf[MSN_BUF_LEN];
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
342 int len;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
343
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
344 /*
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
345 * Okay, how we do things here is just bad. I don't like writing to
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
346 * a static buffer and then copying to the string. Unfortunately,
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
347 * just trying to append to the string is causing issues.. Such as
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
348 * the string you're appending to being erased. Ugh. So, this is
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
349 * good enough for now.
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
350 *
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
351 * -- ChipX86
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
352 */
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
353 g_return_val_if_fail(msg != NULL, NULL);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
354
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
355 len = msg->size + 1;
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
356
6826
2adf21e70601 [gaim-migrate @ 7371]
Christian Hammond <chipx86@chipx86.com>
parents: 6800
diff changeset
357 str = g_new0(char, len + 1);
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
358
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
359 /* Standard header. */
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
360 if (msg->charset == NULL)
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
361 {
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
362 g_snprintf(buf, sizeof(buf),
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
363 "MIME-Version: 1.0\r\n"
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
364 "Content-Type: %s\r\n",
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
365 msg->content_type);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
366 }
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
367 else
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
368 {
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
369 g_snprintf(buf, sizeof(buf),
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
370 "MIME-Version: 1.0\r\n"
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
371 "Content-Type: %s; charset=%s\r\n",
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
372 msg->content_type, msg->charset);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
373 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
374
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
375 g_strlcat(str, buf, len);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
376
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
377 for (l = msg->attr_list; l != NULL; l = l->next)
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
378 {
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
379 const char *key = (char *)l->data;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
380 const char *value;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
381
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
382 value = msn_message_get_attr(msg, key);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
383
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
384 g_snprintf(buf, sizeof(buf), "%s: %s\r\n", key, value);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
385
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
386 g_strlcat(str, buf, len);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
387 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
388
6827
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
389 g_strlcat(str, "\r\n", len);
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
390
6701
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
391 if (msg->msnslp_message)
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
392 {
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
393 char *c;
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
394 long session_id, id, offset_1, offset_2, total_size_1, total_size_2;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
395 long length, flags;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
396 long ack_session_id, ack_unique_id, ack_length_1, ack_length_2;
6701
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
397
6827
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
398 c = str + strlen(str);
6800
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
399
6786
8efafdc38718 [gaim-migrate @ 7325]
Christian Hammond <chipx86@chipx86.com>
parents: 6705
diff changeset
400 session_id = htonl(msg->msnslp_header.session_id);
8efafdc38718 [gaim-migrate @ 7325]
Christian Hammond <chipx86@chipx86.com>
parents: 6705
diff changeset
401 id = htonl(msg->msnslp_header.id);
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
402 offset_1 = htonl(msg->msnslp_header.offset_1);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
403 offset_2 = htonl(msg->msnslp_header.offset_2);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
404 total_size_1 = htonl(msg->msnslp_header.total_size_1);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
405 total_size_2 = htonl(msg->msnslp_header.total_size_2);
6786
8efafdc38718 [gaim-migrate @ 7325]
Christian Hammond <chipx86@chipx86.com>
parents: 6705
diff changeset
406 length = htonl(msg->msnslp_header.length);
8efafdc38718 [gaim-migrate @ 7325]
Christian Hammond <chipx86@chipx86.com>
parents: 6705
diff changeset
407 flags = htonl(msg->msnslp_header.flags);
8efafdc38718 [gaim-migrate @ 7325]
Christian Hammond <chipx86@chipx86.com>
parents: 6705
diff changeset
408 ack_session_id = htonl(msg->msnslp_header.ack_session_id);
8efafdc38718 [gaim-migrate @ 7325]
Christian Hammond <chipx86@chipx86.com>
parents: 6705
diff changeset
409 ack_unique_id = htonl(msg->msnslp_header.ack_unique_id);
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
410 ack_length_1 = htonl(msg->msnslp_header.ack_length_1);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
411 ack_length_2 = htonl(msg->msnslp_header.ack_length_2);
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
412
6831
a372cf34387e [gaim-migrate @ 7376]
Christian Hammond <chipx86@chipx86.com>
parents: 6827
diff changeset
413 c += msn_put32(c, session_id);
a372cf34387e [gaim-migrate @ 7376]
Christian Hammond <chipx86@chipx86.com>
parents: 6827
diff changeset
414 c += msn_put32(c, id);
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
415 c += msn_put32(c, offset_1);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
416 c += msn_put32(c, offset_2);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
417 c += msn_put32(c, total_size_1);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
418 c += msn_put32(c, total_size_2);
6831
a372cf34387e [gaim-migrate @ 7376]
Christian Hammond <chipx86@chipx86.com>
parents: 6827
diff changeset
419 c += msn_put32(c, length);
a372cf34387e [gaim-migrate @ 7376]
Christian Hammond <chipx86@chipx86.com>
parents: 6827
diff changeset
420 c += msn_put32(c, flags);
a372cf34387e [gaim-migrate @ 7376]
Christian Hammond <chipx86@chipx86.com>
parents: 6827
diff changeset
421 c += msn_put32(c, ack_session_id);
a372cf34387e [gaim-migrate @ 7376]
Christian Hammond <chipx86@chipx86.com>
parents: 6827
diff changeset
422 c += msn_put32(c, ack_unique_id);
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
423 c += msn_put32(c, ack_length_1);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
424 c += msn_put32(c, ack_length_2);
6800
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
425
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
426 if (msg->bin_content)
6827
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
427 {
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
428 size_t bin_len;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
429 const void *body = msn_message_get_bin_data(msg, &bin_len);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
430
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
431 if (body != NULL)
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
432 {
7604
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
433 memcpy(c, body, bin_len);
6827
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
434
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
435 c += bin_len;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
436 }
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
437 }
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
438 else
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
439 {
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
440 const char *body = msn_message_get_body(msg);
6827
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
441
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
442 if (body != NULL)
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
443 {
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
444 g_strlcpy(c, body, msg->size - (c - str));
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
445
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
446 c += strlen(body);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
447
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
448 if (strlen(body) > 0)
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
449 *c++ = '\0';
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
450 }
6827
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
451 }
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
452
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
453 c += msn_put32(c, msg->msnslp_footer.app_id);
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
454
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
455 if (msg->size != (c - str))
6800
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
456 {
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
457 gaim_debug(GAIM_DEBUG_ERROR, "msn",
6827
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
458 "Outgoing message size (%d) and data length (%d) "
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
459 "do not match!\n", msg->size, (c - str));
6800
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
460 }
6701
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
461 }
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
462 else
b7e113a59b51 [gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents: 6181
diff changeset
463 {
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
464 const char *body = msn_message_get_body(msg);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
465
6827
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
466 g_strlcat(str, body, len);
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
467
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
468 if (msg->size != strlen(str))
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
469 {
6800
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
470 gaim_debug(GAIM_DEBUG_ERROR, "msn",
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
471 "Outgoing message size (%d) and string length (%d) "
8646
1e211dde3cae [gaim-migrate @ 9398]
Christian Hammond <chipx86@chipx86.com>
parents: 8475
diff changeset
472 "do not match!\n", msg->size, strlen(str));
6800
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
473 }
5310
f4912a833ff6 [gaim-migrate @ 5682]
Christian Hammond <chipx86@chipx86.com>
parents: 5309
diff changeset
474 }
f4912a833ff6 [gaim-migrate @ 5682]
Christian Hammond <chipx86@chipx86.com>
parents: 5309
diff changeset
475
6826
2adf21e70601 [gaim-migrate @ 7371]
Christian Hammond <chipx86@chipx86.com>
parents: 6800
diff changeset
476 if (ret_size != NULL)
2adf21e70601 [gaim-migrate @ 7371]
Christian Hammond <chipx86@chipx86.com>
parents: 6800
diff changeset
477 *ret_size = len - 1;
2adf21e70601 [gaim-migrate @ 7371]
Christian Hammond <chipx86@chipx86.com>
parents: 6800
diff changeset
478
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
479 return str;
4542
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
480 }
86b0a0243be8 [gaim-migrate @ 4821]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
481
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
482 void
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
483 msn_message_set_flag(MsnMessage *msg, char flag)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
484 {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
485 g_return_if_fail(msg != NULL);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
486 g_return_if_fail(flag != 0);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
487
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
488 msg->flag = flag;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
489 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
490
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
491 char
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
492 msn_message_get_flag(const MsnMessage *msg)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
493 {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
494 g_return_val_if_fail(msg != NULL, 0);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
495
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
496 return msg->flag;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
497 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
498
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
499 void
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
500 msn_message_set_body(MsnMessage *msg, const char *body)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
501 {
6181
29fef9695c4d [gaim-migrate @ 6667]
Christian Hammond <chipx86@chipx86.com>
parents: 6075
diff changeset
502 const char *c;
29fef9695c4d [gaim-migrate @ 6667]
Christian Hammond <chipx86@chipx86.com>
parents: 6075
diff changeset
503 char *buf, *d;
29fef9695c4d [gaim-migrate @ 6667]
Christian Hammond <chipx86@chipx86.com>
parents: 6075
diff changeset
504 int newline_count = 0;
29fef9695c4d [gaim-migrate @ 6667]
Christian Hammond <chipx86@chipx86.com>
parents: 6075
diff changeset
505 size_t new_len;
29fef9695c4d [gaim-migrate @ 6667]
Christian Hammond <chipx86@chipx86.com>
parents: 6075
diff changeset
506
6827
1cfbb731aa1f [gaim-migrate @ 7372]
Christian Hammond <chipx86@chipx86.com>
parents: 6826
diff changeset
507 g_return_if_fail(msg != NULL);
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
508
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
509 if (msg->bin_content)
7604
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
510 {
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
511 msn_message_set_bin_data(msg, NULL, 0);
7604
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
512 return;
43803965ef45 [gaim-migrate @ 8227]
Christian Hammond <chipx86@chipx86.com>
parents: 7592
diff changeset
513 }
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
514
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
515 if (msg->body != NULL) {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
516 msg->size -= strlen(msg->body);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
517 g_free(msg->body);
6800
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
518
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
519 if (msg->msnslp_message)
8f228a7d5076 [gaim-migrate @ 7340]
Christian Hammond <chipx86@chipx86.com>
parents: 6786
diff changeset
520 msg->size--;
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
521 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
522
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
523 if (body != NULL)
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
524 {
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
525 for (c = body; *c != '\0'; c++)
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
526 {
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
527 if (*c == '\n' && (c == body || *(c - 1) != '\r'))
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
528 newline_count++;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
529 }
6181
29fef9695c4d [gaim-migrate @ 6667]
Christian Hammond <chipx86@chipx86.com>
parents: 6075
diff changeset
530
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
531 new_len = strlen(body) + newline_count;
6181
29fef9695c4d [gaim-migrate @ 6667]
Christian Hammond <chipx86@chipx86.com>
parents: 6075
diff changeset
532
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
533 buf = g_new0(char, new_len + 1);
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
534
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
535 for (c = body, d = buf; *c != '\0'; c++) {
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
536 if (*c == '\n' && (c == body || *(c - 1) != '\r')) {
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
537 *d++ = '\r';
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
538 *d++ = '\n';
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
539 }
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
540 else
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
541 *d++ = *c;
6181
29fef9695c4d [gaim-migrate @ 6667]
Christian Hammond <chipx86@chipx86.com>
parents: 6075
diff changeset
542 }
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
543
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
544 msg->body = buf;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
545 msg->size += new_len;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
546
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
547 msg->bin_content = FALSE;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
548
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
549 if (msg->msnslp_message)
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
550 msg->size++;
6181
29fef9695c4d [gaim-migrate @ 6667]
Christian Hammond <chipx86@chipx86.com>
parents: 6075
diff changeset
551 }
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
552 else
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
553 msg->body = NULL;
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
554 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
555
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
556 const char *
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
557 msn_message_get_body(const MsnMessage *msg)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
558 {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
559 g_return_val_if_fail(msg != NULL, NULL);
6868
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
560 g_return_val_if_fail(!msg->bin_content, NULL);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
561
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
562 return msg->body;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
563 }
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
564
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
565 void
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
566 msn_message_set_bin_data(MsnMessage *msg, const void *data, size_t len)
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
567 {
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
568 g_return_if_fail(msg != NULL);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
569
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
570 if (!msg->bin_content)
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
571 msn_message_set_body(msg, NULL);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
572
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
573 msg->bin_content = TRUE;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
574
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
575 if (msg->body != NULL)
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
576 {
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
577 msg->size -= msg->bin_len;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
578 g_free(msg->body);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
579 }
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
580
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
581 if (data != NULL && len > 0)
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
582 {
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
583 msg->body = g_memdup(data, len);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
584 msg->bin_len = len;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
585
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
586 msg->size += len;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
587 }
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
588 else
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
589 {
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
590 msg->body = NULL;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
591 msg->bin_len = 0;
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
592 }
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
593 }
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
594
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
595 const void *
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
596 msn_message_get_bin_data(const MsnMessage *msg, size_t *len)
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
597 {
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
598 g_return_val_if_fail(msg != NULL, NULL);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
599 g_return_val_if_fail(len != NULL, NULL);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
600 g_return_val_if_fail(msg->bin_content, NULL);
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
601
ab80de7a74d1 [gaim-migrate @ 7414]
Christian Hammond <chipx86@chipx86.com>
parents: 6842
diff changeset
602 *len = msg->bin_len;
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
603
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
604 return msg->body;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
605 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
606
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
607 void
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
608 msn_message_set_content_type(MsnMessage *msg, const char *type)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
609 {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
610 g_return_if_fail(msg != NULL);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
611
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
612 if (msg->content_type != NULL) {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
613 msg->size -= strlen(msg->content_type);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
614 g_free(msg->content_type);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
615 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
616
5478
bae3c48b9b4c [gaim-migrate @ 5874]
Christian Hammond <chipx86@chipx86.com>
parents: 5455
diff changeset
617 if (type != NULL) {
bae3c48b9b4c [gaim-migrate @ 5874]
Christian Hammond <chipx86@chipx86.com>
parents: 5455
diff changeset
618 msg->content_type = g_strdup(type);
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
619
5478
bae3c48b9b4c [gaim-migrate @ 5874]
Christian Hammond <chipx86@chipx86.com>
parents: 5455
diff changeset
620 msg->size += strlen(type);
bae3c48b9b4c [gaim-migrate @ 5874]
Christian Hammond <chipx86@chipx86.com>
parents: 5455
diff changeset
621 }
bae3c48b9b4c [gaim-migrate @ 5874]
Christian Hammond <chipx86@chipx86.com>
parents: 5455
diff changeset
622 else
bae3c48b9b4c [gaim-migrate @ 5874]
Christian Hammond <chipx86@chipx86.com>
parents: 5455
diff changeset
623 msg->content_type = NULL;
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
624 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
625
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
626 const char *
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
627 msn_message_get_content_type(const MsnMessage *msg)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
628 {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
629 g_return_val_if_fail(msg != NULL, NULL);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
630
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
631 return msg->content_type;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
632 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
633
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
634 void
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
635 msn_message_set_charset(MsnMessage *msg, const char *charset)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
636 {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
637 g_return_if_fail(msg != NULL);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
638
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
639 if (msg->charset != NULL) {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
640 msg->size -= strlen(msg->charset) + strlen("; charset=");
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
641 g_free(msg->charset);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
642 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
643
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
644 if (charset != NULL) {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
645 msg->charset = g_strdup(charset);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
646
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
647 msg->size += strlen(charset) + strlen("; charset=");
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
648 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
649 else
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
650 msg->charset = NULL;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
651 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
652
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
653 const char *
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
654 msn_message_get_charset(const MsnMessage *msg)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
655 {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
656 g_return_val_if_fail(msg != NULL, NULL);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
657
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
658 return msg->charset;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
659 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
660
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
661 void
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
662 msn_message_set_attr(MsnMessage *msg, const char *attr, const char *value)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
663 {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
664 const char *temp;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
665 char *new_attr;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
666
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
667 g_return_if_fail(msg != NULL);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
668 g_return_if_fail(attr != NULL);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
669
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
670 temp = msn_message_get_attr(msg, attr);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
671
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
672 if (value == NULL) {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
673 if (temp != NULL) {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
674 GList *l;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
675
5310
f4912a833ff6 [gaim-migrate @ 5682]
Christian Hammond <chipx86@chipx86.com>
parents: 5309
diff changeset
676 msg->size -= strlen(temp) + strlen(attr) + 4;
f4912a833ff6 [gaim-migrate @ 5682]
Christian Hammond <chipx86@chipx86.com>
parents: 5309
diff changeset
677
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
678 for (l = msg->attr_list; l != NULL; l = l->next) {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
679 if (!g_ascii_strcasecmp(l->data, attr)) {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
680 msg->attr_list = g_list_remove(msg->attr_list, l->data);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
681
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
682 break;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
683 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
684 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
685
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
686 g_hash_table_remove(msg->attr_table, attr);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
687 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
688
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
689 return;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
690 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
691
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
692 new_attr = g_strdup(attr);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
693
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
694 g_hash_table_insert(msg->attr_table, new_attr, g_strdup(value));
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
695
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
696 if (temp == NULL) {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
697 msg->attr_list = g_list_append(msg->attr_list, new_attr);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
698 msg->size += strlen(attr) + 4;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
699 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
700 else
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
701 msg->size -= strlen(temp);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
702
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
703 msg->size += strlen(value);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
704 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
705
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
706 const char *
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
707 msn_message_get_attr(const MsnMessage *msg, const char *attr)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
708 {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
709 g_return_val_if_fail(msg != NULL, NULL);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
710 g_return_val_if_fail(attr != NULL, NULL);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
711
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
712 return g_hash_table_lookup(msg->attr_table, attr);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
713 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
714
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
715 GHashTable *
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
716 msn_message_get_hashtable_from_body(const MsnMessage *msg)
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
717 {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
718 GHashTable *table;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
719 char *body, *s, *c;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
720
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
721 g_return_val_if_fail(msg != NULL, NULL);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
722 g_return_val_if_fail(msn_message_get_body(msg) != NULL, NULL);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
723
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
724 s = body = g_strdup(msn_message_get_body(msg));
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
725
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
726 table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
727
5315
b1c430fbf9d5 [gaim-migrate @ 5687]
Christian Hammond <chipx86@chipx86.com>
parents: 5310
diff changeset
728 while (*s != '\r' && *s != '\0') {
5309
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
729 char *key, *value;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
730
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
731 key = s;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
732
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
733 GET_NEXT(s);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
734
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
735 value = s;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
736
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
737 GET_NEXT_LINE(s);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
738
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
739 if ((c = strchr(key, ':')) != NULL) {
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
740 *c = '\0';
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
741
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
742 g_hash_table_insert(table, g_strdup(key), g_strdup(value));
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
743 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
744 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
745
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
746 g_free(body);
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
747
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
748 return table;
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
749 }
e2e53316a21d [gaim-migrate @ 5681]
Christian Hammond <chipx86@chipx86.com>
parents: 5221
diff changeset
750