2007-08-12 11:05:26 +00:00
|
|
|
/*****************************************************************************\
|
|
|
|
** **
|
|
|
|
** Linux Call Router **
|
|
|
|
** **
|
|
|
|
**---------------------------------------------------------------------------**
|
|
|
|
** Copyright: Andreas Eversberg **
|
|
|
|
** **
|
|
|
|
** Asterisk socket client header **
|
|
|
|
** **
|
|
|
|
\*****************************************************************************/
|
|
|
|
|
|
|
|
/* structure for all calls */
|
2008-05-01 08:35:20 +00:00
|
|
|
struct bchannel;
|
2007-08-12 11:05:26 +00:00
|
|
|
struct chan_call {
|
2008-04-28 17:29:06 +00:00
|
|
|
struct chan_call *next; /* link to next call instance */
|
|
|
|
int state; /* current call state CHAN_LCR_STATE */
|
|
|
|
unsigned long ref; /* callref for this channel */
|
2008-05-01 18:07:02 +00:00
|
|
|
void *ast; /* current asterisk channel */
|
2008-05-18 17:04:35 +00:00
|
|
|
int pbx_started;
|
|
|
|
/* indicates if pbx que is available */
|
2008-05-01 18:07:02 +00:00
|
|
|
struct bchannel *bchannel;
|
2008-04-28 17:29:06 +00:00
|
|
|
/* reference to bchannel, if set */
|
2008-05-19 17:39:39 +00:00
|
|
|
int audiopath;
|
|
|
|
/* audio is available */
|
2008-05-01 08:35:20 +00:00
|
|
|
int cause, location;
|
2008-05-01 09:56:14 +00:00
|
|
|
/* store cause from lcr */
|
|
|
|
unsigned char dialque[64];
|
|
|
|
/* queue dialing prior setup ack */
|
2008-05-19 17:39:39 +00:00
|
|
|
char oad[64];/* caller id in number format */
|
2008-05-01 09:56:14 +00:00
|
|
|
struct connect_info connectinfo;
|
|
|
|
/* store connectinfo form lcr */
|
2008-05-01 18:07:02 +00:00
|
|
|
int bridge_id;
|
|
|
|
/* current ID or 0 */
|
|
|
|
struct chan_call *bridge_call;
|
|
|
|
/* remote instance or NULL */
|
2008-05-18 17:04:35 +00:00
|
|
|
int pipe[2];
|
|
|
|
/* pipe for receive data */
|
2008-05-19 17:39:39 +00:00
|
|
|
unsigned char read_buff[1024];
|
|
|
|
/* read buffer for frame */
|
|
|
|
struct ast_frame read_fr;
|
|
|
|
/* frame for read */
|
2007-08-12 11:05:26 +00:00
|
|
|
};
|
|
|
|
|
2008-04-28 17:29:06 +00:00
|
|
|
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 { \
|
2008-05-01 09:56:14 +00:00
|
|
|
char *name; \
|
|
|
|
char *meaning; \
|
2008-04-28 17:29:06 +00:00
|
|
|
} 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." }, \
|
|
|
|
};
|
|
|
|
|
2007-08-12 11:05:26 +00:00
|
|
|
|
2008-06-01 16:52:10 +00:00
|
|
|
#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];
|