Add conference mixing to LCR's internal bridge
[lcr.git] / port.h
diff --git a/port.h b/port.h
index d09ba0c..5ecbbbb 100644 (file)
--- a/port.h
+++ b/port.h
 #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_REMOTE      0x4000
 #define PORT_CLASS_MASK                0xf000
 #define PORT_CLASS_mISDN_MASK  0xff00
 #define PORT_CLASS_DSS1_MASK   0xfff0
@@ -47,8 +47,8 @@
 #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
+#define        PORT_TYPE_REMOTE_IN     0x4001
+#define        PORT_TYPE_REMOTE_OUT    0x4002
        /* SIP */
 #define        PORT_TYPE_SIP_IN        0x2001
 #define        PORT_TYPE_SIP_OUT       0x2002
@@ -149,12 +149,25 @@ struct port_settings {
        int no_seconds;
 };
 
+#define BRIDGE_BUFFER 4096
+
+struct port_bridge_member {
+       struct port_bridge_member *next;
+       class Port *port;
+       unsigned char buffer[BRIDGE_BUFFER];
+       int write_p;                            /* points to write position in buffer */
+       int min_space;                          /* minimum space to calculate how much delay can be removed */
+};
+
 /* 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 */
+       struct port_bridge_member *first;       /* list of ports that are bridged */
+       signed long sum_buffer[BRIDGE_BUFFER];
+       int read_p;                             /* points to read position in buffer */
+       struct lcr_timer timer;                 /* clock to transmit sum data */
+       int sample_count;                       /* counter of samples since last delay check */
 };
 
 extern struct port_bridge *p_bridge_first;