From 2a3888bfac3075957de3f20a4709aef3f8b5e5c8 Mon Sep 17 00:00:00 2001
From: Mark Spencer <markster@digium.com>
Date: Sun, 29 Jun 2003 14:36:21 +0000
Subject: [PATCH] Accept MGCP keepalive

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1135 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 channels/chan_mgcp.c | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/channels/chan_mgcp.c b/channels/chan_mgcp.c
index 27a962bd33..faeb828d71 100755
--- a/channels/chan_mgcp.c
+++ b/channels/chan_mgcp.c
@@ -2139,15 +2139,22 @@ static int handle_request(struct mgcp_subchannel *sub, struct mgcp_request *req,
     }
 	/* Clear out potential response */
 	if (!strcasecmp(req->verb, "RSIP")) {
-		dump_queue(p);
-		if (option_verbose > 2) {
-			ast_verbose(VERBOSE_PREFIX_3 "Resetting interface %s@%s\n", p->name, p->parent->name);
-        }
-		if (sub->owner) {
-			ast_softhangup(sub->owner, AST_SOFTHANGUP_DEV);
-        }
-		transmit_response(sub, "200", req, "OK");
-		transmit_notify_request(sub, "");
+		/* Test if this RSIP request is just a keepalive */
+		if(!strcasecmp( get_header(req, "RM"), "X-keepalive")) {
+			if (option_verbose > 2)
+				ast_verbose(VERBOSE_PREFIX_3 "Received keepalive request from %s@%s\n", p->name, p->parent->name);
+			transmit_response(sub, "200", req, "OK");
+		} else {
+			dump_queue(p);
+			if (option_verbose > 2) {
+				ast_verbose(VERBOSE_PREFIX_3 "Resetting interface %s@%s\n", p->name, p->parent->name);
+		        }
+			if (sub->owner) {
+				ast_softhangup(sub->owner, AST_SOFTHANGUP_DEV);
+	        	}
+			transmit_response(sub, "200", req, "OK");
+			transmit_notify_request(sub, "");
+		}
 	} else if (!strcasecmp(req->verb, "NTFY")) {
 		/* Acknowledge and be sure we keep looking for the same things */
 		transmit_response(sub, "200", req, "OK");
-- 
GitLab