added_address_of_invoking_proxy

Hinzufügen der Adresse des SIP-Proxy, der die session erstellt hat
(sowohl für command line interface als auch CDR) Nur UDP control
zunächst.

Author:    Frederic-Philippe Metz <Frederic.Metz@1und1.de>
pull/60/head
Frederic-Philippe Metz 11 years ago committed by Richard Fuchs
parent cccb0bfe75
commit a871cd7507

@ -2375,6 +2375,7 @@ void call_destroy(struct call *c) {
/* CDRs and statistics */ /* CDRs and statistics */
cdrbufcur += sprintf(cdrbufcur,"ci=%s, ",c->callid.s); cdrbufcur += sprintf(cdrbufcur,"ci=%s, ",c->callid.s);
cdrbufcur += sprintf(cdrbufcur,"created_from=%s", c->created_from);
for (l = c->monologues; l; l = l->next) { for (l = c->monologues; l; l = l->next) {
ml = l->data; ml = l->data;
if (_log_facility_cdr) { if (_log_facility_cdr) {

@ -338,6 +338,7 @@ struct call {
time_t deleted; time_t deleted;
time_t ml_deleted; time_t ml_deleted;
unsigned char tos; unsigned char tos;
char created_from[64];
}; };
struct local_interface { struct local_interface {

@ -134,7 +134,7 @@ fail:
return -1; return -1;
} }
static str *call_update_lookup_udp(char **out, struct callmaster *m, enum call_opmode opmode) { static str *call_update_lookup_udp(char **out, struct callmaster *m, enum call_opmode opmode, const char* addr) {
struct call *c; struct call *c;
struct call_monologue *monologue; struct call_monologue *monologue;
GQueue q = G_QUEUE_INIT; GQueue q = G_QUEUE_INIT;
@ -154,6 +154,11 @@ static str *call_update_lookup_udp(char **out, struct callmaster *m, enum call_o
STR_FMT(&callid)); STR_FMT(&callid));
return str_sprintf("%s 0 0.0.0.0\n", out[RE_UDP_COOKIE]); return str_sprintf("%s 0 0.0.0.0\n", out[RE_UDP_COOKIE]);
} }
if (addr) {
memcpy(c->created_from, addr, strlen(addr));
}
monologue = call_get_mono_dialogue(c, &fromtag, &totag); monologue = call_get_mono_dialogue(c, &fromtag, &totag);
if (!monologue) if (!monologue)
goto ml_fail; goto ml_fail;
@ -196,11 +201,11 @@ out:
return ret; return ret;
} }
str *call_update_udp(char **out, struct callmaster *m) { str *call_update_udp(char **out, struct callmaster *m, const char* addr) {
return call_update_lookup_udp(out, m, OP_OFFER); return call_update_lookup_udp(out, m, OP_OFFER, addr);
} }
str *call_lookup_udp(char **out, struct callmaster *m) { str *call_lookup_udp(char **out, struct callmaster *m) {
return call_update_lookup_udp(out, m, OP_ANSWER); return call_update_lookup_udp(out, m, OP_ANSWER, NULL);
} }

@ -24,7 +24,7 @@ str *call_lookup_tcp(char **, struct callmaster *);
void call_delete_tcp(char **, struct callmaster *); void call_delete_tcp(char **, struct callmaster *);
void calls_status_tcp(struct callmaster *, struct control_stream *); void calls_status_tcp(struct callmaster *, struct control_stream *);
str *call_update_udp(char **, struct callmaster *); str *call_update_udp(char **, struct callmaster *, const char*);
str *call_lookup_udp(char **, struct callmaster *); str *call_lookup_udp(char **, struct callmaster *);
str *call_delete_udp(char **, struct callmaster *); str *call_delete_udp(char **, struct callmaster *);
str *call_query_udp(char **, struct callmaster *); str *call_query_udp(char **, struct callmaster *);

@ -50,7 +50,7 @@ static void cli_incoming_list_callid(char* buffer, int len, struct callmaster* m
return; return;
} }
printlen = snprintf (replybuffer,(outbufend-replybuffer), "\ncallid: %30s | deletionmark:%4s | created:%12i\n\n", c->callid.s , c->ml_deleted?"yes":"no", (int)c->created); printlen = snprintf (replybuffer,(outbufend-replybuffer), "\ncallid: %30s | deletionmark:%4s | created:%12i | proxy:%s\n\n", c->callid.s , c->ml_deleted?"yes":"no", (int)c->created, c->created_from);
ADJUSTLEN(printlen,outbufend,replybuffer); ADJUSTLEN(printlen,outbufend,replybuffer);
for (l = c->monologues; l; l = l->next) { for (l = c->monologues; l; l = l->next) {
@ -130,7 +130,7 @@ static void cli_incoming_list(char* buffer, int len, struct callmaster* m, char*
while (g_hash_table_iter_next (&iter, &key, &value)) { while (g_hash_table_iter_next (&iter, &key, &value)) {
ptrkey = (str*)key; ptrkey = (str*)key;
call = (struct call*)value; call = (struct call*)value;
printlen = snprintf(replybuffer, outbufend-replybuffer, "callid: %30s | deletionmark:%4s | created:%12i\n", ptrkey->s, call->ml_deleted?"yes":"no", (int)call->created); printlen = snprintf(replybuffer, outbufend-replybuffer, "callid: %30s | deletionmark:%4s | created:%12i | proxy:%s\n", ptrkey->s, call->ml_deleted?"yes":"no", (int)call->created, call->created_from);
ADJUSTLEN(printlen,outbufend,replybuffer); ADJUSTLEN(printlen,outbufend,replybuffer);
} }
rwlock_unlock_r(&m->hashlock); rwlock_unlock_r(&m->hashlock);

@ -83,7 +83,7 @@ static void control_udp_incoming(struct obj *obj, str *buf, struct sockaddr_in6
} }
if (chrtoupper(out[RE_UDP_UL_CMD][0]) == 'U') if (chrtoupper(out[RE_UDP_UL_CMD][0]) == 'U')
reply = call_update_udp(out, u->callmaster); reply = call_update_udp(out, u->callmaster, addr);
else if (chrtoupper(out[RE_UDP_UL_CMD][0]) == 'L') else if (chrtoupper(out[RE_UDP_UL_CMD][0]) == 'L')
reply = call_lookup_udp(out, u->callmaster); reply = call_lookup_udp(out, u->callmaster);
else if (chrtoupper(out[RE_UDP_DQ_CMD][0]) == 'D') else if (chrtoupper(out[RE_UDP_DQ_CMD][0]) == 'D')

Loading…
Cancel
Save