Index: gw/urltrans.c =================================================================== RCS file: /home/cvs/gateway/gw/urltrans.c,v retrieving revision 1.111 diff -u -b -w -r1.111 urltrans.c --- gw/urltrans.c 14 Jan 2009 11:11:46 -0000 1.111 +++ gw/urltrans.c 29 May 2009 18:38:12 -0000 @@ -71,6 +71,7 @@ #include "urltrans.h" #include "gwlib/gwlib.h" #include "gw/sms.h" +#include "gw/meta_data.h" /*********************************************************************** @@ -319,6 +320,7 @@ Octstr *urltrans_fill_escape_codes(Octstr *pattern, Msg *request) { Octstr *enc; + Octstr *meta_group, *meta_param; int nextarg, j; struct tm tm; int num_words; @@ -327,7 +329,7 @@ long pattern_len; long pos; int c; - long i; + long i, k; Octstr *temp; result = octstr_create(""); @@ -626,6 +628,37 @@ } break; + /* + * This allows to pass meta-data individual parameters into urls. + * The syntax is as follows: %#group#parameter# + * For example: %#smpp#my_param# would be replaced with the value + * 'my_param' from the group 'smpp' coming inside the meta_data field. + */ + case '#': + k = octstr_search_char(pattern, 35, pos + 2); + if (k >= 0) { + pos += 2; + meta_group = octstr_copy(pattern, pos, (k-pos)); + pos = k + 1; + k = octstr_search_char(pattern, 35, pos); + if (k >= 0) { + meta_param = octstr_copy(pattern, pos, (k-pos)); + pos = k - 1; + if (request->sms.meta_data != NULL) { + enc = meta_data_get_value(request->sms.meta_data, + octstr_get_cstr(meta_group), meta_param); + octstr_url_encode(enc); + octstr_append(result, enc); + octstr_destroy(enc); + } + octstr_destroy(meta_param); + } else { + pos++; + } + octstr_destroy(meta_group); + } + break; + /* XXX sms.parameters not present in here: * * pid - will we receive this ? * * alt-dcs - shouldn't be required unless we want to inform