Mercurial > pidgin
diff libpurple/protocols/msn/slpcall.c @ 31046:b4064198e017
Add functions for reading and writing a MsnFileContext which negates
the need for any more packing.
Fixes #12856.
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Fri, 17 Dec 2010 08:53:34 +0000 |
parents | f26e961e1274 |
children | 3824f34c93d9 |
line wrap: on
line diff
--- a/libpurple/protocols/msn/slpcall.c Fri Dec 17 07:58:33 2010 +0000 +++ b/libpurple/protocols/msn/slpcall.c Fri Dec 17 08:53:34 2010 +0000 @@ -512,6 +512,7 @@ PurpleAccount *account; PurpleXfer *xfer; MsnFileContext *header; + char *buf; gsize bin_len; guint32 file_size; char *file_name; @@ -526,11 +527,11 @@ xfer = purple_xfer_new(account, PURPLE_XFER_RECEIVE, slpcall->slplink->remote_user); - header = (MsnFileContext *)purple_base64_decode(context, &bin_len); - if (header != NULL && bin_len >= sizeof(MsnFileContext) - 1 && - (header->version == 2 || - (header->version == 3 && header->length == sizeof(MsnFileContext) + 63))) { - file_size = GUINT64_FROM_LE(header->file_size); + buf = (char *)purple_base64_decode(context, &bin_len); + header = msn_file_context_from_wire(buf, bin_len); + + if (header != NULL) { + file_size = header->file_size; file_name = g_convert((const gchar *)&header->file_name, MAX_FILE_NAME_LEN * 2, @@ -553,15 +554,17 @@ xfer->data = slpcall; - if (header->type == 0 && bin_len >= sizeof(MsnFileContext)) { - purple_xfer_set_thumbnail(xfer, &header->preview, - bin_len - sizeof(MsnFileContext), + if (header->preview) { + purple_xfer_set_thumbnail(xfer, header->preview, + header->preview_len, "image/png"); + g_free(header->preview); } purple_xfer_request(xfer); } g_free(header); + g_free(buf); accepted = TRUE;