nat: Send a transcoder reset on start up.
The transcoder RESET is using the same extensions to reset all endpoints on a remote site. This makes sure that all allocations can be made in a properly configured network.
This commit is contained in:
parent
b98ba72e0a
commit
f2eedff052
|
@ -146,6 +146,7 @@ int mgcp_parse_config(const char *config_file, struct mgcp_config *cfg);
|
|||
int mgcp_vty_init(void);
|
||||
int mgcp_endpoints_allocate(struct mgcp_config *cfg);
|
||||
void mgcp_free_endp(struct mgcp_endpoint *endp);
|
||||
int mgcp_reset_transcoder(struct mgcp_config *cfg);
|
||||
|
||||
/*
|
||||
* format helper functions
|
||||
|
|
|
@ -951,3 +951,22 @@ static void delete_transcoder(struct mgcp_endpoint *endp)
|
|||
send_dlcx(endp, in_endp);
|
||||
send_dlcx(endp, out_endp);
|
||||
}
|
||||
|
||||
int mgcp_reset_transcoder(struct mgcp_config *cfg)
|
||||
{
|
||||
struct sockaddr_in addr;
|
||||
|
||||
if (!cfg->transcoder_ip)
|
||||
return -1;
|
||||
|
||||
static const char mgcp_reset[] = {
|
||||
"RSIP 1 13@mgw MGCP 1.0\r\n"
|
||||
};
|
||||
|
||||
memset(&addr, 0, sizeof(addr));
|
||||
addr.sin_family = AF_INET;
|
||||
addr.sin_addr = cfg->transcoder_in;
|
||||
addr.sin_port = htons(2427);
|
||||
return sendto(cfg->gw_fd.bfd.fd, mgcp_reset, sizeof mgcp_reset -1, 0,
|
||||
(struct sockaddr *) &addr, sizeof(addr));
|
||||
}
|
||||
|
|
|
@ -663,6 +663,15 @@ int bsc_mgcp_nat_init(struct bsc_nat *nat)
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (mgcp_reset_transcoder(cfg) < 0) {
|
||||
LOGP(DMGCP, LOGL_ERROR, "Failed to send packet to the transcoder.\n");
|
||||
talloc_free(nat->bsc_endpoints);
|
||||
nat->bsc_endpoints = NULL;
|
||||
close(cfg->gw_fd.bfd.fd);
|
||||
cfg->gw_fd.bfd.fd = -1;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue