src: use new libosmogsm and include/osmocom/[gsm|core] path to headers
[osmocom-bb.git] / src / host / layer23 / src / mobile / gsm48_cc.c
index 12dc3be..b881205 100644 (file)
 #include <string.h>
 #include <stdlib.h>
 
-#include <osmocore/msgb.h>
-#include <osmocore/utils.h>
-#include <osmocore/gsm48.h>
-#include <osmocore/talloc.h>
+#include <osmocom/core/msgb.h>
+#include <osmocom/core/utils.h>
+#include <osmocom/gsm/gsm48.h>
+#include <osmocom/core/talloc.h>
 
 #include <osmocom/bb/common/logging.h>
 #include <osmocom/bb/common/osmocom_data.h>
@@ -451,6 +451,24 @@ static int gsm48_cc_rx_status_enq(struct gsm_trans *trans, struct msgb *msg)
        return gsm48_cc_tx_status(trans, GSM48_CC_CAUSE_RESP_STATUS_INQ);
 }
 
+static int gsm48_cc_rx_status(struct gsm_trans *trans, struct msgb *msg)
+{
+       struct gsm48_hdr *gh = msgb_l3(msg);
+       unsigned int payload_len = msgb_l3len(msg) - sizeof(*gh);
+       struct gsm_mncc_cause cause;
+
+       if (payload_len < 1 || payload_len < gh->data[0] + 1) {
+               LOGP(DCC, LOGL_NOTICE, "Short read of status message "
+                       "error.\n");
+               return -EINVAL;
+       }
+       gsm48_decode_cause(&cause, gh->data);
+
+       LOGP(DCC, LOGL_INFO, "received STATUS (cause %d)\n", cause.value);
+
+       return 0;
+}
+
 /*
  * process handlers (mobile originating call establish)
  */
@@ -685,7 +703,7 @@ static int gsm48_cc_rx_alerting(struct gsm_trans *trans, struct msgb *msg)
        struct tlv_parsed tp;
        struct gsm_mncc alerting;
        
-       LOGP(DCC, LOGL_INFO, "sending ALERTING\n");
+       LOGP(DCC, LOGL_INFO, "received ALERTING\n");
 
        gsm48_stop_cc_timer(trans);
        /* no T301 in MS call control */
@@ -699,7 +717,6 @@ static int gsm48_cc_rx_alerting(struct gsm_trans *trans, struct msgb *msg)
                gsm48_decode_facility(&alerting.facility,
                                TLVP_VAL(&tp, GSM48_IE_FACILITY)-1);
        }
-
        /* progress */
        if (TLVP_PRESENT(&tp, GSM48_IE_PROGR_IND)) {
                alerting.fields |= MNCC_F_PROGRESS;
@@ -1983,6 +2000,9 @@ static struct datastate {
        {ALL_STATES, /* 8.4 */
         GSM48_MT_CC_STATUS_ENQ, gsm48_cc_rx_status_enq},
 
+       {ALL_STATES,
+        GSM48_MT_CC_STATUS, gsm48_cc_rx_status},
+
        {ALL_STATES, /* 5.5.7.2 */
         GSM48_MT_CC_START_DTMF_ACK, gsm48_cc_rx_start_dtmf_ack},