提交 94e92fe2 authored 作者: Anthony Minessale's avatar Anthony Minessale

sync

git-svn-id: http://svn.openzap.org/svn/openzap/trunk@289 a93c3328-9c30-0410-af19-c9cd2b2d52af
上级 dffaad2a
...@@ -408,8 +408,7 @@ struct zap_span { ...@@ -408,8 +408,7 @@ struct zap_span {
zap_trunk_type_t trunk_type; zap_trunk_type_t trunk_type;
zap_analog_start_type_t start_type; zap_analog_start_type_t start_type;
zap_signal_type_t signal_type; zap_signal_type_t signal_type;
struct zap_isdn_data *isdn_data; void *signal_data;
struct zap_analog_data *analog_data;
zap_event_t event_header; zap_event_t event_header;
char last_error[256]; char last_error[256];
char tone_map[ZAP_TONEMAP_INVALID+1][ZAP_TONEMAP_LEN]; char tone_map[ZAP_TONEMAP_INVALID+1][ZAP_TONEMAP_LEN];
......
...@@ -62,6 +62,7 @@ int main(int argc, char *argv[]) ...@@ -62,6 +62,7 @@ int main(int argc, char *argv[])
{ {
zap_span_t *span; zap_span_t *span;
int span_id; int span_id;
zap_analog_data_t *analog_data;
if (argc < 2) { if (argc < 2) {
printf("usage %s <spanno>\n", argv[0]); printf("usage %s <spanno>\n", argv[0]);
...@@ -88,9 +89,10 @@ int main(int argc, char *argv[]) ...@@ -88,9 +89,10 @@ int main(int argc, char *argv[])
zap_log(ZAP_LOG_ERROR, "Error configuring OpenZAP span\n"); zap_log(ZAP_LOG_ERROR, "Error configuring OpenZAP span\n");
goto done; goto done;
} }
analog_data = span->signal_data;
zap_analog_start(span); zap_analog_start(span);
while(zap_test_flag(span->analog_data, ZAP_ANALOG_RUNNING)) { while(zap_test_flag(analog_data, ZAP_ANALOG_RUNNING)) {
zap_sleep(1 * 1000); zap_sleep(1 * 1000);
} }
......
...@@ -9,7 +9,8 @@ static ZIO_SIGNAL_CB_FUNCTION(on_signal) ...@@ -9,7 +9,8 @@ static ZIO_SIGNAL_CB_FUNCTION(on_signal)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
zap_span_t *span; zap_span_t *span;
zap_isdn_data_t *data;
zap_global_set_default_logger(ZAP_LOG_LEVEL_DEBUG); zap_global_set_default_logger(ZAP_LOG_LEVEL_DEBUG);
if (argc < 2) { if (argc < 2) {
...@@ -31,13 +32,14 @@ int main(int argc, char *argv[]) ...@@ -31,13 +32,14 @@ int main(int argc, char *argv[])
if (zap_isdn_configure_span(span, Q931_TE, Q931_Dialect_National, on_signal) == ZAP_SUCCESS) { if (zap_isdn_configure_span(span, Q931_TE, Q931_Dialect_National, on_signal) == ZAP_SUCCESS) {
data = span->signal_data;
zap_isdn_start(span); zap_isdn_start(span);
} else { } else {
fprintf(stderr, "Error starting ISDN D-Channel\n"); fprintf(stderr, "Error starting ISDN D-Channel\n");
goto done; goto done;
} }
while(zap_test_flag(span->isdn_data, ZAP_ISDN_RUNNING)) { while(zap_test_flag(data, ZAP_ISDN_RUNNING)) {
zap_sleep(1 * 1000); zap_sleep(1 * 1000);
} }
......
...@@ -74,7 +74,7 @@ static ZIO_CHANNEL_OUTGOING_CALL_FUNCTION(analog_fxs_outgoing_call) ...@@ -74,7 +74,7 @@ static ZIO_CHANNEL_OUTGOING_CALL_FUNCTION(analog_fxs_outgoing_call)
zap_status_t zap_analog_configure_span(zap_span_t *span, char *tonemap, uint32_t digit_timeout, uint32_t max_dialstr, zio_signal_cb_t sig_cb) zap_status_t zap_analog_configure_span(zap_span_t *span, char *tonemap, uint32_t digit_timeout, uint32_t max_dialstr, zio_signal_cb_t sig_cb)
{ {
zap_analog_data_t *analog_data;
assert(sig_cb != NULL); assert(sig_cb != NULL);
if (span->signal_type) { if (span->signal_type) {
...@@ -90,14 +90,15 @@ zap_status_t zap_analog_configure_span(zap_span_t *span, char *tonemap, uint32_t ...@@ -90,14 +90,15 @@ zap_status_t zap_analog_configure_span(zap_span_t *span, char *tonemap, uint32_t
max_dialstr = 11; max_dialstr = 11;
} }
span->analog_data = malloc(sizeof(*span->analog_data)); analog_data = malloc(sizeof(*analog_data));
memset(span->analog_data, 0, sizeof(*span->analog_data)); memset(analog_data, 0, sizeof(*analog_data));
assert(span->analog_data != NULL); assert(analog_data != NULL);
span->analog_data->digit_timeout = digit_timeout; analog_data->digit_timeout = digit_timeout;
span->analog_data->max_dialstr = max_dialstr; analog_data->max_dialstr = max_dialstr;
span->analog_data->sig_cb = sig_cb; analog_data->sig_cb = sig_cb;
span->signal_type = ZAP_SIGTYPE_ANALOG; span->signal_type = ZAP_SIGTYPE_ANALOG;
span->signal_data = analog_data;
span->outgoing_call = span->trunk_type == ZAP_TRUNK_FXS ? analog_fxs_outgoing_call : analog_fxo_outgoing_call; span->outgoing_call = span->trunk_type == ZAP_TRUNK_FXS ? analog_fxs_outgoing_call : analog_fxo_outgoing_call;
zap_span_load_tones(span, tonemap); zap_span_load_tones(span, tonemap);
...@@ -173,7 +174,7 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj) ...@@ -173,7 +174,7 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj)
zap_tone_type_t tt = ZAP_TONE_DTMF; zap_tone_type_t tt = ZAP_TONE_DTMF;
char dtmf[128] = ""; char dtmf[128] = "";
zap_size_t dtmf_offset = 0; zap_size_t dtmf_offset = 0;
zap_analog_data_t *data = zchan->span->analog_data; zap_analog_data_t *analog_data = zchan->span->signal_data;
zap_channel_t *closed_chan; 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, interval = 0, last_digit = 0, indicate = 0, dial_timeout = 30000;
zap_sigmsg_t sig; zap_sigmsg_t sig;
...@@ -368,7 +369,7 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj) ...@@ -368,7 +369,7 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj)
sig.event_id = ZAP_SIGEVENT_UP; sig.event_id = ZAP_SIGEVENT_UP;
} }
data->sig_cb(&sig); analog_data->sig_cb(&sig);
continue; continue;
} }
break; break;
...@@ -388,7 +389,7 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj) ...@@ -388,7 +389,7 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj)
zap_set_string(zchan->caller_data.dnis, dtmf); zap_set_string(zchan->caller_data.dnis, dtmf);
} }
data->sig_cb(&sig); analog_data->sig_cb(&sig);
continue; continue;
} }
break; break;
...@@ -396,7 +397,7 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj) ...@@ -396,7 +397,7 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj)
{ {
zap_channel_done(zchan); zap_channel_done(zchan);
sig.event_id = ZAP_SIGEVENT_STOP; sig.event_id = ZAP_SIGEVENT_STOP;
data->sig_cb(&sig); analog_data->sig_cb(&sig);
goto done; goto done;
} }
break; break;
...@@ -479,7 +480,7 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj) ...@@ -479,7 +480,7 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj)
} }
if (last_digit && ((elapsed - last_digit > data->digit_timeout) || strlen(dtmf) > data->max_dialstr)) { if (last_digit && ((elapsed - last_digit > analog_data->digit_timeout) || strlen(dtmf) > analog_data->max_dialstr)) {
zap_log(ZAP_LOG_DEBUG, "Number obtained [%s]\n", dtmf); zap_log(ZAP_LOG_DEBUG, "Number obtained [%s]\n", dtmf);
zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_IDLE); zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_IDLE);
last_digit = 0; last_digit = 0;
...@@ -511,7 +512,7 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj) ...@@ -511,7 +512,7 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj)
if (zchan->detected_tones[i]) { if (zchan->detected_tones[i]) {
zap_log(ZAP_LOG_DEBUG, "Detected tone %s\n", zap_tonemap2str(zchan->detected_tones[i])); zap_log(ZAP_LOG_DEBUG, "Detected tone %s\n", zap_tonemap2str(zchan->detected_tones[i]));
sig.raw_data = &i; sig.raw_data = &i;
data->sig_cb(&sig); analog_data->sig_cb(&sig);
} }
} }
...@@ -608,7 +609,7 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj) ...@@ -608,7 +609,7 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj)
static __inline__ zap_status_t process_event(zap_span_t *span, zap_event_t *event) static __inline__ zap_status_t process_event(zap_span_t *span, zap_event_t *event)
{ {
zap_sigmsg_t sig; zap_sigmsg_t sig;
zap_analog_data_t *data = event->channel->span->analog_data; zap_analog_data_t *analog_data = event->channel->span->signal_data;
memset(&sig, 0, sizeof(sig)); memset(&sig, 0, sizeof(sig));
sig.chan_id = event->channel->chan_id; sig.chan_id = event->channel->chan_id;
...@@ -655,7 +656,7 @@ static __inline__ zap_status_t process_event(zap_span_t *span, zap_event_t *even ...@@ -655,7 +656,7 @@ static __inline__ zap_status_t process_event(zap_span_t *span, zap_event_t *even
zap_set_state_locked(event->channel, ZAP_CHANNEL_STATE_UP); zap_set_state_locked(event->channel, ZAP_CHANNEL_STATE_UP);
} else { } else {
sig.event_id = ZAP_SIGEVENT_FLASH; sig.event_id = ZAP_SIGEVENT_FLASH;
data->sig_cb(&sig); analog_data->sig_cb(&sig);
if (event->channel->token_count == 1) { if (event->channel->token_count == 1) {
zap_set_flag_locked(event->channel, ZAP_CHANNEL_HOLD); zap_set_flag_locked(event->channel, ZAP_CHANNEL_HOLD);
zap_set_state_locked(event->channel, ZAP_CHANNEL_STATE_DIALTONE); zap_set_state_locked(event->channel, ZAP_CHANNEL_STATE_DIALTONE);
...@@ -693,11 +694,11 @@ static __inline__ zap_status_t process_event(zap_span_t *span, zap_event_t *even ...@@ -693,11 +694,11 @@ static __inline__ zap_status_t process_event(zap_span_t *span, zap_event_t *even
static void *zap_analog_run(zap_thread_t *me, void *obj) static void *zap_analog_run(zap_thread_t *me, void *obj)
{ {
zap_span_t *span = (zap_span_t *) obj; zap_span_t *span = (zap_span_t *) obj;
zap_analog_data_t *data = span->analog_data; zap_analog_data_t *analog_data = span->signal_data;
zap_log(ZAP_LOG_DEBUG, "ANALOG thread starting.\n"); zap_log(ZAP_LOG_DEBUG, "ANALOG thread starting.\n");
while(zap_test_flag(data, ZAP_ANALOG_RUNNING)) { while(zap_test_flag(analog_data, ZAP_ANALOG_RUNNING)) {
int waitms = 10; int waitms = 10;
zap_status_t status; zap_status_t status;
...@@ -731,7 +732,7 @@ static void *zap_analog_run(zap_thread_t *me, void *obj) ...@@ -731,7 +732,7 @@ static void *zap_analog_run(zap_thread_t *me, void *obj)
end: end:
zap_clear_flag(data, ZAP_ANALOG_RUNNING); zap_clear_flag(analog_data, ZAP_ANALOG_RUNNING);
zap_log(ZAP_LOG_DEBUG, "ANALOG thread ending.\n"); zap_log(ZAP_LOG_DEBUG, "ANALOG thread ending.\n");
...@@ -742,7 +743,8 @@ static void *zap_analog_run(zap_thread_t *me, void *obj) ...@@ -742,7 +743,8 @@ static void *zap_analog_run(zap_thread_t *me, void *obj)
zap_status_t zap_analog_start(zap_span_t *span) zap_status_t zap_analog_start(zap_span_t *span)
{ {
zap_set_flag(span->analog_data, ZAP_ANALOG_RUNNING); zap_analog_data_t *analog_data = span->signal_data;
zap_set_flag(analog_data, ZAP_ANALOG_RUNNING);
return zap_thread_create_detached(zap_analog_run, span); return zap_thread_create_detached(zap_analog_run, span);
} }
......
...@@ -319,12 +319,8 @@ zap_status_t zap_span_close_all(void) ...@@ -319,12 +319,8 @@ zap_status_t zap_span_close_all(void)
if (span->mutex) { if (span->mutex) {
zap_mutex_destroy(&span->mutex); zap_mutex_destroy(&span->mutex);
} }
if (span->isdn_data) {
free(span->isdn_data); zap_safe_free(span->signal_data);
}
if (span->analog_data) {
free(span->isdn_data);
}
} }
zap_mutex_unlock(globals.mutex); zap_mutex_unlock(globals.mutex);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论