mgcp/rtp: Only patch SSRC once after MDCX if enabled

Currently the output SSRC is always forced to be the same if SSRC
patching is enabled.

This patch modifies this to optionally restrict the number of SSRC
changes that will be corrected.

Note that the configuration only allows for the 'once' mode and 'off'.

Sponsored-by: On-Waves ehf
diff --git a/openbsc/include/openbsc/mgcp_internal.h b/openbsc/include/openbsc/mgcp_internal.h
index b16bd49..255161f 100644
--- a/openbsc/include/openbsc/mgcp_internal.h
+++ b/openbsc/include/openbsc/mgcp_internal.h
@@ -85,7 +85,7 @@
 	char *fmtp_extra;
 
 	/* RTP patching */
-	int force_constant_ssrc;
+	int force_constant_ssrc; /* -1: always, 0: don't, 1: once */
 	int force_constant_timing;
 
 	/*
diff --git a/openbsc/src/libmgcp/mgcp_network.c b/openbsc/src/libmgcp/mgcp_network.c
index abb48f5..79c9e1a 100644
--- a/openbsc/src/libmgcp/mgcp_network.c
+++ b/openbsc/src/libmgcp/mgcp_network.c
@@ -280,6 +280,8 @@
 				timestamp;
 			state->patch = 1;
 			ssrc = state->orig_ssrc;
+			if (rtp_end->force_constant_ssrc != -1)
+				rtp_end->force_constant_ssrc -= 1;
 
 			LOGP(DMGCP, LOGL_NOTICE,
 			     "SSRC patching enabled on 0x%x SSRC: %u "
diff --git a/openbsc/src/libmgcp/mgcp_protocol.c b/openbsc/src/libmgcp/mgcp_protocol.c
index c703bec..b8e1ecd 100644
--- a/openbsc/src/libmgcp/mgcp_protocol.c
+++ b/openbsc/src/libmgcp/mgcp_protocol.c
@@ -619,8 +619,10 @@
 {
 	struct mgcp_trunk_config *tcfg = endp->tcfg;
 
+	int patch_ssrc = expect_ssrc_change && tcfg->force_constant_ssrc;
+
 	rtp->force_constant_timing = tcfg->force_constant_timing;
-	rtp->force_constant_ssrc = tcfg->force_constant_ssrc;
+	rtp->force_constant_ssrc = patch_ssrc ? 1 : 0;
 
 	LOGP(DMGCP, LOGL_DEBUG,
 	     "Configuring RTP endpoint: local port %d%s%s\n",