summaryrefslogblamecommitdiffstats
path: root/chan_lcr.h
blob: 8caa48e07cd5f08ff2edf394b36284bc6f1ba9e0 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12











                                                                               
                
                  

                                                                               
                                                                      
                                                 
                                                                      

                                                                               
                                          
                                                                           

                                                                
                                                
                                                                  
                                            
                                                                           
                                                                        
 

                                           

                                                                        



                                                                     

                                                                   



                                                                   



                                                                          
                        


                                                                         
      

                                                               

                                                                

                                                                       

                                                                       


                                                                                      

                                                                               



                                                                            

                                                                       

                                                                

                                                                                                        
                                                                    
                                                                     

                                                                

                                                                                                
                

  

















                                                             

                        






























                                                                             
 

                                 



                                                                                                                                                      
                                                  
/*****************************************************************************\
**                                                                           **
** Linux Call Router                                                         **
**                                                                           **
**---------------------------------------------------------------------------**
** Copyright: Andreas Eversberg                                              **
**                                                                           **
** Asterisk socket client header                                             **
**                                                                           **
\*****************************************************************************/

/* structure for all calls */
struct bchannel;
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 */
	struct bchannel		*bchannel;
					/* reference to bchannel, if set */
	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			nodsp, nodsp_queue, hdlc, faxdetect;
					/* 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);