Skip to content

Commit

Permalink
Merge pull request #24 from monich/decode-address
Browse files Browse the repository at this point in the history
[mms_codec] Fixed decoding of address fields
  • Loading branch information
Slava Monich committed Apr 13, 2014
2 parents bdf9e4e + 6dc656d commit bc52dc9
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 30 deletions.
63 changes: 33 additions & 30 deletions mms-lib/src/mms_codec.c
Expand Up @@ -3,6 +3,7 @@
* Multimedia Messaging Service
*
* Copyright (C) 2010-2011 Intel Corporation. All rights reserved.
* Copyright (C) 2013-2014 Jolla Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
Expand Down Expand Up @@ -495,33 +496,6 @@ static gboolean extract_text(struct wsp_header_iter *iter, void *user)
return TRUE;
}

static gboolean extract_text_array_element(struct wsp_header_iter *iter,
void *user)
{
char **out = user;
const char *element;
char *tmp;

element = decode_text(iter);
if (element == NULL)
return FALSE;

if (*out == NULL) {
*out = g_strdup(element);
return TRUE;
}

tmp = g_strjoin(",", *out, element, NULL);
if (tmp == NULL)
return FALSE;

g_free(*out);

*out = tmp;

return TRUE;
}

static char *decode_encoded_string_with_mib_enum(const unsigned char *p,
unsigned int l)
{
Expand Down Expand Up @@ -588,6 +562,35 @@ static gboolean extract_encoded_text(struct wsp_header_iter *iter, void *user)
return TRUE;
}

static gboolean extract_encoded_text_element(struct wsp_header_iter *iter,
void *user)
{
char **out = user;
char *element;
char *tmp;

if (!extract_encoded_text(iter, &element))
return FALSE;

if (*out == NULL) {
*out = element;
return TRUE;
}

tmp = g_strjoin(",", *out, element, NULL);
if (tmp == NULL) {
g_free(element);
return FALSE;
}

g_free(*out);
g_free(element);

*out = tmp;

return TRUE;
}

static gboolean extract_subject(struct wsp_header_iter *iter, void *user)
{
/* Ignore incorrectly encoded subjects */
Expand Down Expand Up @@ -915,9 +918,9 @@ static header_handler handler_for_type(enum mms_header header)
{
switch (header) {
case MMS_HEADER_BCC:
return &extract_text_array_element;
return &extract_encoded_text_element;
case MMS_HEADER_CC:
return &extract_text_array_element;
return &extract_encoded_text_element;
case MMS_HEADER_CONTENT_LOCATION:
return &extract_text;
case MMS_HEADER_CONTENT_TYPE:
Expand Down Expand Up @@ -959,7 +962,7 @@ static header_handler handler_for_type(enum mms_header header)
case MMS_HEADER_SUBJECT:
return &extract_subject;
case MMS_HEADER_TO:
return &extract_text_array_element;
return &extract_encoded_text_element;
case MMS_HEADER_TRANSACTION_ID:
return &extract_text;
case MMS_HEADER_RETRIEVE_STATUS:
Expand Down
Binary file modified mms-lib/test/mms_codec/data/m-retrieve_1.2.conf
Binary file not shown.

0 comments on commit bc52dc9

Please sign in to comment.