2009-02-07 23:14:25 +00:00
|
|
|
/*
|
2012-04-25 17:14:55 -05:00
|
|
|
* Copyright (c) 2009-2012, Anthony Minessale II
|
2009-02-07 23:14:25 +00:00
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
|
|
|
*
|
|
|
|
* * Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
*
|
|
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
|
|
|
*
|
|
|
|
* * Neither the name of the original author; nor the names of any contributors
|
|
|
|
* may be used to endorse or promote products derived from this software
|
|
|
|
* without specific prior written permission.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
|
|
|
|
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
|
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
|
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*/
|
2010-01-15 19:22:49 +00:00
|
|
|
#ifndef FTMOD_LIBPRI_H
|
|
|
|
#define FTMOD_LIBPRI_H
|
|
|
|
#include "freetdm.h"
|
2009-02-07 23:14:25 +00:00
|
|
|
#include "lpwrap_pri.h"
|
|
|
|
|
ftmod_libpri: Improve RESTART handling, add PTP NT idle channel restart and T316.
Do not try to send RESTART on BRI PTMP spans, libpri will just print
an error and do nothing, causing the channels to be stuck in RESTART
forever.
Add T316 (RESTART ACK timeout), which is not implemented by libpri.
The default timeout is 30 seconds (Q.931 recommends 2 minutes, but
that is a little long and libpri layer 2 is being stupid) and the
restart attempt limit to 3 (instead of 2).
Periodically send RESTART on idle b-channels in PTP NT mode.
Default interval is 15 minutes, feature can be disabled by setting
"idle_restart_interval" to 0 in the span configuration.
Allow timeout / interval values to have an additional time unit
suffix for convenience reasons, the default (no unit specified)
is milliseconds, valid units include:
w (week), d (day), h (hour), m (minute), s (second)
Only full integers are accepted, no fractional numbers, valid examples:
2w = two weeks
37m = 37 minutes
1h = 1 hour
Combinations of multiple numbers and units (e.g. "1w5d") are not supported.
New span configuration parameters:
idle_restart_interval (milliseconds / time unit suffix /
0 = disabled)
t316 / restart_timeout (milliseconds / time unit suffix)
t316_limit / restart_attempts (number of max. attempts)
Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-09-05 00:22:52 +02:00
|
|
|
/* T302 Overlap receiving inter-digit timeout */
|
ftmod_libpri: Major rework of runtime thread, lpwrap event loop, restart b-channel handling and some new features.
Add per b-channel private data (ftdm_libpri_b_data_t), move the q.931 libpri
call pointer into it and use channel->call_data to make it accessible.
Use ftdm_channel_wait() instead of select() to wait for I/O events on
the D-Channel and rewrite the timeout handling, adding support for custom
timers that can be added to the b-channel private data and started/stopped
with lpwrap_timer_start()/_stop().
The (sorted) list of active lpwrap timers is protected by the timer_mutex,
which is initialized in the now unified lpwrap_init_pri() (see below) and
destroyed in the new lpwrap_destroy_pri() function.
Unify lpwrap_init_pri() and lpwrap_init_bri(). Use the span type to select
BRI/PRI and Point-to-Point vs. Multipoint settings.
Use the new custom lpwrap timer API to implement T302 (aka overlap receiving
digit timeout). The default T302 timeout is 3000 miliseconds and can be set
via the "digit_timeout" or "t302" span configuration parameter
(0 = disable timer, valid range = 3000 ... 30000 miliseconds).
The lpwrap_pri_init() changes made it neccessarry to rewrite the span runtime
thread event loop. The d-channel initialization and libpri event handler
registration have been moved out of the event loop. The b-channel restart
handling in the event loop has been left as-is, pending a further clean up in
the future.
Rename on_info() to on_information() and add a new on_keypad_digit() event
handler to convert incoming KEYPAD DIGIT messages to channel DTMF events
(only useful on BRI PTMP NT-mode).
The channel restart handling has been improved to distinguish between locally
triggered and restarts caused by the remote end (= incoming RESTART messages).
Restarts on the D-Channel now use pri_restart(), causing a Q.921 reset on
the span.
Large patch, i'd have loved to split this into smaller pieces and actually
test some of the bits more toroughly (restart handling), but some people
are f*cking annoying, so here it is.
Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-09-03 19:51:50 +02:00
|
|
|
#define OVERLAP_TIMEOUT_MS_DEFAULT 5000 /* 5 sec */
|
|
|
|
#define OVERLAP_TIMEOUT_MS_MIN 3000 /* 3 sec */
|
|
|
|
#define OVERLAP_TIMEOUT_MS_MAX 30000 /* 30 sec */
|
|
|
|
|
ftmod_libpri: Improve RESTART handling, add PTP NT idle channel restart and T316.
Do not try to send RESTART on BRI PTMP spans, libpri will just print
an error and do nothing, causing the channels to be stuck in RESTART
forever.
Add T316 (RESTART ACK timeout), which is not implemented by libpri.
The default timeout is 30 seconds (Q.931 recommends 2 minutes, but
that is a little long and libpri layer 2 is being stupid) and the
restart attempt limit to 3 (instead of 2).
Periodically send RESTART on idle b-channels in PTP NT mode.
Default interval is 15 minutes, feature can be disabled by setting
"idle_restart_interval" to 0 in the span configuration.
Allow timeout / interval values to have an additional time unit
suffix for convenience reasons, the default (no unit specified)
is milliseconds, valid units include:
w (week), d (day), h (hour), m (minute), s (second)
Only full integers are accepted, no fractional numbers, valid examples:
2w = two weeks
37m = 37 minutes
1h = 1 hour
Combinations of multiple numbers and units (e.g. "1w5d") are not supported.
New span configuration parameters:
idle_restart_interval (milliseconds / time unit suffix /
0 = disabled)
t316 / restart_timeout (milliseconds / time unit suffix)
t316_limit / restart_attempts (number of max. attempts)
Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-09-05 00:22:52 +02:00
|
|
|
/* NT-mode idle b-channel restart timer */
|
|
|
|
#define IDLE_RESTART_TIMEOUT_MS_DEFAULT 900000 /* 15 min */
|
|
|
|
#define IDLE_RESTART_TIMEOUT_MS_MIN 10000 /* 10 sec */
|
|
|
|
#define IDLE_RESTART_TIMEOUT_MS_MAX 86400000 /* 1 day */
|
|
|
|
|
|
|
|
/* T316 RESTART ACK wait timer */
|
|
|
|
#define T316_TIMEOUT_MS_DEFAULT 30000 /* 30 sec */
|
|
|
|
#define T316_TIMEOUT_MS_MIN 10000 /* 10 sec */
|
|
|
|
#define T316_TIMEOUT_MS_MAX 300000 /* 5 min */
|
|
|
|
|
|
|
|
/* T316 restart attempts until channel is suspended */
|
|
|
|
#define T316_ATTEMPT_LIMIT_DEFAULT 3
|
|
|
|
#define T316_ATTEMPT_LIMIT_MIN 1
|
|
|
|
#define T316_ATTEMPT_LIMIT_MAX 10
|
|
|
|
|
|
|
|
|
2012-06-26 20:32:28 +02:00
|
|
|
typedef enum {
|
|
|
|
SERVICE_CHANGE_STATUS_INSERVICE = 0,
|
|
|
|
SERVICE_CHANGE_STATUS_MAINTENANCE,
|
|
|
|
SERVICE_CHANGE_STATUS_OUTOFSERVICE
|
|
|
|
} service_change_status_t;
|
|
|
|
|
2009-02-07 23:14:25 +00:00
|
|
|
typedef enum {
|
2010-01-15 19:22:49 +00:00
|
|
|
FTMOD_LIBPRI_OPT_NONE = 0,
|
|
|
|
FTMOD_LIBPRI_OPT_SUGGEST_CHANNEL = (1 << 0),
|
|
|
|
FTMOD_LIBPRI_OPT_OMIT_DISPLAY_IE = (1 << 1),
|
|
|
|
FTMOD_LIBPRI_OPT_OMIT_REDIRECTING_NUMBER_IE = (1 << 2),
|
2010-11-08 00:43:09 +01:00
|
|
|
FTMOD_LIBPRI_OPT_FACILITY_AOC = (1 << 3),
|
|
|
|
|
|
|
|
FTMOD_LIBPRI_OPT_MAX = (1 << 4)
|
2010-01-15 19:22:49 +00:00
|
|
|
} ftdm_isdn_opts_t;
|
2009-02-07 23:14:25 +00:00
|
|
|
|
|
|
|
typedef enum {
|
2010-01-15 19:22:49 +00:00
|
|
|
FTMOD_LIBPRI_RUNNING = (1 << 0)
|
|
|
|
} ftdm_isdn_flag_t;
|
2009-02-07 23:14:25 +00:00
|
|
|
|
2011-06-29 13:26:51 +02:00
|
|
|
typedef enum {
|
|
|
|
FTMOD_LIBPRI_OVERLAP_NONE = 0,
|
|
|
|
FTMOD_LIBPRI_OVERLAP_RECEIVE = (1 << 0),
|
|
|
|
FTMOD_LIBPRI_OVERLAP_SEND = (1 << 1)
|
|
|
|
#define FTMOD_LIBPRI_OVERLAP_BOTH (FTMOD_LIBPRI_OVERLAP_RECEIVE | FTMOD_LIBPRI_OVERLAP_SEND)
|
|
|
|
} ftdm_isdn_overlap_t;
|
2009-02-07 23:14:25 +00:00
|
|
|
|
2010-01-15 19:22:49 +00:00
|
|
|
struct ftdm_libpri_data {
|
|
|
|
ftdm_channel_t *dchan;
|
|
|
|
ftdm_isdn_opts_t opts;
|
2010-11-10 22:42:18 +01:00
|
|
|
uint32_t flags;
|
|
|
|
uint32_t debug_mask;
|
2009-02-07 23:14:25 +00:00
|
|
|
|
2010-11-10 22:42:18 +01:00
|
|
|
int mode;
|
|
|
|
int dialect;
|
2011-06-29 13:26:51 +02:00
|
|
|
int overlap; /*!< Overlap dial flags */
|
ftmod_libpri: Major rework of runtime thread, lpwrap event loop, restart b-channel handling and some new features.
Add per b-channel private data (ftdm_libpri_b_data_t), move the q.931 libpri
call pointer into it and use channel->call_data to make it accessible.
Use ftdm_channel_wait() instead of select() to wait for I/O events on
the D-Channel and rewrite the timeout handling, adding support for custom
timers that can be added to the b-channel private data and started/stopped
with lpwrap_timer_start()/_stop().
The (sorted) list of active lpwrap timers is protected by the timer_mutex,
which is initialized in the now unified lpwrap_init_pri() (see below) and
destroyed in the new lpwrap_destroy_pri() function.
Unify lpwrap_init_pri() and lpwrap_init_bri(). Use the span type to select
BRI/PRI and Point-to-Point vs. Multipoint settings.
Use the new custom lpwrap timer API to implement T302 (aka overlap receiving
digit timeout). The default T302 timeout is 3000 miliseconds and can be set
via the "digit_timeout" or "t302" span configuration parameter
(0 = disable timer, valid range = 3000 ... 30000 miliseconds).
The lpwrap_pri_init() changes made it neccessarry to rewrite the span runtime
thread event loop. The d-channel initialization and libpri event handler
registration have been moved out of the event loop. The b-channel restart
handling in the event loop has been left as-is, pending a further clean up in
the future.
Rename on_info() to on_information() and add a new on_keypad_digit() event
handler to convert incoming KEYPAD DIGIT messages to channel DTMF events
(only useful on BRI PTMP NT-mode).
The channel restart handling has been improved to distinguish between locally
triggered and restarts caused by the remote end (= incoming RESTART messages).
Restarts on the D-Channel now use pri_restart(), causing a Q.921 reset on
the span.
Large patch, i'd have loved to split this into smaller pieces and actually
test some of the bits more toroughly (restart handling), but some people
are f*cking annoying, so here it is.
Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-09-03 19:51:50 +02:00
|
|
|
int overlap_timeout_ms; /*!< Overlap dial timeout */
|
ftmod_libpri: Improve RESTART handling, add PTP NT idle channel restart and T316.
Do not try to send RESTART on BRI PTMP spans, libpri will just print
an error and do nothing, causing the channels to be stuck in RESTART
forever.
Add T316 (RESTART ACK timeout), which is not implemented by libpri.
The default timeout is 30 seconds (Q.931 recommends 2 minutes, but
that is a little long and libpri layer 2 is being stupid) and the
restart attempt limit to 3 (instead of 2).
Periodically send RESTART on idle b-channels in PTP NT mode.
Default interval is 15 minutes, feature can be disabled by setting
"idle_restart_interval" to 0 in the span configuration.
Allow timeout / interval values to have an additional time unit
suffix for convenience reasons, the default (no unit specified)
is milliseconds, valid units include:
w (week), d (day), h (hour), m (minute), s (second)
Only full integers are accepted, no fractional numbers, valid examples:
2w = two weeks
37m = 37 minutes
1h = 1 hour
Combinations of multiple numbers and units (e.g. "1w5d") are not supported.
New span configuration parameters:
idle_restart_interval (milliseconds / time unit suffix /
0 = disabled)
t316 / restart_timeout (milliseconds / time unit suffix)
t316_limit / restart_attempts (number of max. attempts)
Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-09-05 00:22:52 +02:00
|
|
|
int idle_restart_timeout_ms; /*!< NT-mode idle b-channel restart */
|
|
|
|
int t316_timeout_ms; /*!< T316 RESTART ACK timeout */
|
|
|
|
int t316_max_attempts; /*!< T316 timeout limit */
|
2010-11-10 22:42:18 +01:00
|
|
|
unsigned int layer1;
|
|
|
|
unsigned int ton;
|
2011-08-05 22:50:58 -04:00
|
|
|
unsigned int service_message_support;
|
2009-02-07 23:14:25 +00:00
|
|
|
|
|
|
|
lpwrap_pri_t spri;
|
2012-06-26 21:33:40 +02:00
|
|
|
|
|
|
|
/* MSN filter */
|
|
|
|
ftdm_hash_t *msn_hash;
|
|
|
|
ftdm_mutex_t *msn_mutex;
|
ftmod_libpri: Improve RESTART handling, add PTP NT idle channel restart and T316.
Do not try to send RESTART on BRI PTMP spans, libpri will just print
an error and do nothing, causing the channels to be stuck in RESTART
forever.
Add T316 (RESTART ACK timeout), which is not implemented by libpri.
The default timeout is 30 seconds (Q.931 recommends 2 minutes, but
that is a little long and libpri layer 2 is being stupid) and the
restart attempt limit to 3 (instead of 2).
Periodically send RESTART on idle b-channels in PTP NT mode.
Default interval is 15 minutes, feature can be disabled by setting
"idle_restart_interval" to 0 in the span configuration.
Allow timeout / interval values to have an additional time unit
suffix for convenience reasons, the default (no unit specified)
is milliseconds, valid units include:
w (week), d (day), h (hour), m (minute), s (second)
Only full integers are accepted, no fractional numbers, valid examples:
2w = two weeks
37m = 37 minutes
1h = 1 hour
Combinations of multiple numbers and units (e.g. "1w5d") are not supported.
New span configuration parameters:
idle_restart_interval (milliseconds / time unit suffix /
0 = disabled)
t316 / restart_timeout (milliseconds / time unit suffix)
t316_limit / restart_attempts (number of max. attempts)
Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-09-05 00:22:52 +02:00
|
|
|
|
|
|
|
/* NT-mode idle restart timer */
|
|
|
|
struct lpwrap_timer t3xx;
|
2009-02-07 23:14:25 +00:00
|
|
|
};
|
|
|
|
|
2010-01-15 19:22:49 +00:00
|
|
|
typedef struct ftdm_libpri_data ftdm_libpri_data_t;
|
2009-02-07 23:14:25 +00:00
|
|
|
|
ftmod_libpri: Major rework of runtime thread, lpwrap event loop, restart b-channel handling and some new features.
Add per b-channel private data (ftdm_libpri_b_data_t), move the q.931 libpri
call pointer into it and use channel->call_data to make it accessible.
Use ftdm_channel_wait() instead of select() to wait for I/O events on
the D-Channel and rewrite the timeout handling, adding support for custom
timers that can be added to the b-channel private data and started/stopped
with lpwrap_timer_start()/_stop().
The (sorted) list of active lpwrap timers is protected by the timer_mutex,
which is initialized in the now unified lpwrap_init_pri() (see below) and
destroyed in the new lpwrap_destroy_pri() function.
Unify lpwrap_init_pri() and lpwrap_init_bri(). Use the span type to select
BRI/PRI and Point-to-Point vs. Multipoint settings.
Use the new custom lpwrap timer API to implement T302 (aka overlap receiving
digit timeout). The default T302 timeout is 3000 miliseconds and can be set
via the "digit_timeout" or "t302" span configuration parameter
(0 = disable timer, valid range = 3000 ... 30000 miliseconds).
The lpwrap_pri_init() changes made it neccessarry to rewrite the span runtime
thread event loop. The d-channel initialization and libpri event handler
registration have been moved out of the event loop. The b-channel restart
handling in the event loop has been left as-is, pending a further clean up in
the future.
Rename on_info() to on_information() and add a new on_keypad_digit() event
handler to convert incoming KEYPAD DIGIT messages to channel DTMF events
(only useful on BRI PTMP NT-mode).
The channel restart handling has been improved to distinguish between locally
triggered and restarts caused by the remote end (= incoming RESTART messages).
Restarts on the D-Channel now use pri_restart(), causing a Q.921 reset on
the span.
Large patch, i'd have loved to split this into smaller pieces and actually
test some of the bits more toroughly (restart handling), but some people
are f*cking annoying, so here it is.
Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-09-03 19:51:50 +02:00
|
|
|
|
|
|
|
/*
|
|
|
|
* b-channel flags
|
|
|
|
*/
|
|
|
|
enum {
|
|
|
|
FTDM_LIBPRI_B_NONE = 0,
|
|
|
|
FTDM_LIBPRI_B_REMOTE_RESTART = (1 << 0), /*!< Remote triggered channel restart */
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Per-b-channel private data
|
|
|
|
*/
|
|
|
|
struct ftdm_libpri_b_chan {
|
|
|
|
struct lpwrap_timer t302; /*!< T302 overlap receive timer */
|
ftmod_libpri: Improve RESTART handling, add PTP NT idle channel restart and T316.
Do not try to send RESTART on BRI PTMP spans, libpri will just print
an error and do nothing, causing the channels to be stuck in RESTART
forever.
Add T316 (RESTART ACK timeout), which is not implemented by libpri.
The default timeout is 30 seconds (Q.931 recommends 2 minutes, but
that is a little long and libpri layer 2 is being stupid) and the
restart attempt limit to 3 (instead of 2).
Periodically send RESTART on idle b-channels in PTP NT mode.
Default interval is 15 minutes, feature can be disabled by setting
"idle_restart_interval" to 0 in the span configuration.
Allow timeout / interval values to have an additional time unit
suffix for convenience reasons, the default (no unit specified)
is milliseconds, valid units include:
w (week), d (day), h (hour), m (minute), s (second)
Only full integers are accepted, no fractional numbers, valid examples:
2w = two weeks
37m = 37 minutes
1h = 1 hour
Combinations of multiple numbers and units (e.g. "1w5d") are not supported.
New span configuration parameters:
idle_restart_interval (milliseconds / time unit suffix /
0 = disabled)
t316 / restart_timeout (milliseconds / time unit suffix)
t316_limit / restart_attempts (number of max. attempts)
Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-09-05 00:22:52 +02:00
|
|
|
struct lpwrap_timer t316; /*!< T316 restart ack timer */
|
ftmod_libpri: Major rework of runtime thread, lpwrap event loop, restart b-channel handling and some new features.
Add per b-channel private data (ftdm_libpri_b_data_t), move the q.931 libpri
call pointer into it and use channel->call_data to make it accessible.
Use ftdm_channel_wait() instead of select() to wait for I/O events on
the D-Channel and rewrite the timeout handling, adding support for custom
timers that can be added to the b-channel private data and started/stopped
with lpwrap_timer_start()/_stop().
The (sorted) list of active lpwrap timers is protected by the timer_mutex,
which is initialized in the now unified lpwrap_init_pri() (see below) and
destroyed in the new lpwrap_destroy_pri() function.
Unify lpwrap_init_pri() and lpwrap_init_bri(). Use the span type to select
BRI/PRI and Point-to-Point vs. Multipoint settings.
Use the new custom lpwrap timer API to implement T302 (aka overlap receiving
digit timeout). The default T302 timeout is 3000 miliseconds and can be set
via the "digit_timeout" or "t302" span configuration parameter
(0 = disable timer, valid range = 3000 ... 30000 miliseconds).
The lpwrap_pri_init() changes made it neccessarry to rewrite the span runtime
thread event loop. The d-channel initialization and libpri event handler
registration have been moved out of the event loop. The b-channel restart
handling in the event loop has been left as-is, pending a further clean up in
the future.
Rename on_info() to on_information() and add a new on_keypad_digit() event
handler to convert incoming KEYPAD DIGIT messages to channel DTMF events
(only useful on BRI PTMP NT-mode).
The channel restart handling has been improved to distinguish between locally
triggered and restarts caused by the remote end (= incoming RESTART messages).
Restarts on the D-Channel now use pri_restart(), causing a Q.921 reset on
the span.
Large patch, i'd have loved to split this into smaller pieces and actually
test some of the bits more toroughly (restart handling), but some people
are f*cking annoying, so here it is.
Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-09-03 19:51:50 +02:00
|
|
|
ftdm_channel_t *channel; /*!< back-pointer to b-channel */
|
|
|
|
q931_call *call; /*!< libpri opaque call handle */
|
|
|
|
uint32_t flags; /*!< channel flags */
|
ftmod_libpri: Improve RESTART handling, add PTP NT idle channel restart and T316.
Do not try to send RESTART on BRI PTMP spans, libpri will just print
an error and do nothing, causing the channels to be stuck in RESTART
forever.
Add T316 (RESTART ACK timeout), which is not implemented by libpri.
The default timeout is 30 seconds (Q.931 recommends 2 minutes, but
that is a little long and libpri layer 2 is being stupid) and the
restart attempt limit to 3 (instead of 2).
Periodically send RESTART on idle b-channels in PTP NT mode.
Default interval is 15 minutes, feature can be disabled by setting
"idle_restart_interval" to 0 in the span configuration.
Allow timeout / interval values to have an additional time unit
suffix for convenience reasons, the default (no unit specified)
is milliseconds, valid units include:
w (week), d (day), h (hour), m (minute), s (second)
Only full integers are accepted, no fractional numbers, valid examples:
2w = two weeks
37m = 37 minutes
1h = 1 hour
Combinations of multiple numbers and units (e.g. "1w5d") are not supported.
New span configuration parameters:
idle_restart_interval (milliseconds / time unit suffix /
0 = disabled)
t316 / restart_timeout (milliseconds / time unit suffix)
t316_limit / restart_attempts (number of max. attempts)
Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-09-05 00:22:52 +02:00
|
|
|
uint32_t t316_timeout_cnt; /*!< T316 timeout counter */
|
ftmod_libpri: Major rework of runtime thread, lpwrap event loop, restart b-channel handling and some new features.
Add per b-channel private data (ftdm_libpri_b_data_t), move the q.931 libpri
call pointer into it and use channel->call_data to make it accessible.
Use ftdm_channel_wait() instead of select() to wait for I/O events on
the D-Channel and rewrite the timeout handling, adding support for custom
timers that can be added to the b-channel private data and started/stopped
with lpwrap_timer_start()/_stop().
The (sorted) list of active lpwrap timers is protected by the timer_mutex,
which is initialized in the now unified lpwrap_init_pri() (see below) and
destroyed in the new lpwrap_destroy_pri() function.
Unify lpwrap_init_pri() and lpwrap_init_bri(). Use the span type to select
BRI/PRI and Point-to-Point vs. Multipoint settings.
Use the new custom lpwrap timer API to implement T302 (aka overlap receiving
digit timeout). The default T302 timeout is 3000 miliseconds and can be set
via the "digit_timeout" or "t302" span configuration parameter
(0 = disable timer, valid range = 3000 ... 30000 miliseconds).
The lpwrap_pri_init() changes made it neccessarry to rewrite the span runtime
thread event loop. The d-channel initialization and libpri event handler
registration have been moved out of the event loop. The b-channel restart
handling in the event loop has been left as-is, pending a further clean up in
the future.
Rename on_info() to on_information() and add a new on_keypad_digit() event
handler to convert incoming KEYPAD DIGIT messages to channel DTMF events
(only useful on BRI PTMP NT-mode).
The channel restart handling has been improved to distinguish between locally
triggered and restarts caused by the remote end (= incoming RESTART messages).
Restarts on the D-Channel now use pri_restart(), causing a Q.921 reset on
the span.
Large patch, i'd have loved to split this into smaller pieces and actually
test some of the bits more toroughly (restart handling), but some people
are f*cking annoying, so here it is.
Signed-off-by: Stefan Knoblich <stkn@openisdn.net>
2012-09-03 19:51:50 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct ftdm_libpri_b_chan ftdm_libpri_b_chan_t;
|
|
|
|
|
2009-02-07 23:14:25 +00:00
|
|
|
#endif
|
|
|
|
|
|
|
|
/* For Emacs:
|
|
|
|
* Local Variables:
|
|
|
|
* mode:c
|
|
|
|
* indent-tabs-mode:t
|
|
|
|
* tab-width:4
|
|
|
|
* c-basic-offset:4
|
|
|
|
* End:
|
|
|
|
* For VIM:
|
2009-09-14 22:06:20 +00:00
|
|
|
* vim:set softtabstop=4 shiftwidth=4 tabstop=4:
|
2009-02-07 23:14:25 +00:00
|
|
|
*/
|
|
|
|
|