X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=message.h;h=9b8833adebcc14a0fb466091af245c97aa6b3113;hp=63abc65117a8754ea809b0f43173fdf34d59d398;hb=d67fcefab05e9aa89e6e72a5f2aae10a5404c5e5;hpb=03cb33b51da2596a2ef4373debe52ccde8e5cc7b diff --git a/message.h b/message.h index 63abc65..9b8833a 100644 --- 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 */ @@ -124,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) */ @@ -179,6 +185,8 @@ struct dialing_info { 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 */ @@ -194,6 +202,7 @@ struct connect_info { 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 */ @@ -201,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 */ @@ -238,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 */ @@ -262,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 */ @@ -271,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) */ @@ -297,7 +309,6 @@ struct param_mISDNsignal { int tx_gain; int rx_gain; int conf; - int joindata; int tone; int echo; int delay; @@ -317,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]; @@ -324,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 */ @@ -333,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 */ @@ -347,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 */ @@ -383,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 */ @@ -401,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[] = { \ @@ -419,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", \ @@ -436,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);