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;
unsigned char tos;
char *created_from;
struct sockaddr_in6 created_from_addr;
};
struct local_interface {

@ -134,7 +134,9 @@ fail:
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_monologue *monologue;
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]);
}
if (addr) {
if (!c->created_from && addr) {
c->created_from = call_strdup(c, addr);
c->created_from_addr = *sin;
}
monologue = call_get_mono_dialogue(c, &fromtag, &totag);
@ -207,11 +210,11 @@ out:
return ret;
}
str *call_update_udp(char **out, struct callmaster *m, const char* addr) {
return call_update_lookup_udp(out, m, OP_OFFER, 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, sin);
}
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,
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;
char *errstr;
@ -631,8 +635,9 @@ static const char *call_offer_answer_ng(bencode_item_t *input, struct callmaster
if (!call)
goto out;
if (addr) {
if (!call->created_from && 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
* need to hold a ref until we're done sending the reply */
@ -680,12 +685,14 @@ out:
return errstr;
}
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 char *call_offer_ng(bencode_item_t *input, struct callmaster *m, bencode_item_t *output, const char* 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) {
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) {

@ -13,6 +13,7 @@ struct call;
struct call_stats;
struct callmaster;
struct control_stream;
struct sockaddr_in6;
extern int trust_address_def;
@ -24,12 +25,13 @@ str *call_lookup_tcp(char **, struct callmaster *);
void call_delete_tcp(char **, struct callmaster *);
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_delete_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_delete_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"))
bencode_dictionary_add_string(resp, "result", "pong");
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"))
errstr = call_answer_ng(dict, c->callmaster, resp);
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')
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')
reply = call_lookup_udp(out, u->callmaster);
else if (chrtoupper(out[RE_UDP_DQ_CMD][0]) == 'D')

Loading…
Cancel
Save