work on unfinished asterisk channel driver (bchannel handling)
[lcr.git] / message.h
index cdc8163..1abab34 100644 (file)
--- a/message.h
+++ b/message.h
@@ -9,6 +9,8 @@
 **                                                                           **
 \*****************************************************************************/ 
 
+#define ISDN_TRANSMIT  256 // samples
+
 enum { /* interface types */
        INFO_ITYPE_ISDN,
        INFO_ITYPE_ISDN_EXTENSION, /* call from internal extension */
@@ -125,6 +127,33 @@ enum { /* isdnsignal */
        mISDNSIGNAL_DELAY,              /* use delay or adaptive jitter */
 };
 
+enum { /* bchannel assignment */
+       BCHANNEL_REQUEST,               /* application requests 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_EVENT_USE,            /* activate/export bchannel */
+       B_EVENT_EXPORTREQUEST,  /* remote app requests bchannel */
+       B_EVENT_ACTIVATED,      /* DL_ESTABLISH received */
+       B_EVENT_DROP,           /* deactivate/re-import bchannel */
+       B_EVENT_DEACTIVATED,    /* DL_RELEASE received */
+       B_EVENT_EXPORTED,       /* BCHANNEL_ASSIGN received */
+       B_EVENT_IMPORTED,       /* BCHANNEL_REMOVE received */
+};
+
+
 /* call-info structure CALLER */
 struct caller_info {
        char id[32];                    /* id of caller (user number) */
@@ -222,6 +251,7 @@ struct message_setup {
        int port_type; /* type of port (only required if message is port -> epoint) */
        int dtmf; /* used to enabled dtmf dialing at setup state */
        int partyline; /* if set, call will be a conference room */
+       int partyline_jingle; /* if set, the jingle will be played on conference join */
        struct caller_info callerinfo;          /* information about the caller */
        struct dialing_info dialinginfo;        /* information about dialing */
        struct redir_info redirinfo;            /* info on redirection (to the calling user) */
@@ -237,7 +267,7 @@ struct park_info {
 
 /* DATA */
 struct param_data {
-       unsigned char data[512]; /* audio/hdlc data */
+       unsigned char data[ISDN_TRANSMIT]; /* audio/hdlc data */
        int len; /* audio/hdlc data */
 };
 
@@ -258,8 +288,8 @@ struct param_counter {
 
 struct param_mISDNsignal {
        int message;
-       int rxvol;
-       int txvol;
+       int tx_gain;
+       int rx_gain;
        int conf;
        int joindata;
        int tone;
@@ -274,6 +304,20 @@ struct param_crypt {
        unsigned char data[512+32]; /* a block of 512 byte + some overhead */
 };
 
+struct param_hello {
+       char application[32]; /* name of remote application */
+};
+
+struct param_bchannel {
+       int type; /* BCHANNEL_* */
+       unsigned long handle; /* bchannel stack/portid */
+       int tx_gain, rx_gain;
+       char pipeline[256];
+       unsigned char crypt[128];
+       int crypt_len;
+       int crypt_type; /* 1 = blowfish */
+};
+
 /* structure of message parameter */
 union parameter {
        struct param_tone tone; /* MESSAGE_TONE */
@@ -287,7 +331,7 @@ union parameter {
        struct park_info parkinfo; /* MESSAGE_SUSPEND, MESSAGE_RESUME */
        int state; /* MESSAGE_TIMEOUT */
        int knock; /* MESSAGE_KNOCK 0=off !0=on */
-       int channel; /* MESSAGE_CHANNEL see RELATION_CHANNEL_* (join.h) */
+       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 */
@@ -295,6 +339,9 @@ union parameter {
        struct param_mISDNsignal mISDNsignal; /* MESSAGE_mISDNSIGNAL */
        struct extension ext; /* tell port about extension information */
        struct param_crypt crypt; /* MESSAGE_CRYPT */
+       struct param_hello hello; /* MESSAGE_HELLO */
+       struct param_bchannel bchannel; /* MESSAGE_BCHANNEL */
+       int direction; /* MESSAGE_NEWREF */
 };
 
 enum { /* message flow */
@@ -320,7 +367,6 @@ enum { /* messages between entities */
        MESSAGE_TONE,           /* set information tone (to isdn port) */
        MESSAGE_DTMF,           /* dtmf digit (from isdn port) */
        MESSAGE_mISDNSIGNAL,    /* special mixer command (down to isdn port) */
-
        MESSAGE_SETUP,          /* setup message */
        MESSAGE_INFORMATION,    /* additional digit information */
        MESSAGE_OVERLAP,        /* call accepted, send more information */
@@ -332,24 +378,22 @@ enum { /* messages between entities */
        MESSAGE_TIMEOUT,        /* protocol state has timed out (port->epoint) */
        MESSAGE_NOTIFY,         /* used to send progress and notify infos */
        MESSAGE_FACILITY,       /* used to facility infos, like aocd */
-
        MESSAGE_SUSPEND,        /* suspend port */
        MESSAGE_RESUME,         /* resume port */
-
-       MESSAGE_CHANNEL,        /* set status of audio path to endpoint (to call, audio is also set) */
+       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 */
        MESSAGE_TONE_COUNTER,   /* tone counter (for VBOX tone use) */
        MESSAGE_TONE_EOF,       /* tone is end of file */
-       MESSAGE_HELLO,          /* hello message for asterisk */
+       MESSAGE_BCHANNEL,       /* request/assign/remove bchannel */
+       MESSAGE_HELLO,          /* hello message for remote application */
+       MESSAGE_NEWREF,         /* special message to create and inform ref */
 };
 
 #define MESSAGES static const char *messages_txt[] = { \
@@ -370,7 +414,7 @@ enum { /* messages between entities */
        "MESSAGE_FACILITY", \
        "MESSAGE_SUSPEND", \
        "MESSAGE_RESUME", \
-       "MESSAGE_CHANNEL", \
+       "MESSAGE_AUDIOPATH", \
 /*     "MESSAGE_REMOTE_AUDIO",*/ \
        "MESSAGE_PATTERN", \
        "MESSAGE_NOPATTERN", \
@@ -381,13 +425,15 @@ enum { /* messages between entities */
        "MESSAGE_VBOX_TONE", \
        "MESSAGE_TONE_COUNTER", \
        "MESSAGE_TONE_EOF", \
+       "MESSAGE_BCHANNEL", \
        "MESSAGE_HELLO", \
+       "MESSAGE_NEWREF", \
 };
 
 
 struct message *message_create(int id_from, int id_to, int flow, int type);
 void message_put(struct message *message);
-void message_forward(int id_from, int id_to, int flow, union parameter *param);
+struct message *message_forward(int id_from, int id_to, int flow, union parameter *param);
 struct message *message_get(void);
 void message_free(struct message *message);