1
0
Fork 0

added normalisation of message internal addresses on mm1

This commit is contained in:
bagyenda 2008-05-05 21:09:44 +00:00
parent fbbec2877b
commit d9be1198a5
6 changed files with 35 additions and 25 deletions

View File

@ -4,6 +4,7 @@
*.patch *.patch
*.lo *.lo
*.o *.o
.gdb_history
mpeg2dec-*.tar.gz mpeg2dec-*.tar.gz
Makefile Makefile
Makefile.in Makefile.in

View File

@ -1,4 +1,5 @@
2008-05-05 P. A. Bagyenda <bagyenda@dsmagic.com> 2008-05-05 P. A. Bagyenda <bagyenda@dsmagic.com>
* Normalisation of numbers inside messages as well
* Added strip-prefixes config parameter * Added strip-prefixes config parameter
2008-04-18 P. A. Bagyenda <bagyenda@dsmagic.com> 2008-04-18 P. A. Bagyenda <bagyenda@dsmagic.com>
* Various memory leak fixes (thanks to Monachin Eric @ Skycore) * Various memory leak fixes (thanks to Monachin Eric @ Skycore)

View File

@ -33,7 +33,8 @@ struct MmsMsg {
static int encode_msgheaders(Octstr *os, List *hdrs); static int encode_msgheaders(Octstr *os, List *hdrs);
static int decode_msgheaders(ParseContext *context, List *hdr, Octstr *from, int stop_on_ctype); static int decode_msgheaders(ParseContext *context, List *hdr, Octstr *from, int stop_on_ctype,
char *unified_prefix, List *strip_prefixes);
static inline void pack_short_integer(Octstr *s, int ch) static inline void pack_short_integer(Octstr *s, int ch)
@ -267,8 +268,9 @@ static Octstr *decode_encoded_string_value(int ret, ParseContext *context, unsig
* useful for unpacking msg type * useful for unpacking msg type
*/ */
static int mms_unpack_well_known_field(List *unpacked, int field_type, static int mms_unpack_well_known_field(List *unpacked, int field_type,
ParseContext *context, ParseContext *context,
Octstr *xfrom, int msgtype) Octstr *xfrom, int msgtype,
char *unified_prefix, List *strip_prefixes)
{ {
int val, ret; int val, ret;
unsigned char *hname = NULL; unsigned char *hname = NULL;
@ -296,7 +298,8 @@ static int mms_unpack_well_known_field(List *unpacked, int field_type,
case MMS_HEADER_BCC: case MMS_HEADER_BCC:
if (ret == WSP_FIELD_VALUE_DATA) if (ret == WSP_FIELD_VALUE_DATA)
decoded = decode_encoded_string_value(ret, context, hname); decoded = decode_encoded_string_value(ret, context, hname);
if (decoded)
_mms_fixup_address(&decoded, unified_prefix, strip_prefixes, 1);
if (decoded == NULL || mms_validate_address(decoded)) if (decoded == NULL || mms_validate_address(decoded))
warning(0, "Faulty address [%s] format in field %s!", warning(0, "Faulty address [%s] format in field %s!",
octstr_get_cstr(decoded), hname); octstr_get_cstr(decoded), hname);
@ -464,14 +467,16 @@ static int mms_unpack_well_known_field(List *unpacked, int field_type,
else { else {
int n = parse_get_char(context); int n = parse_get_char(context);
if (n == 0x80) { /* Address present. */ if (n == 0x80) /* Address present. */
decoded = decode_encoded_string_value(-1,context, hname); decoded = decode_encoded_string_value(-1,context, hname);
if (decoded == NULL || else /* Insert address. */
mms_validate_address(decoded))
warning(0, "Faulty address [%s] format in field %s!",
octstr_get_cstr(decoded), hname);
} else /* Insert address. */
decoded = octstr_duplicate(xfrom); decoded = octstr_duplicate(xfrom);
if (decoded)
_mms_fixup_address(&decoded, unified_prefix, strip_prefixes, 1);
if (decoded == NULL || mms_validate_address(decoded))
warning(0, "Faulty address [%s] format in field %s!",
octstr_get_cstr(decoded), hname);
} }
break; break;
case MMS_HEADER_PREVIOUSLY_SENT_BY: case MMS_HEADER_PREVIOUSLY_SENT_BY:
@ -603,7 +608,8 @@ static int mms_unpack_well_known_field(List *unpacked, int field_type,
return -1; return -1;
} }
static int decode_msgheaders(ParseContext *context, List *hdrs, Octstr *from, int stop_on_ctype) static int decode_msgheaders(ParseContext *context, List *hdrs, Octstr *from,
int stop_on_ctype, char *unified_prefixes, List *strip_prefixes)
{ {
int fcont = 1; int fcont = 1;
int msgtype = 0; int msgtype = 0;
@ -616,7 +622,8 @@ static int decode_msgheaders(ParseContext *context, List *hdrs, Octstr *from, in
int val = 0; int val = 0;
if (byte >= 0x80) if (byte >= 0x80)
val = mms_unpack_well_known_field(hdrs, byte&0x7f, context, from, msgtype); val = mms_unpack_well_known_field(hdrs, byte&0x7f, context, from, msgtype,
unified_prefixes, strip_prefixes);
else { else {
parse_skip(context, -1); /* Go back a bit. */ parse_skip(context, -1); /* Go back a bit. */
wsp_unpack_app_header(hdrs, context); wsp_unpack_app_header(hdrs, context);
@ -1087,7 +1094,7 @@ mms_encoding mms_message_enc(MmsMsg *msg)
return msg->enc; return msg->enc;
} }
MmsMsg *mms_frombinary(Octstr *msg, Octstr *from) MmsMsg *mms_frombinary_ex(Octstr *msg, Octstr *from, char *unified_prefix, List *strip_prefixes)
{ {
int res = 0; int res = 0;
MmsMsg _m = {0}, *m = NULL; MmsMsg _m = {0}, *m = NULL;
@ -1101,7 +1108,7 @@ MmsMsg *mms_frombinary(Octstr *msg, Octstr *from)
mms_strings_init(); /* Just in case. */ mms_strings_init(); /* Just in case. */
_m.headers = gwlist_create(); _m.headers = gwlist_create();
decode_msgheaders(p, _m.headers, from, 1); decode_msgheaders(p, _m.headers, from, 1, unified_prefix, strip_prefixes);
if (_m.headers == NULL || if (_m.headers == NULL ||
gwlist_len(_m.headers) == 0) gwlist_len(_m.headers) == 0)

View File

@ -32,7 +32,9 @@ extern int mms_validate_address(Octstr *s);
* Takes from param which is put in if insert-address is requested. * Takes from param which is put in if insert-address is requested.
* NOTE: function may modify 'msg' argument as it parses. * NOTE: function may modify 'msg' argument as it parses.
*/ */
extern MmsMsg *mms_frombinary(Octstr *msg, Octstr *from); extern MmsMsg *mms_frombinary_ex(Octstr *msg, Octstr *from, char *unified_prefix, List *strip_prefixes);
#define mms_frombinary(msg, from) mms_frombinary_ex((msg), (from), NULL, NULL)
/* /*
* mms_tobinary: Return binary encoded Mms message * mms_tobinary: Return binary encoded Mms message

View File

@ -510,7 +510,8 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
goto done; goto done;
} }
m = mms_frombinary(h->body, h->client_addr ? h->client_addr : octstr_imm("anon@anon")); m = mms_frombinary_ex(h->body, h->client_addr ? h->client_addr : octstr_imm("anon@anon"),
octstr_get_cstr(settings->unified_prefix), settings->strip_prefixes);
if (!m) { if (!m) {
http_header_add(rh, "Content-Type", "text/plain"); http_header_add(rh, "Content-Type", "text/plain");
@ -556,8 +557,7 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
mms_collect_envdata_from_msgheaders(mh, &to, &subject, &otransid, &expiryt, mms_collect_envdata_from_msgheaders(mh, &to, &subject, &otransid, &expiryt,
&deliveryt, settings->default_msgexpiry, &deliveryt, settings->default_msgexpiry,
octstr_get_cstr(settings->unified_prefix), NULL, NULL); /* already normalized. */
settings->strip_prefixes);
if (!h->client_addr) { if (!h->client_addr) {
mresp = mms_sendconf("Error-sending-address-unresolved", "None", mresp = mms_sendconf("Error-sending-address-unresolved", "None",
@ -681,8 +681,7 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
mms_collect_envdata_from_msgheaders(mh, &to, &subject, &otransid, &expiryt, mms_collect_envdata_from_msgheaders(mh, &to, &subject, &otransid, &expiryt,
&deliveryt, settings->default_msgexpiry, &deliveryt, settings->default_msgexpiry,
octstr_get_cstr(settings->unified_prefix), NULL, NULL);
settings->strip_prefixes);
if (!h->client_addr) { if (!h->client_addr) {
mresp = mms_sendconf("Error-sending-address-unresolved", "None", octstr_get_cstr(otransid),1, mresp = mms_sendconf("Error-sending-address-unresolved", "None", octstr_get_cstr(otransid),1,
@ -1037,8 +1036,7 @@ static void sendmms_proxy(MmsHTTPClientInfo *h)
mms_collect_envdata_from_msgheaders(mh, &to, NULL, NULL, NULL, NULL, mms_collect_envdata_from_msgheaders(mh, &to, NULL, NULL, NULL, NULL,
settings->default_msgexpiry, settings->default_msgexpiry,
octstr_get_cstr(settings->unified_prefix), NULL, NULL);
settings->strip_prefixes);
x = settings->qfs->mms_queue_add(from, to, NULL, NULL, NULL, time(NULL), x = settings->qfs->mms_queue_add(from, to, NULL, NULL, NULL, time(NULL),
time(NULL) + settings->default_msgexpiry, time(NULL) + settings->default_msgexpiry,
@ -1792,8 +1790,7 @@ static void mm7eaif_dispatch(MmsHTTPClientInfo *h)
*/ */
mms_collect_envdata_from_msgheaders(mh, &to, &subject, &otransid, &expiryt, mms_collect_envdata_from_msgheaders(mh, &to, &subject, &otransid, &expiryt,
&deliveryt, settings->default_msgexpiry, &deliveryt, settings->default_msgexpiry,
octstr_get_cstr(settings->unified_prefix), NULL, NULL);
settings->strip_prefixes);
if ((hto = http_header_find_all(h->headers, "X-NOKIA-MMSC-To")) != NULL && if ((hto = http_header_find_all(h->headers, "X-NOKIA-MMSC-To")) != NULL &&

View File

@ -137,7 +137,9 @@ int main(int argc, char *argv[])
mime_entity_destroy(mime); mime_entity_destroy(mime);
} }
} else } else
m = mms_frombinary(data, from ? from : octstr_imm("anon@anon")); m = mms_frombinary_ex(data, from ? from : octstr_imm("anon@anon"),
octstr_get_cstr(settings->unified_prefix),
settings->strip_prefixes);
if (m) if (m)
mms_msgdump(m,1); mms_msgdump(m,1);
msize = octstr_len(data); msize = octstr_len(data);