Add -lncurses to LDD flags
[lcr.git] / message.h
index 9fc01b2..9b8833a 100644 (file)
--- a/message.h
+++ b/message.h
@@ -9,8 +9,6 @@
 **                                                                           **
 \*****************************************************************************/ 
 
-#define ISDN_TRANSMIT  256 // samples
-
 enum { /* interface types */
        INFO_ITYPE_ISDN, /* call from external */
        INFO_ITYPE_ISDN_EXTENSION, /* call from internal extension */
@@ -34,6 +32,8 @@ enum { /* number presentation */
 
 enum { /* number presentation */
        INFO_SCREEN_USER, /* user provided */
+       INFO_SCREEN_USER_VERIFIED_PASSED,
+       INFO_SCREEN_USER_VERIFIED_FAILED,
        INFO_SCREEN_NETWORK /* network provided */
 };
 
@@ -122,33 +122,41 @@ enum { /* diversion types */
 enum { /* isdnsignal */
        mISDNSIGNAL_VOLUME,             /* change volume */
        mISDNSIGNAL_CONF,               /* joint/split conference */
-       mISDNSIGNAL_JOINDATA,           /* data required by join instance */
        mISDNSIGNAL_ECHO,               /* enable/disable echoe */
        mISDNSIGNAL_DELAY,              /* use delay or adaptive jitter */
 };
 
-enum { /* bchannel assignment */
-       BCHANNEL_REQUEST,               /* application requests bchannel */
-       BCHANNEL_RELEASE,               /* application releases bchannel */
-       BCHANNEL_ASSIGN,                /* bchannel assigned by LCR */
-       BCHANNEL_ASSIGN_ACK,            /* application acknowledges */
-       BCHANNEL_REMOVE,                /* bchannel removed by LCR */
-       BCHANNEL_REMOVE_ACK,            /* application acknowledges */
-};
 enum {
        B_STATE_IDLE,           /* not open */
        B_STATE_ACTIVATING,     /* DL_ESTABLISH sent */
        B_STATE_ACTIVE,         /* channel active */
        B_STATE_DEACTIVATING,   /* DL_RELEASE sent */
-       B_STATE_EXPORTING,      /* BCHANNEL_ASSIGN sent */
-       B_STATE_REMOTE,         /* bchannel assigned to remote application */
-       B_STATE_IMPORTING,      /* BCHANNEL_REMOVE sent */
 };
+
 enum {
        B_MODE_TRANSPARENT,     /* normal transparent audio */
        B_MODE_HDLC,            /* hdlc data mode */
 };
 
+enum {
+       MEDIA_TYPE_ALAW = 1,
+       MEDIA_TYPE_ULAW,
+       MEDIA_TYPE_GSM,
+       MEDIA_TYPE_GSM_EFR,
+       MEDIA_TYPE_AMR,
+       MEDIA_TYPE_GSM_HR,
+       MEDIA_TYPE_ANALOG,      /* just send analog data via MNCC */
+};
+
+/* rtp-info structure */
+struct rtp_info {
+       int payloads;                   /* number of payloads offered */
+       unsigned char payload_types[32];/* rtp payload types */
+       int media_types[32];            /* media type of given payload */
+       unsigned int ip;                /* peer's IP */
+       unsigned short port;            /* peer's port */
+};
+
 /* call-info structure CALLER */
 struct caller_info {
        char id[32];                    /* id of caller (user number) */
@@ -165,6 +173,7 @@ struct caller_info {
        int ntype2;                     /* second type of number */
        int present2;                   /* second presentation */
        int screen2;                    /* second who provided the number */
+       char imsi[16];                  /* IMSI for gsm originated calls */
 };
 
 /* call-info structure DIALING */
@@ -175,6 +184,9 @@ struct dialing_info {
        int ntype;                      /* type of number */
        int sending_complete;           /* end of dialing */
        char display[84];               /* display information */
+       char keypad[33];                /* send keypad facility */
+       char context[32];               /* asterisk context */
+       int flash;                      /* flash key caused setup of call */
 };
 
 /* call-info structure CONNECT */
@@ -189,6 +201,8 @@ struct connect_info {
        int present;                    /* presentation */
        int screen;                     /* who provided the number */
        char display[84];               /* display information */
+       char imsi[16];                  /* IMSI for gsm terminated calls */
+       struct rtp_info rtpinfo;        /* info about RTP peer */
 };
 
 /* call-info structure DISCONNECT */
@@ -196,6 +210,7 @@ struct disconnect_info {
        int cause;                      /* reason for disconnect */
        int location;                   /* disconnect location */
        char display[84];               /* optional display information */
+       int force;                      /* special flag to release imediately */
 };
 
 /* call-info structure REDIR */
@@ -233,6 +248,13 @@ struct notify_info {
        int local;                      /* if set, endpoints gets information about audio channel (open/close) */
 };
 
+/* call-info structure PROGRESS */
+struct progress_info {
+       int progress;                   /* progress indicator */
+       int location;                   /* progress location */
+       struct rtp_info rtpinfo;        /* info about RTP peer */
+};
+
 /* call-info structure FACILITY */
 struct facility_info {
        char data[256];                 /* data info about facility */
@@ -257,7 +279,8 @@ struct message_setup {
        struct redir_info redirinfo;            /* info on redirection (to the calling user) */
        struct capa_info capainfo;              /* info on l2,l3 capability */
        struct useruser_info useruser;          /* user-user */
-       char context[128];                      /* asterisk context */
+       struct progress_info progress;          /* info on call progress */
+       struct rtp_info rtpinfo;                /* info about RTP peer */
 };
 
 /* call-info structure PARK */
@@ -266,12 +289,6 @@ struct park_info {
        int len;
 };
 
-/* DATA */
-struct param_data {
-       unsigned char data[ISDN_TRANSMIT]; /* audio/hdlc data */
-       int len; /* audio/hdlc data */
-};
-
 struct param_play {
        char file[512]; /* file name */
        int offset; /* offset to start file at (in seconds) */
@@ -292,7 +309,6 @@ struct param_mISDNsignal {
        int tx_gain;
        int rx_gain;
        int conf;
-       int joindata;
        int tone;
        int echo;
        int delay;
@@ -312,6 +328,7 @@ struct param_hello {
 struct param_bchannel {
        int type; /* BCHANNEL_* */
        unsigned int handle; /* bchannel stack/portid */
+       int isloopback; /* in this case the application behaves like an interface, dsp should not be used */
        int tx_gain, rx_gain;
        char pipeline[256];
        unsigned char crypt[128];
@@ -319,6 +336,35 @@ struct param_bchannel {
        int crypt_type; /* 1 = blowfish */
 };
 
+struct param_newref {
+        int direction; /* who requests a refe? */
+       char interface[32]; /* interface name for selecting remote interface */
+};
+
+struct param_traffic {
+       int len;        /* how much data */
+       unsigned char data[160];        /* 20ms */
+};
+
+struct param_3pty {
+       int begin, end;
+       int invoke, result, error;
+       unsigned char invoke_id;
+};
+
+struct param_vootp {
+       int enable;
+       int failed;
+       char id[32];
+};
+
+struct param_dov {
+       int type; /* dov_type coding */
+       int level; /* volume of sending signals */
+       int length;
+       unsigned char data[255];
+};
+
 /* structure of message parameter */
 union parameter {
        struct param_tone tone; /* MESSAGE_TONE */
@@ -328,12 +374,12 @@ union parameter {
        struct connect_info connectinfo; /* CONNECT INFO */
        struct disconnect_info disconnectinfo; /* DISCONNECT INFO */
        struct notify_info notifyinfo; /* some notifications */
+       struct progress_info progressinfo; /* some progress */
        struct facility_info facilityinfo; /* some notifications */
        struct park_info parkinfo; /* MESSAGE_SUSPEND, MESSAGE_RESUME */
        int state; /* MESSAGE_TIMEOUT */
        int knock; /* MESSAGE_KNOCK 0=off !0=on */
        int audiopath; /* MESSAGE_audiopath see RELATION_CHANNEL_* (join.h) */
-       struct param_data data; /* MESSAGE_DATA */
        struct param_play play; /* MESSAGE_VBOX_PLAY */
        int speed; /* MESSAGE_VBOX_PLAY_SPEED */
        struct param_counter counter; /* MESSAGE_TONE_COUNTER */
@@ -342,7 +388,13 @@ union parameter {
        struct param_crypt crypt; /* MESSAGE_CRYPT */
        struct param_hello hello; /* MESSAGE_HELLO */
        struct param_bchannel bchannel; /* MESSAGE_BCHANNEL */
-       int direction; /* MESSAGE_NEWREF */
+       struct param_newref newref; /* MESSAGE_NEWREF */
+       unsigned int bridge_id; /* MESSAGE_BRIDGE */
+       struct param_traffic traffic; /* MESSAGE_TRAFFIC */
+       struct param_3pty threepty; /* MESSAGE_TRAFFIC */
+       struct param_dov dov; /* MESSAGE_DOV */
+       unsigned int queue; /* MESSAGE_DISABLE_DEJITTER */
+       struct param_vootp vootp; /* MESSAGE_VOOTP */
 };
 
 enum { /* message flow */
@@ -378,16 +430,15 @@ enum { /* messages between entities */
        MESSAGE_DISCONNECT,     /* disconnect with cause */
        MESSAGE_RELEASE,        /* release with cause */
        MESSAGE_TIMEOUT,        /* protocol state has timed out (port->epoint) */
-       MESSAGE_NOTIFY,         /* used to send progress and notify infos */
+       MESSAGE_NOTIFY,         /* used to send notify info */
+       MESSAGE_PROGRESS,       /* used to send progress info */
        MESSAGE_FACILITY,       /* used to facility infos, like aocd */
        MESSAGE_SUSPEND,        /* suspend port */
        MESSAGE_RESUME,         /* resume port */
        MESSAGE_AUDIOPATH,      /* set status of audio path to endpoint (to call, audio is also set) */
-//     MESSAGE_REMOTE_AUDIO,   /* tell remote to set audio status */
        MESSAGE_PATTERN,        /* pattern information tones available */
        MESSAGE_NOPATTERN,      /* pattern information tones unavailable */
        MESSAGE_CRYPT,          /* encryption message */
-       MESSAGE_DATA,           /* audio/hdlc data */
        MESSAGE_VBOX_PLAY,      /* play recorded file */
        MESSAGE_VBOX_PLAY_SPEED,/* change speed of file */
        MESSAGE_VBOX_TONE,      /* set answering VBOX tone */
@@ -396,6 +447,16 @@ enum { /* messages between entities */
        MESSAGE_BCHANNEL,       /* request/assign/remove bchannel */
        MESSAGE_HELLO,          /* hello message for remote application */
        MESSAGE_NEWREF,         /* special message to create and inform ref */
+       MESSAGE_BRIDGE,         /* control port bridge */
+       MESSAGE_TRAFFIC,        /* exchange bchannel traffic */
+       MESSAGE_3PTY,           /* 3PTY call invoke */
+       MESSAGE_TRANSFER,       /* call transfer invoke */
+       MESSAGE_DISABLE_DEJITTER,/* tell (mISDN) port not to dejitter */
+       MESSAGE_UPDATEBRIDGE,   /* tell join to update bridge. (sent by mISDN port) */
+       MESSAGE_VOOTP,          /* enable/disable VoOTP */
+       MESSAGE_DOV_INDICATION, /* data over voice message received */
+       MESSAGE_DOV_REQUEST,    /* sending data over voice message */
+       MESSAGE_DOV_LISTEN,     /* listen order to data over voice message */
 };
 
 #define MESSAGES static const char *messages_txt[] = { \
@@ -414,15 +475,14 @@ enum { /* messages between entities */
        "MESSAGE_RELEASE", \
        "MESSAGE_TIMEOUT", \
        "MESSAGE_NOTIFY", \
+       "MESSAGE_PROGRESS", \
        "MESSAGE_FACILITY", \
        "MESSAGE_SUSPEND", \
        "MESSAGE_RESUME", \
        "MESSAGE_AUDIOPATH", \
-/*     "MESSAGE_REMOTE_AUDIO",*/ \
        "MESSAGE_PATTERN", \
        "MESSAGE_NOPATTERN", \
        "MESSAGE_CRYPT", \
-       "MESSAGE_DATA", \
        "MESSAGE_VBOX_PLAY", \
        "MESSAGE_VBOX_PLAY_SPEED", \
        "MESSAGE_VBOX_TONE", \
@@ -431,14 +491,27 @@ enum { /* messages between entities */
        "MESSAGE_BCHANNEL", \
        "MESSAGE_HELLO", \
        "MESSAGE_NEWREF", \
+       "MESSAGE_BRIDGE", \
+       "MESSAGE_TRAFFIC", \
+       "MESSAGE_3PTY", \
+       "MESSAGE_TRANSFER", \
+       "MESSAGE_DISABLE_DEJITTER", \
+       "MESSAGE_UPDATEBRIDGE", \
+       "MESSAGE_VOOTP", \
+       "MESSAGE_DOV_INDIVATION", \
+       "MESSAGE_DOV_REQUEST", \
+       "MESSAGE_DOV_LISTEN", \
 };
 
 
+extern unsigned int lcr_random;
 struct lcr_msg *message_create(int id_from, int id_to, int flow, int type);
-void message_put(struct lcr_msg *message);
+#define message_put(m) _message_put(m, __FILE__, __LINE__)
+void _message_put(struct lcr_msg *message, const char *file, int line);
 struct lcr_msg *message_forward(int id_from, int id_to, int flow, union parameter *param);
 struct lcr_msg *message_get(void);
 void message_free(struct lcr_msg *message);
-
+void init_message(void);
+void cleanup_message(void);