Added bridgin support for GSM and SIP
[lcr.git] / port.h
diff --git a/port.h b/port.h
index be2598f..d09ba0c 100644 (file)
--- a/port.h
+++ b/port.h
 
 /* type of port */
 #define        PORT_TYPE_NULL          0x0000
-#define PORT_CLASS_mISDN       0x0100
-#define PORT_CLASS_MASK                0xff00
-#define PORT_CLASS_mISDN_DSS1  0x0110
-#define PORT_CLASS_mISDN_GSM   0x0120
-#define PORT_CLASS_mISDN_MASK  0xfff0
+#define PORT_CLASS_mISDN       0x1000
+#define PORT_CLASS_DSS1                0x1100
+#define PORT_CLASS_DSS1_NT     0x1110
+#define PORT_CLASS_DSS1_TE     0x1120
+#define PORT_CLASS_SS5         0x1300
+#define PORT_CLASS_REMOTE      0x1400
+#define PORT_CLASS_SIP         0x2000
+#define PORT_CLASS_GSM         0x3000
+#define PORT_CLASS_GSM_BS      0x3100
+#define PORT_CLASS_GSM_MS      0x3200
+#define PORT_CLASS_MASK                0xf000
+#define PORT_CLASS_mISDN_MASK  0xff00
+#define PORT_CLASS_DSS1_MASK   0xfff0
+#define PORT_CLASS_GSM_MASK    0xff00
+#define PORT_CLASS_DIR_MASK    0x000f
+#define PORT_CLASS_DIR_IN      0x0001
+#define PORT_CLASS_DIR_OUT     0x0002
        /* nt-mode */
-#define        PORT_TYPE_DSS1_NT_IN    0x0111
-#define        PORT_TYPE_DSS1_NT_OUT   0x0112
+#define        PORT_TYPE_DSS1_NT_IN    0x1111
+#define        PORT_TYPE_DSS1_NT_OUT   0x1112
        /* te-mode */
-#define        PORT_TYPE_DSS1_TE_IN    0x0113
-#define        PORT_TYPE_DSS1_TE_OUT   0x0114
+#define        PORT_TYPE_DSS1_TE_IN    0x1121
+#define        PORT_TYPE_DSS1_TE_OUT   0x1122
        /* gsm */
-#define        PORT_TYPE_GSM_IN        0x0121
-#define        PORT_TYPE_GSM_OUT       0x0122
+#define        PORT_TYPE_GSM_BS_IN     0x3101
+#define        PORT_TYPE_GSM_BS_OUT    0x3102
+#define        PORT_TYPE_GSM_MS_IN     0x3201
+#define        PORT_TYPE_GSM_MS_OUT    0x3202
+       /* ss5 */
+#define        PORT_TYPE_SS5_IN        0x1311
+#define        PORT_TYPE_SS5_OUT       0x1312
+#define        PORT_TYPE_SS5_IDLE      0x1313
+       /* remote */
+#define        PORT_TYPE_REMOTE_IN     0x1411
+#define        PORT_TYPE_REMOTE_OUT    0x1412
+       /* SIP */
+#define        PORT_TYPE_SIP_IN        0x2001
+#define        PORT_TYPE_SIP_OUT       0x2002
        /* answering machine */
-#define        PORT_TYPE_VBOX_OUT      0x0311
+#define        PORT_TYPE_VBOX_OUT      0xf111
 
 
 enum { /* states of call */
@@ -87,6 +111,8 @@ enum { /* event list from listening to tty */
 #define RECORD_BUFFER_LENGTH   1024 // must be a binary border & must be greater 256, because 256 will be written if buffer overflows
 #define RECORD_BUFFER_MASK     1023
 
+#define PORT_TRANSMIT          256 // how much to transmit via bridge, if it is not defined by received data length
+
 /* structure of epoint_list */
 struct epoint_list {
        struct epoint_list      *next;
@@ -123,6 +149,16 @@ struct port_settings {
        int no_seconds;
 };
 
+/* port bridge instance */
+struct port_bridge {
+       struct port_bridge *next;               /* next bridge node */
+       unsigned int bridge_id;                 /* unique ID to identify bridge */
+       class Port *sunrise;                    /* one side of the bridge */
+       class Port *sunset;                     /* other side of the bridge */
+};
+
+extern struct port_bridge *p_bridge_first;
+
 /* generic port class */
 class Port
 {
@@ -132,11 +168,11 @@ class Port
        virtual ~Port();
        class Port *next;                       /* next port in list */
        int p_type;                             /* type of port */
-       virtual int handler(void);
        virtual int message_epoint(unsigned int epoint_id, int message, union parameter *param);
        virtual void set_echotest(int echotest);
        virtual void set_tone(const char *dir, const char *name);
        virtual int read_audio(unsigned char *buffer, int length);
+       virtual void update_load(void);
 
        struct port_settings p_settings;
        
@@ -165,6 +201,12 @@ class Port
        /* endpoint relation */
        struct epoint_list *p_epointlist;       /* endpoint relation */
 
+       /* audio bridging */
+       struct port_bridge *p_bridge;           /* linked to a port bridge or NULL */
+       void bridge(unsigned int bridge_id);    /* join a bridge */
+       int bridge_tx(unsigned char *data, int len); /* used to transmit data to remote port */
+       virtual int bridge_rx(unsigned char *data, int len); /* function to be inherited, so data is received */
+
        /* state */
        int p_state;                            /* state of port */
        void new_state(int state);              /* set new state */
@@ -200,6 +242,7 @@ class Port
        int p_record_anon_ignore;
        char p_record_vbox_email[128];
        int p_record_vbox_email_file;
+       virtual void update_rxoff(void);        /* inherited by mISDNport, to control rxoff */
 
        void free_epointlist(struct epoint_list *epointlist);
        void free_epointid(unsigned int epoint_id);