diff --git a/apps/app_osplookup.c b/apps/app_osplookup.c index 7e6e0105b9..55216d4ebf 100755 --- a/apps/app_osplookup.c +++ b/apps/app_osplookup.c @@ -192,7 +192,10 @@ static int ospfinished_exec(struct ast_channel *chan, void *data) } if (chan->cdr) { start = chan->cdr->answer.tv_sec; - duration = time(NULL) - start; + if (start) + duration = time(NULL) - start; + else + duration = 0; } else ast_log(LOG_WARNING, "OSPFinish called on channel '%s' with no CDR!\n", chan->name); LOCAL_USER_ADD(u); diff --git a/res/res_osp.c b/res/res_osp.c index deac15c7bb..6270c4a72a 100755 --- a/res/res_osp.c +++ b/res/res_osp.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -434,6 +435,7 @@ int ast_osp_lookup(struct ast_channel *chan, char *provider, char *extension, ch char callednum[2048]=""; char destination[2048]=""; char token[2000]; + char tmp[256]="", *l, *n; OSPTCALLID *callid; OSPE_DEST_PROT prot; @@ -448,6 +450,16 @@ int ast_osp_lookup(struct ast_channel *chan, char *provider, char *extension, ch if (!callerid) callerid = ""; + strncpy(tmp, callerid, sizeof(tmp) - 1); + ast_callerid_parse(tmp, &n, &l); + if (!l) + l = ""; + else { + ast_shrink_phone_number(l); + if (!ast_isphonenumber(l)) + l = ""; + } + callerid = l; if (chan) { strncpy(uniqueid, chan->uniqueid, sizeof(uniqueid) - 1);