aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2010-04-07 10:51:27 +0200
committerHolger Hans Peter Freyther <zecke@selfish.org>2010-04-07 22:52:25 +0200
commit408cc4ace99a9163136af601549a5d1b67a168c7 (patch)
tree7457aa49ef0c944ecc8fc4feb4c9e32a9f6d6a0f
parentb4b135efbf17f81a3faccb488ca35a5086adc618 (diff)
[mgcp] Add an option to allow using reallocing an endpoint
For some mode of operation it can be acceptable to reallocate an already allocated endpoint. This can be the case when we only deal with one call agent that is keeping track of the endpoint but slightly confused.
-rw-r--r--openbsc/include/openbsc/mgcp.h3
-rw-r--r--openbsc/src/mgcp/mgcp_protocol.c10
2 files changed, 11 insertions, 2 deletions
diff --git a/openbsc/include/openbsc/mgcp.h b/openbsc/include/openbsc/mgcp.h
index c4081b109..71b7fc14e 100644
--- a/openbsc/include/openbsc/mgcp.h
+++ b/openbsc/include/openbsc/mgcp.h
@@ -97,6 +97,9 @@ struct mgcp_config {
char *forward_ip;
int forward_port;
+ /* spec handling */
+ int force_realloc;
+
mgcp_change change_cb;
mgcp_policy policy_cb;
mgcp_reset reset_cb;
diff --git a/openbsc/src/mgcp/mgcp_protocol.c b/openbsc/src/mgcp/mgcp_protocol.c
index 7c8b460fa..76eb7c2a0 100644
--- a/openbsc/src/mgcp/mgcp_protocol.c
+++ b/openbsc/src/mgcp/mgcp_protocol.c
@@ -386,8 +386,14 @@ static struct msgb *handle_create_con(struct mgcp_config *cfg, struct msgb *msg)
return create_response(500, "CRCX", trans_id);
if (endp->ci != CI_UNUSED) {
- LOGP(DMGCP, LOGL_ERROR, "Endpoint is already used. 0x%x\n", ENDPOINT_NUMBER(endp));
- return create_response(500, "CRCX", trans_id);
+ if (cfg->force_realloc) {
+ LOGP(DMGCP, LOGL_NOTICE, "Endpoint 0x%x already allocated. Forcing realloc.\n",
+ ENDPOINT_NUMBER(endp));
+ } else {
+ LOGP(DMGCP, LOGL_ERROR, "Endpoint is already used. 0x%x\n",
+ ENDPOINT_NUMBER(endp));
+ return create_response(500, "CRCX", trans_id);
+ }
}
/* parse CallID C: and LocalParameters L: */