X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=chan_lcr.h;h=ab7101de8f34fc9f336dd4f08e80f5fdf1ed7300;hp=0f861feedf06ae8c0fb185f9056250d15a0915c6;hb=b5d6f1c72b000cc0e5f566adec73e830cec04f32;hpb=14f76f1e81f0a4e7a63e83136d1ac958bf85c8a5 diff --git a/chan_lcr.h b/chan_lcr.h index 0f861fe..ab7101d 100644 --- a/chan_lcr.h +++ b/chan_lcr.h @@ -9,11 +9,133 @@ ** ** \*****************************************************************************/ -/* structure for all calls */ struct chan_call { - struct chan_call *next; - unsigned long ref; /* callref, is 0, if not yet set */ - unsigned long bchannel_handle; /* reference to bchannel, if set */ + struct chan_call *next; /* link to next call instance */ + int state; /* current call state CHAN_LCR_STATE */ + unsigned int ref; /* callref for this channel */ + int ref_was_assigned; + void *ast; /* current asterisk channel */ + int pbx_started; + /* indicates if pbx que is available */ + int audiopath; + /* audio is available */ + int cause, location; + /* store cause from lcr */ + char dialque[64]; + /* queue dialing prior setup ack */ + char oad[64];/* caller id in number format */ + + struct caller_info callerinfo; + struct redir_info redirinfo; + struct connect_info connectinfo; + /* store connectinfo form lcr */ + int bridge_id; + /* current ID or 0 */ + struct chan_call *bridge_call; + /* remote instance or NULL */ + int pipe[2]; + /* pipe for receive data */ + unsigned char read_buff[1024]; + /* read buffer for frame */ + struct ast_frame read_fr; + /* frame for read */ + char interface[32]; + /* LCR interface name for setup */ + char dialstring[64]; + /* cached dial string for setup */ +#ifndef AST_PARTY_CALLER + char cid_num[64]; /* cached cid for setup */ + char cid_name[64]; /* cached cid for setup */ + char cid_rdnis[64]; /* cached cid for setup */ +#endif + char display[128]; + /* display for setup */ + int dsp_dtmf; + /* decode dtmf by dsp */ + int inband_dtmf; /* generate dtmf tones, if + requested by asterisk */ + int rebuffer; /* send only 160 bytes frames + to asterisk */ + + int framepos; /* send only 160 bytes frames to asterisk */ + + int on_hold; /* track hold management, since + sip phones sometimes screw it up */ + char pipeline[256]; + /* echo cancel pipeline by option */ + int tx_gain, rx_gain; + /* gain by option */ + int keypad; + /* use keypad to dial number */ + unsigned char bf_key[56]; + int bf_len; /* blowfish crypt key */ + struct ast_dsp *dsp; /* ast dsp processor for fax/tone detection */ + struct ast_trans_pvt *trans; /* Codec translation path as fax/tone detection requires slin */ + int tx_queue, hdlc, faxdetect, ast_dsp; + /* flags for bchannel mode */ + char queue_string[64]; + /* queue for asterisk */ + int has_pattern; + /* pattern are available, PROGRESS has been indicated */ + +}; + +enum { + CHAN_LCR_STATE_IN_PREPARE = 0, + CHAN_LCR_STATE_IN_SETUP, + CHAN_LCR_STATE_IN_DIALING, + CHAN_LCR_STATE_IN_PROCEEDING, + CHAN_LCR_STATE_IN_ALERTING, + CHAN_LCR_STATE_OUT_PREPARE, + CHAN_LCR_STATE_OUT_SETUP, + CHAN_LCR_STATE_OUT_DIALING, + CHAN_LCR_STATE_OUT_PROCEEDING, + CHAN_LCR_STATE_OUT_ALERTING, + CHAN_LCR_STATE_CONNECT, + CHAN_LCR_STATE_IN_DISCONNECT, + CHAN_LCR_STATE_OUT_DISCONNECT, + CHAN_LCR_STATE_RELEASE, }; +#define CHAN_LCR_STATE static const struct chan_lcr_state { \ + char *name; \ + char *meaning; \ +} chan_lcr_state[] = { \ + { "IN_PREPARE", \ + "New call from ISDN is waiting for setup." }, \ + { "IN_SETUP", \ + "Call from ISDN is currently set up." }, \ + { "IN_DIALING", \ + "Call from ISDN is currently waiting for digits to be dialed." }, \ + { "IN_PROCEEDING", \ + "Call from ISDN is complete and proceeds to ring." }, \ + { "IN_ALERTING", \ + "Call from ISDN is ringing." }, \ + { "OUT_PREPARE", \ + "New call to ISDN is wating for setup." }, \ + { "OUT_SETUP", \ + "Call to ISDN is currently set up." }, \ + { "OUT_DIALING", \ + "Call to ISDN is currently waiting for digits to be dialed." }, \ + { "OUT_PROCEEDING", \ + "Call to ISDN is complete and proceeds to ring." }, \ + { "OUT_ALERTING", \ + "Call to ISDN is ringing." }, \ + { "CONNECT", \ + "Call has been answered." }, \ + { "IN_DISCONNECT", \ + "Call has been hung up on ISDN side." }, \ + { "OUT_DISCONNECT", \ + "Call has been hung up on Asterisk side." }, \ + { "RELEASE", \ + "Call is waiting for complete release." }, \ +}; + + +#define SOCKET_RETRY_TIMER 5 +#define CERROR(call, ast, arg...) chan_lcr_log(__LOG_ERROR, __FILE__, __LINE__, __FUNCTION__, call, ast, ##arg) +#define CDEBUG(call, ast, arg...) chan_lcr_log(__LOG_NOTICE, __FILE__, __LINE__, __FUNCTION__, call, ast, ##arg) +void chan_lcr_log(int type, const char *file, int line, const char *function, struct chan_call *call, struct ast_channel *ast, const char *fmt, ...); +extern unsigned char flip_bits[256]; +void lcr_in_dtmf(struct chan_call *call, int val);