mgcp: Be able to parse RQNT messages and reply to them

We do not implement the request for notification at all but
we will tell the server that we have received something.
This commit is contained in:
Holger Hans Peter Freyther 2011-01-25 23:33:54 +01:00
parent deb16184b7
commit ac0968e250
1 changed files with 25 additions and 0 deletions

View File

@ -87,6 +87,7 @@ static struct msgb *handle_create_con(struct mgcp_config *cfg, struct msgb *msg)
static struct msgb *handle_delete_con(struct mgcp_config *cfg, struct msgb *msg);
static struct msgb *handle_modify_con(struct mgcp_config *cfg, struct msgb *msg);
static struct msgb *handle_rsip(struct mgcp_config *cfg, struct msgb *msg);
static struct msgb *handle_noti_req(struct mgcp_config *cfg, struct msgb *msg);
static void create_transcoder(struct mgcp_endpoint *endp);
static void delete_transcoder(struct mgcp_endpoint *endp);
@ -121,6 +122,7 @@ static const struct mgcp_request mgcp_requests [] = {
MGCP_REQUEST("CRCX", handle_create_con, "CreateConnection")
MGCP_REQUEST("DLCX", handle_delete_con, "DeleteConnection")
MGCP_REQUEST("MDCX", handle_modify_con, "ModifiyConnection")
MGCP_REQUEST("RQNT", handle_noti_req, "NotificationRequest")
/* SPEC extension */
MGCP_REQUEST("RSIP", handle_rsip, "ReSetInProgress")
@ -821,6 +823,29 @@ static struct msgb *handle_rsip(struct mgcp_config *cfg, struct msgb *msg)
return NULL;
}
/*
* This can request like DTMF detection and forward, fax detection... it
* can also request when the notification should be send and such. We don't
* do this right now.
*/
static struct msgb *handle_noti_req(struct mgcp_config *cfg, struct msgb *msg)
{
struct mgcp_msg_ptr data_ptrs[6];
const char *trans_id;
struct mgcp_endpoint *endp;
int found;
found = mgcp_analyze_header(cfg, msg, data_ptrs, ARRAY_SIZE(data_ptrs), &trans_id, &endp);
if (found != 0)
return create_err_response(400, "RQNT", trans_id);
if (!endp->allocated) {
LOGP(DMGCP, LOGL_ERROR, "Endpoint is not used. 0x%x\n", ENDPOINT_NUMBER(endp));
return create_err_response(400, "RQNT", trans_id);
}
return create_ok_response(200, "RQNT", trans_id);
}
struct mgcp_config *mgcp_config_alloc(void)
{
struct mgcp_config *cfg;