<param name="polarity-delay" value="600"/>
-->
+ <!-- Retrieve caller id on polarity reverse -->
+ <!--
+ <param name="polarity-callerid" value="true"/>
+ -->
+
<!-- regex to stop dialing when it matches -->
<!--<param name="dial-regex" value="5555"/>-->
const char *enable_callerid = "true";
const char *answer_polarity = "false";
const char *hangup_polarity = "false";
+ const char *polarity_callerid = "false";
int polarity_delay = 600;
int callwaiting = 1;
int dialtone_timeout = 5000;
hangup_polarity = val;
} else if (!strcasecmp(var, "polarity-delay")) {
polarity_delay = atoi(val);
+ } else if (!strcasecmp(var, "polarity-callerid")) {
+ polarity_callerid = val;
} else if (!strcasecmp(var, "fail-dial-regex")) {
fail_dial_regex = val;
} else if (!strcasecmp(var, "hold-music")) {
"enable_callerid", enable_callerid,
"answer_polarity_reverse", answer_polarity,
"hangup_polarity_reverse", hangup_polarity,
+ "polarity_callerid", polarity_callerid,
"polarity_delay", &polarity_delay,
"callwaiting", &callwaiting,
"wait_dialtone_timeout", &dialtone_timeout,
FTDM_ANALOG_RUNNING = (1 << 0),
FTDM_ANALOG_CALLERID = (1 << 1),
FTDM_ANALOG_ANSWER_POLARITY_REVERSE = (1 << 2),
- FTDM_ANALOG_HANGUP_POLARITY_REVERSE = (1 << 3)
+ FTDM_ANALOG_HANGUP_POLARITY_REVERSE = (1 << 3),
+ FTDM_ANALOG_POLARITY_CALLERID = (1 << 4)
} ftdm_analog_flag_t;
#define FTDM_MAX_HOTLINE_STR 20
break;
}
hotline = val;
+ } else if (!strcasecmp(var, "polarity_callerid")) {
+ if (!(val = va_arg(ap, char *))) {
+ break;
+ }
+ if (ftdm_true(val)) {
+ flags |= FTDM_ANALOG_POLARITY_CALLERID;
+ } else {
+ flags &= ~FTDM_ANALOG_POLARITY_CALLERID;
+ }
} else {
ftdm_log(FTDM_LOG_ERROR, "Unknown parameter %s in span %s\n", var, span->name);
}
break;
}
if (event->channel->state == FTDM_CHANNEL_STATE_DOWN) {
- ftdm_log_chan_msg(event->channel, FTDM_LOG_DEBUG,
- "Ignoring polarity reversal because this channel is down\n");
+ if (ftdm_test_flag(analog_data, FTDM_ANALOG_CALLERID)
+ && ftdm_test_flag(analog_data, FTDM_ANALOG_POLARITY_CALLERID)) {
+ ftdm_log_chan_msg(event->channel, "Polarity reversal detected while down, getting caller id now\n");
+ ftdm_set_state(event->channel, FTDM_CHANNEL_STATE_GET_CALLERID);
+ event->channel->ring_count = 1;
+ ftdm_mutex_unlock(event->channel->mutex);
+ locked = 0;
+ ftdm_thread_create_detached(ftdm_analog_channel_run);
+ } else {
+ ftdm_log_chan_msg(event->channel, FTDM_LOG_DEBUG,
+ "Ignoring polarity reversal because this channel is down\n");
+ }
break;
}
/* we have a good channel, set the polarity flag and let the channel thread deal with it */
* 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.
+ *
+ * Contributors:
+ *
+ * Moises Silva <moy@sangoma.com>
+ * W McRoberts <fs@whmcr.com>
+ *
*/
#include "private/ftdm_core.h"
ioctlcmd ECHOTRAIN;
ioctlcmd SETTXBITS;
ioctlcmd GETRXBITS;
+ ioctlcmd SETPOLARITY;
};
/**
.GETCONFMUTE = DAHDI_GETCONFMUTE,
.ECHOTRAIN = DAHDI_ECHOTRAIN,
.SETTXBITS = DAHDI_SETTXBITS,
- .GETRXBITS = DAHDI_GETRXBITS
+ .GETRXBITS = DAHDI_GETRXBITS,
+ .SETPOLARITY = DAHDI_SETPOLARITY
};
#define ZT_INVALID_SOCKET -1
err = ioctl(ftdmchan->sockfd, codes.FLUSH, &flushmode);
}
break;
+ case FTDM_COMMAND_SET_POLARITY:
+ {
+ ftdm_polarity_t polarity = FTDM_COMMAND_OBJ_INT;
+ err = ioctl(ftdmchan->sockfd, codes.SETPOLARITY, polarity);
+ if (!err) {
+ ftdmchan->polarity = polarity;
+ }
+ }
+ break;
case FTDM_COMMAND_FLUSH_RX_BUFFERS:
{
int flushmode = ZT_FLUSH_READ;
*event_id = FTDM_OOB_NOOP; /* What else could we do? */
}
break;
+ case ZT_EVENT_POLARITY:
+ {
+ ftdm_log_chan_msg(fchan, FTDM_LOG_ERROR, "Got polarity reverse (ZT_EVENT_POLARITY)\n");
+ *event_id = FTDM_OOB_POLARITY_REVERSE;
+ }
+ break;
case ZT_EVENT_NONE:
{
ftdm_log_chan_msg(fchan, FTDM_LOG_DEBUG, "No event\n");
* 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.
+ *
+ * Contributors:
+ *
+ * Moises Silva <moy@sangoma.com>
+ * W McRoberts <fs@whmcr.com>
+ *
*/
#ifndef FTDM_ZT_H
#define DAHDI_SETTXBITS _IOW (DAHDI_CODE, 43, int)
#define DAHDI_GETRXBITS _IOR (DAHDI_CODE, 43, int)
+#define DAHDI_SETPOLARITY _IOW (DAHDI_CODE, 92, int) /* Polarity setting for FXO lines */
#endif