mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-05-31 18:55:49 +00:00
freetdm: ftmod_pritap - Add interface type parameter (cpe/net)
This commit is contained in:
parent
d2a73cc0e4
commit
0a92094995
@ -55,6 +55,12 @@ typedef struct {
|
|||||||
int inuse:1;
|
int inuse:1;
|
||||||
} passive_call_t;
|
} passive_call_t;
|
||||||
|
|
||||||
|
typedef enum pritap_iface {
|
||||||
|
PRITAP_IFACE_UNKNOWN = 0,
|
||||||
|
PRITAP_IFACE_CPE = 1,
|
||||||
|
PRITAP_IFACE_NET = 2,
|
||||||
|
} pritap_iface_t;
|
||||||
|
|
||||||
typedef struct pritap {
|
typedef struct pritap {
|
||||||
int32_t flags;
|
int32_t flags;
|
||||||
struct pri *pri;
|
struct pri *pri;
|
||||||
@ -65,6 +71,7 @@ typedef struct pritap {
|
|||||||
ftdm_span_t *peerspan;
|
ftdm_span_t *peerspan;
|
||||||
ftdm_mutex_t *pcalls_lock;
|
ftdm_mutex_t *pcalls_lock;
|
||||||
passive_call_t pcalls[FTDM_MAX_CHANNELS_PHYSICAL_SPAN];
|
passive_call_t pcalls[FTDM_MAX_CHANNELS_PHYSICAL_SPAN];
|
||||||
|
pritap_iface_t iface;
|
||||||
} pritap_t;
|
} pritap_t;
|
||||||
|
|
||||||
static FIO_IO_UNLOAD_FUNCTION(ftdm_pritap_unload)
|
static FIO_IO_UNLOAD_FUNCTION(ftdm_pritap_unload)
|
||||||
@ -268,11 +275,15 @@ static ftdm_state_map_t pritap_state_map = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define PRITAP_GET_INTERFACE(iface) iface == PRITAP_IFACE_CPE ? "CPE" : \
|
||||||
|
iface == PRITAP_IFACE_NET ? "NET" : "UNKNOWN"
|
||||||
static ftdm_status_t state_advance(ftdm_channel_t *ftdmchan)
|
static ftdm_status_t state_advance(ftdm_channel_t *ftdmchan)
|
||||||
{
|
{
|
||||||
ftdm_status_t status;
|
ftdm_status_t status;
|
||||||
ftdm_sigmsg_t sig;
|
ftdm_sigmsg_t sig;
|
||||||
ftdm_channel_t *peerchan = ftdmchan->call_data;
|
ftdm_channel_t *peerchan = ftdmchan->call_data;
|
||||||
|
pritap_t *pritap = ftdmchan->span->signal_data;
|
||||||
|
pritap_t *peer_pritap = pritap->peerspan->signal_data;
|
||||||
|
|
||||||
ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "processing state %s\n", ftdm_channel_state2str(ftdmchan->state));
|
ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "processing state %s\n", ftdm_channel_state2str(ftdmchan->state));
|
||||||
|
|
||||||
@ -314,6 +325,9 @@ static ftdm_status_t state_advance(ftdm_channel_t *ftdmchan)
|
|||||||
case FTDM_CHANNEL_STATE_RING:
|
case FTDM_CHANNEL_STATE_RING:
|
||||||
{
|
{
|
||||||
sig.event_id = FTDM_SIGEVENT_START;
|
sig.event_id = FTDM_SIGEVENT_START;
|
||||||
|
/* The ring interface (where the setup was received) is the peer, since we RING the channel
|
||||||
|
* where PROCEED/PROGRESS is received */
|
||||||
|
ftdm_sigmsg_add_var(&sig, "pritap_ring_interface", PRITAP_GET_INTERFACE(peer_pritap->iface));
|
||||||
if ((status = ftdm_span_send_signal(ftdmchan->span, &sig) != FTDM_SUCCESS)) {
|
if ((status = ftdm_span_send_signal(ftdmchan->span, &sig) != FTDM_SUCCESS)) {
|
||||||
ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_HANGUP);
|
ftdm_set_state_locked(ftdmchan, FTDM_CHANNEL_STATE_HANGUP);
|
||||||
}
|
}
|
||||||
@ -855,6 +869,7 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_pritap_configure_span)
|
|||||||
ftdm_channel_t *dchan = NULL;
|
ftdm_channel_t *dchan = NULL;
|
||||||
pritap_t *pritap = NULL;
|
pritap_t *pritap = NULL;
|
||||||
ftdm_span_t *peerspan = NULL;
|
ftdm_span_t *peerspan = NULL;
|
||||||
|
pritap_iface_t iface = PRITAP_IFACE_UNKNOWN;
|
||||||
unsigned paramindex = 0;
|
unsigned paramindex = 0;
|
||||||
|
|
||||||
if (span->trunk_type >= FTDM_TRUNK_NONE) {
|
if (span->trunk_type >= FTDM_TRUNK_NONE) {
|
||||||
@ -882,6 +897,14 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_pritap_configure_span)
|
|||||||
debug = val;
|
debug = val;
|
||||||
} else if (!strcasecmp(var, "mixaudio")) {
|
} else if (!strcasecmp(var, "mixaudio")) {
|
||||||
mixaudio = ftdm_true(val);
|
mixaudio = ftdm_true(val);
|
||||||
|
} else if (!strcasecmp(var, "interface")) {
|
||||||
|
if (!strcasecmp(val, "cpe")) {
|
||||||
|
iface = PRITAP_IFACE_CPE;
|
||||||
|
} else if (!strcasecmp(val, "net")) {
|
||||||
|
iface = PRITAP_IFACE_NET;
|
||||||
|
} else {
|
||||||
|
ftdm_log(FTDM_LOG_WARNING, "Ignoring invalid tapping interface type %s\n", val);
|
||||||
|
}
|
||||||
} else if (!strcasecmp(var, "peerspan")) {
|
} else if (!strcasecmp(var, "peerspan")) {
|
||||||
if (ftdm_span_find_by_name(val, &peerspan) != FTDM_SUCCESS) {
|
if (ftdm_span_find_by_name(val, &peerspan) != FTDM_SUCCESS) {
|
||||||
ftdm_log(FTDM_LOG_ERROR, "Invalid tapping peer span %s\n", val);
|
ftdm_log(FTDM_LOG_ERROR, "Invalid tapping peer span %s\n", val);
|
||||||
@ -906,6 +929,7 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_pritap_configure_span)
|
|||||||
pritap->dchan = dchan;
|
pritap->dchan = dchan;
|
||||||
pritap->peerspan = peerspan;
|
pritap->peerspan = peerspan;
|
||||||
pritap->mixaudio = mixaudio;
|
pritap->mixaudio = mixaudio;
|
||||||
|
pritap->iface = iface;
|
||||||
|
|
||||||
span->start = ftdm_pritap_start;
|
span->start = ftdm_pritap_start;
|
||||||
span->stop = ftdm_pritap_stop;
|
span->stop = ftdm_pritap_stop;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user