1
0
Fork 0

mmsbox cdr changes

This commit is contained in:
bagyenda 2008-11-26 09:16:20 +00:00
parent f10b0e4e41
commit d93be7fce5
6 changed files with 87 additions and 37 deletions

View File

@ -1,3 +1,6 @@
2008-11-26 P. A. Bagyenda <bagyenda@dsmagic.com>
* Added validityperiod sendmms cgi param
* Minor changes to mmsbox CDR logging to improve clarity
2008-11-21 P. A. Bagyenda <bagyenda@dsmagic.com> 2008-11-21 P. A. Bagyenda <bagyenda@dsmagic.com>
* Minor improvements in DLR processing (mmsbox) * Minor improvements in DLR processing (mmsbox)
2008-11-20 P. A. Bagyenda <bagyenda@dsmagic.com> 2008-11-20 P. A. Bagyenda <bagyenda@dsmagic.com>

View File

@ -3021,6 +3021,16 @@ faked-sender = 100<br>
</td> </td>
</tr> </tr>
<tr>
<td valign=top >
<tt>validityperiod</tt>
</td>
<td valign=top>
Optional. Should be an integer, giving the number of minutes before
this message is considered expired by the receiving MMSC.
</td>
</tr>
</table> </table>
</p> </p>

View File

@ -21,6 +21,7 @@ static Octstr *shell_cmd;
#undef info #undef info
static void default_logger(enum mbuni_event_type_t type, const char *subtype, int level, const char *file, static void default_logger(enum mbuni_event_type_t type, const char *subtype, int level, const char *file,
int line, int line,
const char *function,
const char *interface, Octstr *id, const char *interface, Octstr *id,
Octstr *msg) Octstr *msg)
{ {
@ -37,8 +38,8 @@ static void default_logger(enum mbuni_event_type_t type, const char *subtype, in
break; break;
} }
f(level, "%s:%d [%s] [%s] %s", f(level, "%s:%d <%s> [%s] [%s] %s",
file, line, file, line, function,
interface ? interface : "n/a", interface ? interface : "n/a",
id ? octstr_get_cstr(id) : "n/a", id ? octstr_get_cstr(id) : "n/a",
octstr_get_cstr(msg)); octstr_get_cstr(msg));
@ -46,9 +47,9 @@ static void default_logger(enum mbuni_event_type_t type, const char *subtype, in
static void shell_logger(enum mbuni_event_type_t type, const char *subtype, int level, const char *file, static void shell_logger(enum mbuni_event_type_t type, const char *subtype, int level, const char *file,
int line, int line, const char *function,
const char *interface, Octstr *id, const char *interface, Octstr *id,
Octstr *msg) Octstr *msg)
{ {
char *xtype; char *xtype;
Octstr *cmd, *xid = octstr_duplicate(id); Octstr *cmd, *xid = octstr_duplicate(id);
@ -122,7 +123,7 @@ int mms_event_logger_init(MmsEventLoggerFuncs *funcs, Octstr *init_param)
} }
extern void mms_event_logger(enum mbuni_event_type_t type, const char *subtype, int level, const char *file, extern void mms_event_logger(enum mbuni_event_type_t type, const char *subtype, int level, const char *file,
int line, char *interface, Octstr *id, int line, const char *function, char *interface, Octstr *id,
char *fmt,...) char *fmt,...)
{ {
Octstr *x; Octstr *x;
@ -133,7 +134,7 @@ extern void mms_event_logger(enum mbuni_event_type_t type, const char *subtype,
va_end(ap); va_end(ap);
log_handler->log_event(type,subtype, level, file, line, interface, id, x); log_handler->log_event(type,subtype, level, file, line, function, interface, id, x);
octstr_destroy(x); octstr_destroy(x);
} }

View File

@ -19,7 +19,9 @@
typedef enum mbuni_event_type_t {MBUNI_ERROR, MBUNI_INFO, MBUNI_WARNING} mbuni_event_type_t; typedef enum mbuni_event_type_t {MBUNI_ERROR, MBUNI_INFO, MBUNI_WARNING} mbuni_event_type_t;
typedef struct MmsEventLoggerFuncs { typedef struct MmsEventLoggerFuncs {
int (*init)(Octstr *init_param); int (*init)(Octstr *init_param);
void (*log_event)(enum mbuni_event_type_t type, const char *subtype, int level, const char *file, int line, void (*log_event)(enum mbuni_event_type_t type, const char *subtype, int level, const char *file,
int line,
const char *function,
const char *interface, Octstr *id, const char *interface, Octstr *id,
Octstr *msg); Octstr *msg);
int (*cleanup)(void); int (*cleanup)(void);
@ -34,16 +36,17 @@ extern int mms_event_logger_init(MmsEventLoggerFuncs *funcs, Octstr *init_param)
extern void mms_event_logger_cleanup(void); extern void mms_event_logger_cleanup(void);
extern void mms_event_logger(enum mbuni_event_type_t type, const char *subtype, extern void mms_event_logger(enum mbuni_event_type_t type, const char *subtype,
int level, const char *file, int level, const char *file,
int line, char *interface, Octstr *id, int line, const char *function,
char *interface, Octstr *id,
char *fmt,...); char *fmt,...);
#define mms_error(level,intf,id,fmt,...) mms_event_logger(MBUNI_ERROR, NULL, (level), __FILE__, __LINE__,(intf), (id),(fmt),##__VA_ARGS__) #define mms_error(level,intf,id,fmt,...) mms_event_logger(MBUNI_ERROR, NULL, (level), __FILE__, __LINE__,__FUNCTION__,(intf), (id),(fmt),##__VA_ARGS__)
#define mms_info(level,intf,id,fmt,...) mms_event_logger(MBUNI_INFO, NULL, (level), __FILE__, __LINE__,(intf), (id),(fmt),##__VA_ARGS__) #define mms_info(level,intf,id,fmt,...) mms_event_logger(MBUNI_INFO, NULL, (level), __FILE__, __LINE__,__FUNCTION__,(intf), (id),(fmt),##__VA_ARGS__)
#define mms_warning(level,intf,id,fmt,...) mms_event_logger(MBUNI_WARNING, NULL, (level), __FILE__, __LINE__,(intf), (id),(fmt),##__VA_ARGS__) #define mms_warning(level,intf,id,fmt,...) mms_event_logger(MBUNI_WARNING, NULL, (level), __FILE__, __LINE__,__FUNCTION__,(intf), (id),(fmt),##__VA_ARGS__)
#define mms_error_ex(subtype,level,intf,id,fmt,...) mms_event_logger(MBUNI_ERROR, (subtype), (level), __FILE__, __LINE__,(intf), (id),(fmt),##__VA_ARGS__) #define mms_error_ex(subtype,level,intf,id,fmt,...) mms_event_logger(MBUNI_ERROR, (subtype), (level), __FILE__, __LINE__,__FUNCTION__,(intf), (id),(fmt),##__VA_ARGS__)
#define mms_info_ex(subtype,level,intf,id,fmt,...) mms_event_logger(MBUNI_INFO, (subtype), (level), __FILE__, __LINE__,(intf), (id),(fmt),##__VA_ARGS__) #define mms_info_ex(subtype,level,intf,id,fmt,...) mms_event_logger(MBUNI_INFO, (subtype), (level), __FILE__, __LINE__,__FUNCTION__,(intf), (id),(fmt),##__VA_ARGS__)
#define mms_warning_ex(subtype,level,intf,id,fmt,...) mms_event_logger(MBUNI_WARNING, (subtype), (level), __FILE__, __LINE__,(intf), (id),(fmt),##__VA_ARGS__) #define mms_warning_ex(subtype,level,intf,id,fmt,...) mms_event_logger(MBUNI_WARNING, (subtype), (level), __FILE__, __LINE__,__FUNCTION__,(intf), (id),(fmt),##__VA_ARGS__)
MmsEventLoggerFuncs shell_event_logger; /* For logging using a shell command. */ MmsEventLoggerFuncs shell_event_logger; /* For logging using a shell command. */

View File

@ -1295,17 +1295,24 @@ static Octstr *mm7http_send(MmscGrp *mmc, Octstr *from, Octstr *to,
} }
static int mms_sendtommsc(MmscGrp *mmc, Octstr *from, Octstr *to, Octstr *transid, static int mms_sendtommsc(MmscGrp *mmc, MmsEnvelope *e, Octstr *to,
Octstr *orig_transid, Octstr *orig_transid,
Octstr *linkedid, char *vasid, Octstr *service_code,
MmsMsg *m, Octstr *dlr_url, Octstr *rr_url, MmsMsg *m,
List *hdrs,
Octstr **new_msgid, Octstr **new_msgid,
List **errhdrs) List **errhdrs)
{ {
Octstr *id = NULL, *groupid = NULL; Octstr *id = NULL, *groupid = NULL;
int ret = 0, retry = 0; int ret = 0, retry = 0;
double throughput = 0; double throughput = 0;
Octstr *from = e->from;
Octstr *transid = e->msgId;
Octstr *linkedid = e->token; /* token = linkedid */
char *vasid = e->vasid ? octstr_get_cstr(e->vasid) : NULL;
Octstr *service_code = e->vaspid;
Octstr *dlr_url = e->url1;
Octstr *rr_url = e->url2;
List *hdrs = e->hdrs;
mutex_lock(mmc->mutex); { /* Grab a lock on it. */ mutex_lock(mmc->mutex); { /* Grab a lock on it. */
Octstr *err = NULL; Octstr *err = NULL;
@ -1344,7 +1351,7 @@ static int mms_sendtommsc(MmscGrp *mmc, Octstr *from, Octstr *to, Octstr *transi
ret = retry ? MMS_SEND_ERROR_TRANSIENT : MMS_SEND_ERROR_FATAL; ret = retry ? MMS_SEND_ERROR_TRANSIENT : MMS_SEND_ERROR_FATAL;
*new_msgid = id; *new_msgid = id;
octstr_destroy(groupid); octstr_destroy(groupid);
if (throughput > 0) if (throughput > 0)
gwthread_sleep(1.0/throughput); gwthread_sleep(1.0/throughput);
@ -1425,15 +1432,10 @@ static int sendMsg(MmsEnvelope *e)
e->hdrs); e->hdrs);
octstr_destroy(pfrom); octstr_destroy(pfrom);
} else { } else {
res = mms_sendtommsc(mmc, e->from, to->rcpt, res = mms_sendtommsc(mmc, e,
e->msgId, to->rcpt,
otransid, otransid,
e->token, /* token = linkedid */
e->vasid ? octstr_get_cstr(e->vasid) : NULL,
e->vaspid,
msg, msg,
e->url1, e->url2,
e->hdrs,
&new_msgid, &new_msgid,
&errl); &errl);
if (errl) if (errl)
@ -1466,7 +1468,10 @@ static int sendMsg(MmsEnvelope *e)
/* handle CDR */ /* handle CDR */
if (res == MMS_SEND_OK || res == MMS_SEND_QUEUED || res == MMS_SEND_ERROR_FATAL) { if (res == MMS_SEND_OK || res == MMS_SEND_QUEUED || res == MMS_SEND_ERROR_FATAL) {
Octstr *mclass = mms_get_header_value(msg, octstr_imm("X-Mms-Message-Class"));
Octstr *prio = mms_get_header_value(msg, octstr_imm("X-Mms-Priority"));
Octstr *mstatus = mms_get_header_value(msg, octstr_imm("X-Mms-Status"));
/* Do CDR */ /* Do CDR */
cdrfs->logcdr(e->created, cdrfs->logcdr(e->created,
octstr_get_cstr(e->from), octstr_get_cstr(e->from),
@ -1477,10 +1482,16 @@ static int sendMsg(MmsEnvelope *e)
"MM7", "MM7",
e->msize, e->msize,
(char *)mms_message_type_to_cstr(e->msgtype), (char *)mms_message_type_to_cstr(e->msgtype),
NULL, NULL, /* XXX will add these later. */
res == MMS_SEND_ERROR_FATAL ? "dropped" : "sent", prio ? octstr_get_cstr(prio) : NULL,
mclass ? octstr_get_cstr(mclass) : NULL,
res == MMS_SEND_ERROR_FATAL ? "dropped" : (mstatus ? octstr_get_cstr(mstatus) : "sent"),
e->dlr, e->dlr,
0); 0);
octstr_destroy(mclass);
octstr_destroy(prio);
octstr_destroy(mstatus);
} }
if (err == NULL) if (err == NULL)

View File

@ -553,7 +553,8 @@ static int mmsbox_send_report(Octstr *from, char *report_type,
http_destroy_headers(rph); http_destroy_headers(rph);
http_destroy_headers(rh); http_destroy_headers(rh);
return ret == HTTP_OK ? 0 : -1;
return http_status_class(ret) == HTTP_STATUS_SUCCESSFUL ? 0 : -1;
} }
static int mmsbox_service_dispatch(MmsEnvelope *e) static int mmsbox_service_dispatch(MmsEnvelope *e)
@ -565,7 +566,7 @@ static int mmsbox_service_dispatch(MmsEnvelope *e)
Octstr *err = NULL, *keyword = NULL; Octstr *err = NULL, *keyword = NULL;
MmsService *ms; MmsService *ms;
MmsEnvelopeTo *xto; MmsEnvelopeTo *xto;
Octstr *prio = NULL, *mclass = NULL, *mstatus = NULL;
gw_assert(e->msgtype == MMS_MSGTYPE_SEND_REQ || gw_assert(e->msgtype == MMS_MSGTYPE_SEND_REQ ||
e->msgtype == MMS_MSGTYPE_RETRIEVE_CONF || e->msgtype == MMS_MSGTYPE_RETRIEVE_CONF ||
@ -593,8 +594,10 @@ static int mmsbox_service_dispatch(MmsEnvelope *e)
goto done; goto done;
} }
mclass = mms_get_header_value(msg, octstr_imm("X-Mms-Message-Class"));
prio = mms_get_header_value(msg, octstr_imm("X-Mms-Priority"));
mstatus = mms_get_header_value(msg, octstr_imm("X-Mms-Status"));
if (e->msgtype == MMS_MSGTYPE_DELIVERY_IND || if (e->msgtype == MMS_MSGTYPE_DELIVERY_IND ||
e->msgtype == MMS_MSGTYPE_READ_ORIG_IND) { e->msgtype == MMS_MSGTYPE_READ_ORIG_IND) {
char *report_type = (e->msgtype == MMS_MSGTYPE_DELIVERY_IND) ? "delivery-report" : "read-report"; char *report_type = (e->msgtype == MMS_MSGTYPE_DELIVERY_IND) ? "delivery-report" : "read-report";
@ -688,8 +691,10 @@ done:
"mms-service", "mms-service",
e->msize, e->msize,
(char *)mms_message_type_to_cstr(e->msgtype), (char *)mms_message_type_to_cstr(e->msgtype),
NULL, NULL, /* XXX will add these later. */ prio ? octstr_get_cstr(prio) : NULL,
res == 0 ? "forwarded" : "dropped", mclass ? octstr_get_cstr(mclass) : NULL,
mstatus ? octstr_get_cstr(mstatus) :
(res == 0 ? "forwarded" : "dropped"),
e->dlr, e->dlr,
0); 0);
} }
@ -705,6 +710,11 @@ done:
octstr_destroy(err); octstr_destroy(err);
octstr_destroy(keyword); octstr_destroy(keyword);
mms_destroy(msg); mms_destroy(msg);
octstr_destroy(prio);
octstr_destroy(mclass);
octstr_destroy(mstatus);
if (me) if (me)
mime_entity_destroy(me); mime_entity_destroy(me);
return 1; return 1;
@ -1397,12 +1407,14 @@ static void dispatch_sendmms_recv(List *rl)
Octstr *distro = http_cgi_variable(h->cgivars, "distribution"); Octstr *distro = http_cgi_variable(h->cgivars, "distribution");
Octstr *send_type = http_cgi_variable(h->cgivars, "mms-direction"); Octstr *send_type = http_cgi_variable(h->cgivars, "mms-direction");
Octstr *sheader = http_cgi_variable(h->cgivars, "extra-content-header"); Octstr *sheader = http_cgi_variable(h->cgivars, "extra-content-header");
Octstr *validity = http_cgi_variable(h->cgivars, "validityperiod");
Octstr *data_url = NULL; Octstr *data_url = NULL;
dlr_url = http_cgi_variable(h->cgivars, "dlr-url"); dlr_url = http_cgi_variable(h->cgivars, "dlr-url");
rr_url = http_cgi_variable(h->cgivars, "rr-url"); rr_url = http_cgi_variable(h->cgivars, "rr-url");
allow_adaptations = http_cgi_variable(h->cgivars, "allow-adaptations"); allow_adaptations = http_cgi_variable(h->cgivars, "allow-adaptations");
if ((mmc = http_cgi_variable(h->cgivars, "mmsc")) == NULL) { if ((mmc = http_cgi_variable(h->cgivars, "mmsc")) == NULL) {
mmc = octstr_duplicate(u->mmsc); /* could still be NULL */ mmc = octstr_duplicate(u->mmsc); /* could still be NULL */
} }
@ -1513,6 +1525,16 @@ static void dispatch_sendmms_recv(List *rl)
if (sheader) if (sheader)
HTTP_REPLACE_HEADER(rh, "X-Mbuni-Content-Header", octstr_get_cstr(sheader)); HTTP_REPLACE_HEADER(rh, "X-Mbuni-Content-Header", octstr_get_cstr(sheader));
if (validity) {
int diff = atoi(octstr_get_cstr(validity));
time_t t = time(NULL) + (diff *60);
Octstr *xt = date_format_http(t);
HTTP_REPLACE_HEADER(rh, "X-Mbuni-Expiry", octstr_get_cstr(xt));
octstr_destroy(xt);
}
/* Requests to make_and_queue below can block, but for now we don't care. */ /* Requests to make_and_queue below can block, but for now we don't care. */
if (ctype && data && !rb) { /* only send if no error. */ if (ctype && data && !rb) { /* only send if no error. */
int send_as_incoming = (send_type && int send_as_incoming = (send_type &&