-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathchan_lcr.h
141 lines (131 loc) · 5.1 KB
/
chan_lcr.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/*****************************************************************************\
** **
** 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);