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:
Holger Hans Peter Freyther 2010-09-19 04:36:07 +08:00
parent b98ba72e0a
commit f2eedff052
3 changed files with 29 additions and 0 deletions

View File

@ -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

View File

@ -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));
}

View File

@ -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;
}