MT#10583 remember the "created from" address in raw format

pull/69/head
Richard Fuchs 10 years ago
parent a0068f4f02
commit caba5be677

@ -360,6 +360,7 @@ struct call {
time_t ml_deleted; time_t ml_deleted;
unsigned char tos; unsigned char tos;
char *created_from; char *created_from;
struct sockaddr_in6 created_from_addr;
}; };
struct local_interface { struct local_interface {

@ -134,7 +134,9 @@ fail:
return -1; return -1;
} }
static str *call_update_lookup_udp(char **out, struct callmaster *m, enum call_opmode opmode, const char* addr) { static str *call_update_lookup_udp(char **out, struct callmaster *m, enum call_opmode opmode, const char* addr,
const struct sockaddr_in6 *sin)
{
struct call *c; struct call *c;
struct call_monologue *monologue; struct call_monologue *monologue;
GQueue q = G_QUEUE_INIT; GQueue q = G_QUEUE_INIT;
@ -155,8 +157,9 @@ static str *call_update_lookup_udp(char **out, struct callmaster *m, enum call_o
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) { if (!c->created_from && addr) {
c->created_from = call_strdup(c, addr); c->created_from = call_strdup(c, addr);
c->created_from_addr = *sin;
} }
monologue = call_get_mono_dialogue(c, &fromtag, &totag); monologue = call_get_mono_dialogue(c, &fromtag, &totag);
@ -207,11 +210,11 @@ out:
return ret; return ret;
} }
str *call_update_udp(char **out, struct callmaster *m, const char* addr) { str *call_update_udp(char **out, struct callmaster *m, const char* addr, const struct sockaddr_in6 *sin) {
return call_update_lookup_udp(out, m, OP_OFFER, addr); return call_update_lookup_udp(out, m, OP_OFFER, addr, sin);
} }
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, NULL); return call_update_lookup_udp(out, m, OP_ANSWER, NULL, NULL);
} }
@ -592,7 +595,8 @@ static void call_ng_process_flags(struct sdp_ng_flags *out, bencode_item_t *inpu
} }
static const char *call_offer_answer_ng(bencode_item_t *input, struct callmaster *m, static const char *call_offer_answer_ng(bencode_item_t *input, struct callmaster *m,
bencode_item_t *output, enum call_opmode opmode, const char* addr) bencode_item_t *output, enum call_opmode opmode, const char* addr,
const struct sockaddr_in6 *sin)
{ {
str sdp, fromtag, totag = STR_NULL, callid; str sdp, fromtag, totag = STR_NULL, callid;
char *errstr; char *errstr;
@ -631,8 +635,9 @@ static const char *call_offer_answer_ng(bencode_item_t *input, struct callmaster
if (!call) if (!call)
goto out; goto out;
if (addr) { if (!call->created_from && addr) {
call->created_from = call_strdup(call, addr); call->created_from = call_strdup(call, addr);
call->created_from_addr = *sin;
} }
/* At least the random ICE strings are contained within the call struct, so we /* At least the random ICE strings are contained within the call struct, so we
* need to hold a ref until we're done sending the reply */ * need to hold a ref until we're done sending the reply */
@ -680,12 +685,14 @@ out:
return errstr; return errstr;
} }
const char *call_offer_ng(bencode_item_t *input, struct callmaster *m, bencode_item_t *output, const char* addr) { const char *call_offer_ng(bencode_item_t *input, struct callmaster *m, bencode_item_t *output, const char* addr,
return call_offer_answer_ng(input, m, output, OP_OFFER, addr); const struct sockaddr_in6 *sin)
{
return call_offer_answer_ng(input, m, output, OP_OFFER, addr, sin);
} }
const char *call_answer_ng(bencode_item_t *input, struct callmaster *m, bencode_item_t *output) { const char *call_answer_ng(bencode_item_t *input, struct callmaster *m, bencode_item_t *output) {
return call_offer_answer_ng(input, m, output, OP_ANSWER, NULL); return call_offer_answer_ng(input, m, output, OP_ANSWER, NULL, NULL);
} }
const char *call_delete_ng(bencode_item_t *input, struct callmaster *m, bencode_item_t *output) { const char *call_delete_ng(bencode_item_t *input, struct callmaster *m, bencode_item_t *output) {

@ -13,6 +13,7 @@ struct call;
struct call_stats; struct call_stats;
struct callmaster; struct callmaster;
struct control_stream; struct control_stream;
struct sockaddr_in6;
extern int trust_address_def; extern int trust_address_def;
@ -24,12 +25,13 @@ 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 *, const char*); str *call_update_udp(char **, struct callmaster *, const char*, const struct sockaddr_in6 *);
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 *);
const char *call_offer_ng(bencode_item_t *, struct callmaster *, bencode_item_t *, const char*); const char *call_offer_ng(bencode_item_t *, struct callmaster *, bencode_item_t *, const char*,
const struct sockaddr_in6 *);
const char *call_answer_ng(bencode_item_t *, struct callmaster *, bencode_item_t *); const char *call_answer_ng(bencode_item_t *, struct callmaster *, bencode_item_t *);
const char *call_delete_ng(bencode_item_t *, struct callmaster *, bencode_item_t *); const char *call_delete_ng(bencode_item_t *, struct callmaster *, bencode_item_t *);
const char *call_query_ng(bencode_item_t *, struct callmaster *, bencode_item_t *); const char *call_query_ng(bencode_item_t *, struct callmaster *, bencode_item_t *);

@ -111,7 +111,7 @@ static void control_ng_incoming(struct obj *obj, str *buf, struct sockaddr_in6 *
if (!str_cmp(&cmd, "ping")) if (!str_cmp(&cmd, "ping"))
bencode_dictionary_add_string(resp, "result", "pong"); bencode_dictionary_add_string(resp, "result", "pong");
else if (!str_cmp(&cmd, "offer")) else if (!str_cmp(&cmd, "offer"))
errstr = call_offer_ng(dict, c->callmaster, resp, addr); errstr = call_offer_ng(dict, c->callmaster, resp, addr, sin);
else if (!str_cmp(&cmd, "answer")) else if (!str_cmp(&cmd, "answer"))
errstr = call_answer_ng(dict, c->callmaster, resp); errstr = call_answer_ng(dict, c->callmaster, resp);
else if (!str_cmp(&cmd, "delete")) else if (!str_cmp(&cmd, "delete"))

@ -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, addr); reply = call_update_udp(out, u->callmaster, addr, sin);
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