Data-Over-Voice
[lcr.git] / mncc.h
diff --git a/mncc.h b/mncc.h
index 04b3241..1cd45f8 100644 (file)
--- a/mncc.h
+++ b/mncc.h
@@ -1,4 +1,6 @@
 
+#include <stdint.h>
+
 #define MNCC_SETUP_REQ         0x0101
 #define MNCC_SETUP_IND         0x0102
 #define MNCC_SETUP_RSP         0x0103
 
 #define GSM_TCHF_FRAME         0x0300
 #define GSM_TCHF_FRAME_EFR     0x0301
+#define GSM_TCHH_FRAME         0x0302
+#define GSM_TCH_FRAME_AMR      0x0303
+#define GSM_BAD_FRAME          0x03ff
+
+#define MNCC_SOCKET_HELLO      0x0400
 
 #define GSM_MAX_FACILITY       128
 #define GSM_MAX_SSVERSION      128
 #define GSM_MAX_SSVERSION      128
 #define GSM_MAX_USERUSER       128
 
+/* GSM 04.08 Bearer Capability: Information Transfer Capability */
+enum gsm48_bcap_itcap {
+       GSM48_BCAP_ITCAP_SPEECH         = 0,
+       GSM48_BCAP_ITCAP_UNR_DIG_INF    = 1,
+       GSM48_BCAP_ITCAP_3k1_AUDIO      = 2,
+       GSM48_BCAP_ITCAP_FAX_G3         = 3,
+       GSM48_BCAP_ITCAP_OTHER          = 5,
+       GSM48_BCAP_ITCAP_RESERVED       = 7,
+};
+
+/* GSM 04.08 Bearer Capability: Transfer Mode */
+enum gsm48_bcap_tmod {
+       GSM48_BCAP_TMOD_CIRCUIT         = 0,
+       GSM48_BCAP_TMOD_PACKET          = 1,
+};
+
+/* GSM 04.08 Bearer Capability: Coding Standard */
+enum gsm48_bcap_coding {
+       GSM48_BCAP_CODING_GSM_STD       = 0,
+};
+
+/* GSM 04.08 Bearer Capability: Radio Channel Requirements */
+enum gsm48_bcap_rrq {
+       GSM48_BCAP_RRQ_FR_ONLY  = 1,
+       GSM48_BCAP_RRQ_DUAL_HR  = 2,
+       GSM48_BCAP_RRQ_DUAL_FR  = 3,
+};
+
+/* GSM 04.08 Bearer Capability: Rate Adaption */
+enum gsm48_bcap_ra {
+       GSM48_BCAP_RA_NONE      = 0,
+       GSM48_BCAP_RA_V110_X30  = 1,
+       GSM48_BCAP_RA_X31       = 2,
+       GSM48_BCAP_RA_OTHER     = 3,
+};
+
+/* GSM 04.08 Bearer Capability: Signalling access protocol */
+enum gsm48_bcap_sig_access {
+       GSM48_BCAP_SA_I440_I450 = 1,
+       GSM48_BCAP_SA_X21       = 2,
+       GSM48_BCAP_SA_X28_DP_IN = 3,
+       GSM48_BCAP_SA_X28_DP_UN = 4,
+       GSM48_BCAP_SA_X28_NDP   = 5,
+       GSM48_BCAP_SA_X32       = 6,
+};
+
+/* GSM 04.08 Bearer Capability: User Rate */
+enum gsm48_bcap_user_rate {
+       GSM48_BCAP_UR_300       = 1,
+       GSM48_BCAP_UR_1200      = 2,
+       GSM48_BCAP_UR_2400      = 3,
+       GSM48_BCAP_UR_4800      = 4,
+       GSM48_BCAP_UR_9600      = 5,
+       GSM48_BCAP_UR_12000     = 6,
+       GSM48_BCAP_UR_1200_75   = 7,
+};
+
+/* GSM 04.08 Bearer Capability: Parity */
+enum gsm48_bcap_parity {
+       GSM48_BCAP_PAR_ODD      = 0,
+       GSM48_BCAP_PAR_EVEN     = 2,
+       GSM48_BCAP_PAR_NONE     = 3,
+       GSM48_BCAP_PAR_ZERO     = 4,
+       GSM48_BCAP_PAR_ONE      = 5,
+};
+
+/* GSM 04.08 Bearer Capability: Intermediate Rate */
+enum gsm48_bcap_interm_rate {
+       GSM48_BCAP_IR_8k        = 2,
+       GSM48_BCAP_IR_16k       = 3,
+};
+
+/* GSM 04.08 Bearer Capability: Transparency */
+enum gsm48_bcap_transp {
+       GSM48_BCAP_TR_TRANSP    = 0,
+       GSM48_BCAP_TR_RLP       = 1,
+       GSM48_BCAP_TR_TR_PREF   = 2,
+       GSM48_BCAP_TR_RLP_PREF  = 3,
+};
+
+/* GSM 04.08 Bearer Capability: Modem Type */
+enum gsm48_bcap_modem_type {
+       GSM48_BCAP_MT_NONE      = 0,
+       GSM48_BCAP_MT_V21       = 1,
+       GSM48_BCAP_MT_V22       = 2,
+       GSM48_BCAP_MT_V22bis    = 3,
+       GSM48_BCAP_MT_V23       = 4,
+       GSM48_BCAP_MT_V26ter    = 5,
+       GSM48_BCAP_MT_V32       = 6,
+       GSM48_BCAP_MT_UNDEF     = 7,
+       GSM48_BCAP_MT_AUTO_1    = 8,
+};
+
+/* GSM 04.08 Bearer Capability: Speech Version Indication */
+enum gsm48_bcap_speech_ver {
+       GSM48_BCAP_SV_FR        = 0,
+       GSM48_BCAP_SV_HR        = 1,
+       GSM48_BCAP_SV_EFR       = 2,
+       GSM48_BCAP_SV_AMR_F     = 4,
+       GSM48_BCAP_SV_AMR_H     = 5,
+};
+
 /* Expanded fields from GSM TS 04.08, Table 10.5.102 */
 struct gsm_mncc_bearer_cap {
        int             transfer;       /* Information Transfer Capability */
@@ -90,6 +199,18 @@ struct gsm_mncc_bearer_cap {
        int             radio;          /* Radio Channel Requirement */
        int             speech_ctm;     /* CTM text telephony indication */
        int             speech_ver[8];  /* Speech version indication */
+       struct {
+               enum gsm48_bcap_ra              rate_adaption;
+               enum gsm48_bcap_sig_access      sig_access;
+               int                             async;
+               int                             nr_stop_bits;
+               int                             nr_data_bits;
+               enum gsm48_bcap_user_rate       user_rate;
+               enum gsm48_bcap_parity          parity;
+               enum gsm48_bcap_interm_rate     interm_rate;
+               enum gsm48_bcap_transp          transp;
+               enum gsm48_bcap_modem_type      modem_type;
+       } data;
 };
 
 struct gsm_mncc_number {
@@ -145,13 +266,24 @@ enum {
        GSM_MNCC_BCAP_RESERVED  = 7,
 };
 
+enum {
+       GSM_LCHAN_NONE,
+       GSM_LCHAN_SDCCH,
+       GSM_LCHAN_TCH_F,
+       GSM_LCHAN_TCH_H,
+       GSM_LCHAN_UNKNOWN,
+       GSM_LCHAN_CCCH,
+       GSM_LCHAN_PDTCH,
+       _GSM_LCHAN_MAX
+};
+
 struct gsm_mncc {
        /* context based information */
-       u_int32_t       msg_type;
-       u_int32_t       callref;
+       uint32_t        msg_type;
+       uint32_t        callref;
 
        /* which fields are present */
-       u_int32_t       fields;
+       uint32_t        fields;
 
        /* data derived informations (MNCC_F_ based) */
        struct gsm_mncc_bearer_cap      bearer_cap;
@@ -183,16 +315,33 @@ struct gsm_mncc {
 };
 
 struct gsm_data_frame {
-       u_int32_t       msg_type;
-       u_int32_t       callref;
+       uint32_t        msg_type;
+       uint32_t        callref;
        unsigned char   data[0];
 };
 
 struct gsm_mncc_rtp {
-       uint32_t        msg_type;
-       uint32_t        callref;
-       uint32_t        ip;
-       uint16_t        port;
+       u_int32_t       msg_type;
+       u_int32_t       callref;
+       u_int32_t       ip;
+       u_int16_t       port;
+       u_int32_t       payload_type;
+       u_int32_t       payload_msg_type;
 };
 
 
+#define MNCC_SOCK_VERSION      5
+struct gsm_mncc_hello {
+       uint32_t        msg_type;
+       uint32_t        version;
+
+       /* send the sizes of the structs */
+       uint32_t        mncc_size;
+       uint32_t        data_frame_size;
+
+       /* send some offsets */
+       uint32_t        called_offset;
+       uint32_t        signal_offset;
+       uint32_t        emergency_offset;
+       uint32_t        lchan_type_offset;
+};