aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
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 10:51:27 +0200
commit3a6b1a41fbd825b2e163f8b98621c981ee16a54b (patch)
tree26f4fc8cba799573af8b0edfb0aba96c4a165d64 /openbsc
parent1b5b3bbfdb349104450bc16611509d4f50892901 (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.
Diffstat (limited to 'openbsc')
-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 778a1f116..bf97f96a7 100644
--- a/openbsc/include/openbsc/mgcp.h
+++ b/openbsc/include/openbsc/mgcp.h
@@ -104,6 +104,9 @@ struct mgcp_config {
unsigned int number_endpoints;
struct mgcp_endpoint *endpoints;
+ /* spec handling */
+ int force_realloc;
+
/* callback functionality */
mgcp_change change_cb;
mgcp_policy policy_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: */