]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
update
authorAnthony Minessale <anthony.minessale@gmail.com>
Wed, 27 Jun 2007 19:18:13 +0000 (19:18 +0000)
committerAnthony Minessale <anthony.minessale@gmail.com>
Wed, 27 Jun 2007 19:18:13 +0000 (19:18 +0000)
git-svn-id: http://svn.openzap.org/svn/openzap/trunk@298 a93c3328-9c30-0410-af19-c9cd2b2d52af

libs/openzap/src/include/zap_zt.h
libs/openzap/src/zap_analog.c
libs/openzap/src/zap_io.c
libs/openzap/src/zap_wanpipe.c
libs/openzap/src/zap_zt.c

index eb707671e9973522856482f94e32c18a22a6a1a7..46aab35eb6d3e7d68183e4e87bc49a6f9e90100d 100644 (file)
@@ -233,7 +233,8 @@ ZT_SIG_HDLCFCS                              = ((1 << 9)  | ZT_SIG_HDLCRAW)
 
 #define                ZT_CODE                         'J'
 
-#define                ZT_GET_BLOCKSIZE        _IOW  (ZT_CODE, 1, int)                                 /* Get Transfer Block Size. */
+
+#define                ZT_GET_BLOCKSIZE        _IOR  (ZT_CODE, 1, int)                                 /* Get Transfer Block Size. */
 #define                ZT_SET_BLOCKSIZE        _IOW  (ZT_CODE, 2, int)                                 /* Set Transfer Block Size. */
 #define                ZT_FLUSH                        _IOW  (ZT_CODE, 3, int)                                 /* Flush Buffer(s) and stop I/O */
 #define                ZT_SYNC                         _IOW  (ZT_CODE, 4, int)                                 /* Wait for Write to Finish */
index 23b1ec1a55411255b153948f285d4681bc8f2d58..23a9054dd0da5ac94ff8eec7bc30bb51f3144602 100644 (file)
@@ -215,7 +215,8 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj)
        sig.chan_id = zchan->chan_id;
        sig.span_id = zchan->span_id;
        sig.channel = zchan;
-
+       
+       assert(interval != 0);
 
        while (zap_test_flag(zchan, ZAP_CHANNEL_INTHREAD)) {
                zap_wait_flag_t flags = ZAP_READ;
@@ -279,11 +280,14 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj)
                                break;
                        case ZAP_CHANNEL_STATE_HANGUP:
                                {
-                                               
                                        if (state_counter > 500) {
+
                                                if (zap_test_flag(zchan, ZAP_CHANNEL_OFFHOOK) && zchan->last_state >= ZAP_CHANNEL_STATE_IDLE) {
                                                        zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_BUSY);
                                                } else {
+                                                       if (zap_test_flag(zchan, ZAP_CHANNEL_RINGING)) {
+                                                               zap_channel_command(zchan, ZAP_COMMAND_GENERATE_RING_OFF, NULL);
+                                                       }
                                                        zap_set_state_locked(zchan, ZAP_CHANNEL_STATE_DOWN);
                                                }
                                        }
@@ -577,6 +581,8 @@ static void *zap_analog_channel_run(zap_thread_t *me, void *obj)
 
  done:
        zap_channel_done(zchan);
+
+
        if (zchan->type == ZAP_CHAN_TYPE_FXO && zap_test_flag(zchan, ZAP_CHANNEL_OFFHOOK)) {
                zap_channel_command(zchan, ZAP_COMMAND_ONHOOK, NULL);
        }
@@ -638,6 +644,9 @@ static __inline__ zap_status_t process_event(zap_span_t *span, zap_event_t *even
                break;
        case ZAP_OOB_ONHOOK:
                {
+                       if (zap_test_flag(event->channel, ZAP_CHANNEL_RINGING)) {
+                               zap_channel_command(event->channel, ZAP_COMMAND_GENERATE_RING_OFF, NULL);
+                       }
                        zap_set_state_locked(event->channel, ZAP_CHANNEL_STATE_DOWN);
                }
                break;
index 4ebaaa6bc86047765e33ce67778f2d84fc7c29f3..c15ac3c1ab2b86b0c793da8c43f248cac84a53f1 100644 (file)
@@ -577,12 +577,11 @@ zap_status_t zap_channel_set_state(zap_channel_t *zchan, zap_channel_state_t sta
 {
        int ok = 1;
        
-       zap_mutex_lock(zchan->mutex);
-
        if (!zap_test_flag(zchan, ZAP_CHANNEL_READY)) {
                return ZAP_FAIL;
        }
 
+       zap_mutex_lock(zchan->mutex);
        switch(zchan->state) {
        case ZAP_CHANNEL_STATE_HANGUP:
        case ZAP_CHANNEL_STATE_TERMINATING:
@@ -641,7 +640,7 @@ zap_status_t zap_channel_set_state(zap_channel_t *zchan, zap_channel_state_t sta
        if (state == zchan->state) {
                ok = 0;
        }
-
+       
        if (ok) {
                zap_set_flag(zchan, ZAP_CHANNEL_STATE_CHANGE);  
                zap_set_flag(zchan->span, ZAP_SPAN_STATE_CHANGE);
@@ -1209,11 +1208,13 @@ zap_status_t zap_channel_command(zap_channel_t *zchan, zap_command_t command, vo
 
        if (!zchan->zio->command) {
                snprintf(zchan->last_error, sizeof(zchan->last_error), "method not implemented");
+               zap_log(ZAP_LOG_ERROR, "no commnand functon!\n");       
                GOTO_STATUS(done, ZAP_FAIL);
        }
 
     status = zchan->zio->command(zchan, command, obj);
 
+
  done:
        zap_mutex_unlock(zchan->mutex);
        return status;
index 7a7536f9148015e76c46bad9ba357996c73a88b2..4537e547ff64d93f6d464e00b8e3c1273bc188bf 100644 (file)
@@ -543,7 +543,7 @@ static ZIO_COMMAND_FUNCTION(wanpipe_command)
        int err = 0;
 
        memset(&tdm_api, 0, sizeof(tdm_api));
-       
+
        switch(command) {
        case ZAP_COMMAND_OFFHOOK:
                {
@@ -593,6 +593,7 @@ static ZIO_COMMAND_FUNCTION(wanpipe_command)
                                snprintf(zchan->last_error, sizeof(zchan->last_error), "Ring-off Failed");
                                return ZAP_FAIL;
                        }
+                       zap_clear_pflag_locked(zchan, WP_RINGING);
                        zap_clear_flag_locked(zchan, ZAP_CHANNEL_RINGING);
                }
                break;
index 5f2a60b0525b5a0c49fe394e62cc49175edab0c7..be33a7c536d7d2efa494b8bdecc591d560f5a604 100644 (file)
@@ -61,7 +61,6 @@ static unsigned zt_open_range(zap_span_t *span, unsigned start, unsigned end, za
                zap_socket_t sockfd = ZT_INVALID_SOCKET;
                int len;
 
-               //snprintf(path, sizeof(path), "/dev/zap/%d", x);
                sockfd = open(path, O_RDWR);
                if (sockfd != ZT_INVALID_SOCKET && zap_span_add_channel(span, sockfd, type, &zchan) == ZAP_SUCCESS) {
 
@@ -308,6 +307,8 @@ static ZIO_CONFIGURE_FUNCTION(zt_configure)
 
 static ZIO_OPEN_FUNCTION(zt_open) 
 {
+       zap_channel_set_feature(zchan, ZAP_CHANNEL_FEATURE_INTERVAL);
+       
        if (zchan->type == ZAP_CHAN_TYPE_DQ921 || zchan->type == ZAP_CHAN_TYPE_DQ931) {
                zchan->native_codec = zchan->effective_codec = ZAP_CODEC_NONE;
        } else {
@@ -317,7 +318,6 @@ static ZIO_OPEN_FUNCTION(zt_open)
                        snprintf(zchan->last_error, sizeof(zchan->last_error), "%s", strerror(errno));
                        return ZAP_FAIL;
                } else {
-                       zap_channel_set_feature(zchan, ZAP_CHANNEL_FEATURE_INTERVAL);
                        zchan->effective_interval = zchan->native_interval;
                        zchan->packet_len = blocksize;
                        zchan->native_codec = zchan->effective_codec;
@@ -404,14 +404,14 @@ static ZIO_COMMAND_FUNCTION(zt_command)
                break;
        case ZAP_COMMAND_GET_INTERVAL:
                {
+
                        if (!(err = ioctl(zchan->sockfd, ZT_GET_BLOCKSIZE, &zchan->packet_len))) {
                                zchan->native_interval = zchan->packet_len / 8;
                                if (zchan->effective_codec == ZAP_CODEC_SLIN) {
                                        zchan->packet_len *= 2;
                                }
                                ZAP_COMMAND_OBJ_INT = zchan->native_interval;
-                       }
-
+                       }                       
                }
                break;
        case ZAP_COMMAND_SET_INTERVAL: