Mercurial > pidgin
comparison libpurple/protocols/msn/xfer.c @ 31558:ce968e115c95
propagate from branch 'im.pidgin.cpw.masca.p2p' (head 33ca865dacb9e5bcf763d06f6a42cbaca337cc64)
to branch 'im.pidgin.pidgin' (head 92f47f4e8b0cbb107fd97e1ab814d1cedbf109ad)
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Fri, 06 May 2011 06:25:14 +0000 |
parents | 9ccbd0302bb2 |
children | 92711688c245 3828a61c44da |
comparison
equal
deleted
inserted
replaced
31557:f021d93a1f9b | 31558:ce968e115c95 |
---|---|
160 purple_xfer_set_completed(xfer, TRUE); | 160 purple_xfer_set_completed(xfer, TRUE); |
161 purple_xfer_end(xfer); | 161 purple_xfer_end(xfer); |
162 } | 162 } |
163 | 163 |
164 gchar * | 164 gchar * |
165 msn_file_context_to_wire(MsnFileContext *header) | 165 msn_file_context_to_wire(MsnFileContext *context) |
166 { | 166 { |
167 gchar *ret, *tmp; | 167 gchar *ret, *tmp; |
168 | 168 |
169 tmp = ret = g_new(gchar, MSN_FILE_CONTEXT_SIZE + header->preview_len + 1); | 169 tmp = ret = g_new(gchar, MSN_FILE_CONTEXT_SIZE + context->preview_len + 1); |
170 | 170 |
171 msn_push32le(tmp, header->length); | 171 msn_push32le(tmp, context->length); |
172 msn_push32le(tmp, header->version); | 172 msn_push32le(tmp, context->version); |
173 msn_push64le(tmp, header->file_size); | 173 msn_push64le(tmp, context->file_size); |
174 msn_push32le(tmp, header->type); | 174 msn_push32le(tmp, context->type); |
175 memcpy(tmp, header->file_name, MAX_FILE_NAME_LEN * 2); | 175 memcpy(tmp, context->file_name, MAX_FILE_NAME_LEN * 2); |
176 tmp += MAX_FILE_NAME_LEN * 2; | 176 tmp += MAX_FILE_NAME_LEN * 2; |
177 memcpy(tmp, header->unknown1, sizeof(header->unknown1)); | 177 memcpy(tmp, context->unknown1, sizeof(context->unknown1)); |
178 tmp += sizeof(header->unknown1); | 178 tmp += sizeof(context->unknown1); |
179 msn_push32le(tmp, header->unknown2); | 179 msn_push32le(tmp, context->unknown2); |
180 if (header->preview) { | 180 if (context->preview) { |
181 memcpy(tmp, header->preview, header->preview_len); | 181 memcpy(tmp, context->preview, context->preview_len); |
182 } | 182 } |
183 tmp[header->preview_len] = '\0'; | 183 tmp[context->preview_len] = '\0'; |
184 | 184 |
185 return ret; | 185 return ret; |
186 } | 186 } |
187 | 187 |
188 MsnFileContext * | 188 MsnFileContext * |
189 msn_file_context_from_wire(const char *buf, gsize len) | 189 msn_file_context_from_wire(const char *buf, gsize len) |
190 { | 190 { |
191 MsnFileContext *header; | 191 MsnFileContext *context; |
192 | 192 |
193 if (!buf || len < MSN_FILE_CONTEXT_SIZE) | 193 if (!buf || len < MSN_FILE_CONTEXT_SIZE) |
194 return NULL; | 194 return NULL; |
195 | 195 |
196 header = g_new(MsnFileContext, 1); | 196 context = g_new(MsnFileContext, 1); |
197 | 197 |
198 header->length = msn_pop32le(buf); | 198 context->length = msn_pop32le(buf); |
199 header->version = msn_pop32le(buf); | 199 context->version = msn_pop32le(buf); |
200 if (header->version == 2) { | 200 if (context->version == 2) { |
201 /* The length field is broken for this version. No check. */ | 201 /* The length field is broken for this version. No check. */ |
202 header->length = MSN_FILE_CONTEXT_SIZE; | 202 context->length = MSN_FILE_CONTEXT_SIZE; |
203 } else if (header->version == 3) { | 203 } else if (context->version == 3) { |
204 if (header->length != MSN_FILE_CONTEXT_SIZE + 63) { | 204 if (context->length != MSN_FILE_CONTEXT_SIZE + 63) { |
205 g_free(header); | 205 g_free(context); |
206 return NULL; | 206 return NULL; |
207 } else if (len < MSN_FILE_CONTEXT_SIZE + 63) { | 207 } else if (len < MSN_FILE_CONTEXT_SIZE + 63) { |
208 g_free(header); | 208 g_free(context); |
209 return NULL; | 209 return NULL; |
210 } | 210 } |
211 } else { | 211 } else { |
212 purple_debug_warning("msn", "Received MsnFileContext with unknown version: %d\n", header->version); | 212 purple_debug_warning("msn", "Received MsnFileContext with unknown version: %d\n", context->version); |
213 g_free(header); | 213 g_free(context); |
214 return NULL; | 214 return NULL; |
215 } | 215 } |
216 | 216 |
217 header->file_size = msn_pop64le(buf); | 217 context->file_size = msn_pop64le(buf); |
218 header->type = msn_pop32le(buf); | 218 context->type = msn_pop32le(buf); |
219 memcpy(header->file_name, buf, MAX_FILE_NAME_LEN * 2); | 219 memcpy(context->file_name, buf, MAX_FILE_NAME_LEN * 2); |
220 buf += MAX_FILE_NAME_LEN * 2; | 220 buf += MAX_FILE_NAME_LEN * 2; |
221 memcpy(header->unknown1, buf, sizeof(header->unknown1)); | 221 memcpy(context->unknown1, buf, sizeof(context->unknown1)); |
222 buf += sizeof(header->unknown1); | 222 buf += sizeof(context->unknown1); |
223 header->unknown2 = msn_pop32le(buf); | 223 context->unknown2 = msn_pop32le(buf); |
224 | 224 |
225 if (header->type == 0 && len > header->length) { | 225 if (context->type == 0 && len > context->length) { |
226 header->preview_len = len - header->length; | 226 context->preview_len = len - context->length; |
227 header->preview = g_memdup(buf, header->preview_len); | 227 context->preview = g_memdup(buf, context->preview_len); |
228 } else { | 228 } else { |
229 header->preview_len = 0; | 229 context->preview_len = 0; |
230 header->preview = NULL; | 230 context->preview = NULL; |
231 } | 231 } |
232 | 232 |
233 return header; | 233 return context; |
234 } | 234 } |
235 | 235 |