summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas.Eversberg <jolly@eversberg.eu>2010-08-01 10:42:11 +0000
committerAndreas.Eversberg <jolly@eversberg.eu>2010-08-01 10:42:11 +0000
commit85253cf06d038cc7083dae9b71e0e0124ceda80e (patch)
treeca62a6c516b232cc9142dbb82f8f46668d88598d
parentef0377b11cac3a432238af03686ad16e0926d580 (diff)
[layer23] Correctly release a call, if not yet acknowledged by the network
-rw-r--r--src/host/layer23/include/osmocom/bb/mobile/mncc.h1
-rw-r--r--src/host/layer23/src/mobile/mnccms.c7
2 files changed, 7 insertions, 1 deletions
diff --git a/src/host/layer23/include/osmocom/bb/mobile/mncc.h b/src/host/layer23/include/osmocom/bb/mobile/mncc.h
index d1d4d38f..37e1affc 100644
--- a/src/host/layer23/include/osmocom/bb/mobile/mncc.h
+++ b/src/host/layer23/include/osmocom/bb/mobile/mncc.h
@@ -36,6 +36,7 @@ struct gsm_call {
uint32_t callref;
+ uint8_t init; /* call has been initiated, no response yet */
uint8_t hold; /* call on hold */
uint8_t ring; /* call is ringing/knocking */
};
diff --git a/src/host/layer23/src/mobile/mnccms.c b/src/host/layer23/src/mobile/mnccms.c
index 70c33c89..12f198e2 100644
--- a/src/host/layer23/src/mobile/mnccms.c
+++ b/src/host/layer23/src/mobile/mnccms.c
@@ -123,6 +123,9 @@ int mncc_recv_mobile(struct osmocom_ms *ms, int msg_type, void *arg)
llist_add_tail(&call->entry, &call_list);
}
+ /* not in initiated state anymore */
+ call->init = 0;
+
switch (msg_type) {
case MNCC_DISC_IND:
vty_notify(ms, NULL);
@@ -302,6 +305,7 @@ int mncc_call(struct osmocom_ms *ms, char *number)
if (!call)
return -ENOMEM;
call->callref = new_callref++;
+ call->init = 1;
llist_add_tail(&call->entry, &call_list);
memset(&setup, 0, sizeof(struct gsm_mncc));
@@ -358,7 +362,8 @@ int mncc_hangup(struct osmocom_ms *ms)
disc.callref = found->callref;
mncc_set_cause(&disc, GSM48_CAUSE_LOC_USER,
GSM48_CC_CAUSE_NORM_CALL_CLEAR);
- return mncc_send(ms, MNCC_DISC_REQ, &disc);
+ return mncc_send(ms, (call->init) ? MNCC_REL_REQ : MNCC_DISC_REQ,
+ &disc);
}
int mncc_answer(struct osmocom_ms *ms)