mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-08-14 01:49:05 +00:00
add dial regexs
git-svn-id: http://svn.openzap.org/svn/openzap/trunk@352 a93c3328-9c30-0410-af19-c9cd2b2d52af
This commit is contained in:
@@ -518,6 +518,8 @@ void print_bits(uint8_t *b, int bl, char *buf, int blen, int e, uint8_t ss);
|
||||
void print_hex_bytes(uint8_t *data, zap_size_t dlen, char *buf, zap_size_t blen);
|
||||
int zap_hash_equalkeys(void *k1, void *k2);
|
||||
uint32_t zap_hash_hashfromstring(void *ky);
|
||||
uint32_t zap_running(void);
|
||||
|
||||
ZIO_CODEC_FUNCTION(zio_slin2ulaw);
|
||||
ZIO_CODEC_FUNCTION(zio_ulaw2slin);
|
||||
ZIO_CODEC_FUNCTION(zio_slin2alaw);
|
||||
|
@@ -180,10 +180,11 @@ typedef enum {
|
||||
ZAP_SIGEVENT_ALARM_TRAP,
|
||||
ZAP_SIGEVENT_ALARM_CLEAR,
|
||||
ZAP_SIGEVENT_MISC,
|
||||
ZAP_SIGEVENT_COLLECTED_DIGIT,
|
||||
ZAP_SIGEVENT_INVALID
|
||||
} zap_signal_event_t;
|
||||
#define SIGNAL_STRINGS "START", "STOP", "TRANSFER", "ANSWER", "UP", "FLASH", "PROGRESS", \
|
||||
"PROGRESS_MEDIA", "NOTIFY", "TONE_DETECTED", "ALARM_TRAP", "ALARM_CLEAR", "MISC", "INVALID"
|
||||
"PROGRESS_MEDIA", "NOTIFY", "TONE_DETECTED", "ALARM_TRAP", "ALARM_CLEAR", "MISC", "COLLECTED_DIGIT", "INVALID"
|
||||
ZAP_STR2ENUM_P(zap_str2zap_signal_event, zap_signal_event2str, zap_signal_event_t)
|
||||
|
||||
typedef enum {
|
||||
@@ -205,7 +206,8 @@ typedef enum {
|
||||
ZAP_TIMEOUT,
|
||||
ZAP_NOTIMPL,
|
||||
ZAP_CHECKSUM_ERROR,
|
||||
ZAP_STATUS_COUNT
|
||||
ZAP_STATUS_COUNT,
|
||||
ZAP_BREAK
|
||||
} zap_status_t;
|
||||
|
||||
typedef enum {
|
||||
|
@@ -177,7 +177,7 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj)
|
||||
zap_size_t dtmf_offset = 0;
|
||||
zap_analog_data_t *analog_data = zchan->span->signal_data;
|
||||
zap_channel_t *closed_chan;
|
||||
uint32_t state_counter = 0, elapsed = 0, interval = 0, last_digit = 0, indicate = 0, dial_timeout = 30000;
|
||||
uint32_t state_counter = 0, elapsed = 0, collecting = 0, interval = 0, last_digit = 0, indicate = 0, dial_timeout = 30000;
|
||||
zap_sigmsg_t sig;
|
||||
zap_status_t status;
|
||||
|
||||
@@ -490,17 +490,24 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj)
|
||||
zap_log(ZAP_LOG_DEBUG, "DTMF %s\n", dtmf + dtmf_offset);
|
||||
if (zchan->state == ZAP_CHANNEL_STATE_DIALTONE) {
|
||||
zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_COLLECT);
|
||||
collecting = 1;
|
||||
}
|
||||
dtmf_offset = strlen(dtmf);
|
||||
last_digit = elapsed;
|
||||
sig.event_id = ZAP_SIGEVENT_COLLECTED_DIGIT;
|
||||
sig.raw_data = dtmf;
|
||||
if (analog_data->sig_cb(&sig) == ZAP_BREAK) {
|
||||
collecting = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (last_digit && ((elapsed - last_digit > analog_data->digit_timeout) || strlen(dtmf) > analog_data->max_dialstr)) {
|
||||
if (last_digit && (!collecting || ((elapsed - last_digit > analog_data->digit_timeout) || strlen(dtmf) > analog_data->max_dialstr))) {
|
||||
zap_log(ZAP_LOG_DEBUG, "Number obtained [%s]\n", dtmf);
|
||||
zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_IDLE);
|
||||
last_digit = 0;
|
||||
collecting = 0;
|
||||
}
|
||||
|
||||
if (zap_channel_wait(zchan, &flags, interval * 2) != ZAP_SUCCESS) {
|
||||
@@ -741,7 +748,7 @@ static void *zap_analog_run(zap_thread_t *me, void *obj)
|
||||
|
||||
zap_log(ZAP_LOG_DEBUG, "ANALOG thread starting.\n");
|
||||
|
||||
while(zap_test_flag(analog_data, ZAP_ANALOG_RUNNING)) {
|
||||
while(zap_running() && zap_test_flag(analog_data, ZAP_ANALOG_RUNNING)) {
|
||||
int waitms = 10;
|
||||
zap_status_t status;
|
||||
|
||||
|
@@ -85,6 +85,7 @@ static struct {
|
||||
zap_mutex_t *mutex;
|
||||
struct zap_span spans[ZAP_MAX_SPANS_INTERFACE];
|
||||
uint32_t span_index;
|
||||
uint32_t running;
|
||||
} globals;
|
||||
|
||||
|
||||
@@ -1965,6 +1966,7 @@ zap_status_t zap_global_init(void)
|
||||
}
|
||||
|
||||
if (load_config() == ZAP_SUCCESS) {
|
||||
globals.running = 1;
|
||||
return ZAP_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -1972,6 +1974,10 @@ zap_status_t zap_global_init(void)
|
||||
return ZAP_FAIL;
|
||||
}
|
||||
|
||||
uint32_t zap_running(void)
|
||||
{
|
||||
return globals.running;
|
||||
}
|
||||
|
||||
|
||||
zap_status_t zap_global_destroy(void)
|
||||
@@ -1980,6 +1986,8 @@ zap_status_t zap_global_destroy(void)
|
||||
time_end();
|
||||
|
||||
zap_span_close_all();
|
||||
globals.running = 0;
|
||||
zap_sleep(200);
|
||||
|
||||
for(i = 1; i <= globals.span_index; i++) {
|
||||
zap_span_t *cur_span = &globals.spans[i];
|
||||
|
@@ -508,7 +508,7 @@ static __inline__ void check_events(zap_span_t *span)
|
||||
break;
|
||||
case ZAP_FAIL:
|
||||
{
|
||||
zap_log(ZAP_LOG_DEBUG, "Event Failure!\n");
|
||||
zap_log(ZAP_LOG_DEBUG, "Event Failure! %d\n", zap_running());
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@@ -532,7 +532,7 @@ static void *zap_isdn_run(zap_thread_t *me, void *obj)
|
||||
|
||||
Q921Start(&isdn_data->q921);
|
||||
|
||||
while(zap_test_flag(isdn_data, ZAP_ISDN_RUNNING)) {
|
||||
while(zap_running() && zap_test_flag(isdn_data, ZAP_ISDN_RUNNING)) {
|
||||
zap_wait_flag_t flags = ZAP_READ;
|
||||
zap_status_t status = zap_channel_wait(isdn_data->dchan, &flags, 100);
|
||||
|
||||
|
Reference in New Issue
Block a user