lcr/chan_lcr.h

142 lines
5.1 KiB
C

/*****************************************************************************\
** **
** Linux Call Router **
** **
**---------------------------------------------------------------------------**
** Copyright: Andreas Eversberg **
** **
** Asterisk socket client header **
** **
\*****************************************************************************/
struct chan_call {
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);