** **
\*****************************************************************************/
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
#include "main.h"
struct interface *interface_first = NULL; /* first interface is current list */
ifport->ptp = 1;
return(0);
}
+#if 0
static int inter_ptmp(struct interface *interface, char *filename, int line, char *parameter, char *value)
{
struct interface_port *ifport;
ifport->ptmp = 1;
return(0);
}
+#endif
static int inter_nt(struct interface *interface, char *filename, int line, char *parameter, char *value)
{
#ifdef SOCKET_MISDN
*ifportp = ifport;
return(0);
}
+static int inter_l2hold(struct interface *interface, char *filename, int line, char *parameter, char *value)
+{
+ struct interface_port *ifport;
+
+ /* port in chain ? */
+ if (!interface->ifport)
+ {
+ SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects previous 'port' definition.\n", filename, line, parameter);
+ return(-1);
+ }
+ /* goto end of chain */
+ ifport = interface->ifport;
+ while(ifport->next)
+ ifport = ifport->next;
+ if (!strcmp(value, "yes"))
+ {
+ ifport->l2hold = 1;
+ } else
+ if (!strcmp(value, "no"))
+ {
+ ifport->l2hold = -1;
+ } else
+ {
+ SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expecting parameter 'yes' or 'no'.\n", filename, line, parameter);
+ return(-1);
+ }
+ return(0);
+}
static int inter_channel_out(struct interface *interface, char *filename, int line, char *parameter, char *value)
{
struct interface_port *ifport;
}
return(0);
}
+static int inter_timeouts(struct interface *interface, char *filename, int line, char *parameter, char *value)
+{
+ struct interface_port *ifport;
+// struct select_channel *selchannel, **selchannelp;
+// int val;
+ char *p, *el;
+
+ /* port in chain ? */
+ if (!interface->ifport)
+ {
+ SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects previous 'port' definition.\n", filename, line, parameter);
+ return(-1);
+ }
+ /* goto end of chain */
+ ifport = interface->ifport;
+ while(ifport->next)
+ ifport = ifport->next;
+ p = value;
+ if (!*p)
+ {
+ nofive:
+ SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects five timeout values.\n", filename, line, parameter);
+ return(-1);
+ }
+ el = p;
+ p = get_seperated(p);
+ ifport->tout_setup = atoi(el);
+ if (!*p)
+ goto nofive;
+ el = p;
+ p = get_seperated(p);
+ ifport->tout_dialing = atoi(el);
+ if (!*p)
+ goto nofive;
+ el = p;
+ p = get_seperated(p);
+ ifport->tout_proceeding = atoi(el);
+ if (!*p)
+ goto nofive;
+ el = p;
+ p = get_seperated(p);
+ ifport->tout_alerting = atoi(el);
+ if (!*p)
+ goto nofive;
+ el = p;
+ p = get_seperated(p);
+ ifport->tout_disconnect = atoi(el);
+ return(0);
+}
static int inter_msn(struct interface *interface, char *filename, int line, char *parameter, char *value)
{
struct interface_msn *ifmsn, **ifmsnp;
goto typeerror;
ifscreen->result_type = INFO_NTYPE_INTERNATIONAL;
} else
- if (!strcasecmp(el, "allowed"))
+ if (!strcasecmp(el, "present") || !strcasecmp(el, "presented") || !strcasecmp(el, "allowed") || !strcasecmp(el, "allow"))
{
if (ifscreen->result_present != -1)
goto presenterror;
ifscreen->result_present = INFO_PRESENT_ALLOWED;
} else
- if (!strcasecmp(el, "restrict") || !strcasecmp(el, "restricted"))
+ if (!strcasecmp(el, "restrict") || !strcasecmp(el, "restricted") || !strcasecmp(el, "deny") || !strcasecmp(el, "denied"))
{
if (ifscreen->result_present != -1)
goto presenterror;
SPRINT(interface_error, "Error in %s (line %d): parameter '%s %s' gain values not in range. (-8...8)\n", filename, line, parameter, value);
return(-1);
}
- interface->gain_tx = atoi(p);
- interface->gain_rx = atoi(q);
+ interface->tx_gain = atoi(p);
+ interface->rx_gain = atoi(q);
} else
if (!strcasecmp(value, "pipeline"))
{
"This is required on NT-mode ports that are multipoint by default.\n"
"This parameter must follow a 'port' parameter."},
+#if 0
{"ptmp", &inter_ptmp, "",
"The given port above is opened as point-to-multipoint.\n"
"This is required on PRI NT-mode ports that are point-to-point by default.\n"
"This parameter must follow a 'port' parameter."},
+#endif
+
{"nt", &inter_nt, "",
"The given port above is opened in NT-mode.\n"
#ifdef SOCKET_MISDN
#endif
"This parameter must follow a 'port' parameter."},
+ {"layer2hold", &inter_l2hold, "yes | no",
+ "The given port will continuously try to establish layer 2 link and hold it.\n"
+ "It is required for PTP links in most cases, therefore it is default.\n"
+ "This parameter must follow a 'port' parameter."},
+
{"channel-out", &inter_channel_out, "[force,][<number>][,...][,free][,any][,no]",
"Channel selection list for all outgoing calls to the interface.\n"
"A free channels is searched in order of appearance.\n"
" no - Signal 'no channel available' aka 'call waiting'. (see DSS1)"},
{"channel-in", &inter_channel_in, "[<number>][,...][,free]",
- "Channel selection list for all incomming calls from the interface.\n"
+ "Channel selection list for all incoming calls from the interface.\n"
"A free channels is accepted if in the list.\n"
"If any channel was requested, the first free channel found is selected.\n"
"This parameter must follow a 'port' parameter.\n"
" <number>[,...] - List of channels to accept.\n"
" free - Accept any free channel"},
+ {"timeouts", &inter_timeouts, "<setup> <dialing> <proceeding> <alerting> <disconnect>",
+ "Timeout values for call states. They are both for incoming and outgoing states.\n"
+ "The default is 120 seconds for all states. Use 0 to disable.\n"
+ "This parameter must follow a 'port' parameter.\n"},
+
{"msn", &inter_msn, "<default MSN>,[<additional MSN>[,...]]",
- "Incomming caller ID is checked against given MSN numbers.\n"
+ "Incoming caller ID is checked against given MSN numbers.\n"
"If the caller ID is not found in this list, it is overwritten by the first MSN"},
{"screen-in", &inter_screen_in, "[options] <old caller ID>[%] [options] <new caller ID>[%]",
- "Adds an entry for incomming calls to the caller ID screen list.\n"
+ "Adds an entry for incoming calls to the caller ID screen list.\n"
"If the given 'old caller ID' matches, it is replaced by the 'new caller ID'\n"
"If '%' is given after old caller ID, it matches even if caller ID has\n"
"additional digits.\n"
"Disables DTMF detection for this interface.\n"
"This parameter must follow a 'port' parameter."},
-#if 0
- {"layer2keep", &inter_layer2keep, "yes | no",
- "By default, layer 2 is establised and kept up on PTP interfaces.\n"
- ".\n"
- "This parameter must follow a 'port' parameter."},
-#endif
-
{"filter", &inter_filter, "<filter> <parameters>",
"Adds/appends a filter. Filters are ordered in transmit direction.\n"
"gain <tx-volume> <rx-volume> - Changes volume (-8 .. 8)\n"
struct mISDNport *mISDNport;
/* open new port */
- mISDNport = mISDNport_open(ifport->portnum, ifport->ptp, ifport->ptmp, ifport->nt, ifport->interface);
+ mISDNport = mISDNport_open(ifport->portnum, ifport->ptp, ifport->nt, ifport->l2hold, ifport->interface);
if (mISDNport)
{
/* link port */
/* screen caller id
- * out==0: incomming caller id, out==1: outgoing caller id
+ * out==0: incoming caller id, out==1: outgoing caller id
*/
void do_screen(int out, char *id, int idsize, int *type, int *present, struct interface *interface)
{
}
if (ifmsn)
{
- start_trace(0, interface, numberrize_callerinfo(id, *type), NULL, DIRECTION_IN, 0, 0, "SCREEN (fount in MSN list)");
+ start_trace(0, interface, numberrize_callerinfo(id, *type), NULL, DIRECTION_IN, 0, 0, "SCREEN (found in MSN list)");
add_trace("msn", NULL, "%s", id);
end_trace();
}
if (!ifmsn && msn1) // not in list, first msn given
{
- start_trace(0, interface, numberrize_callerinfo(id, *type), NULL, DIRECTION_IN, 0, 0, "SCREEN (not fount in MSN list)");
+ start_trace(0, interface, numberrize_callerinfo(id, *type), NULL, DIRECTION_IN, 0, 0, "SCREEN (not found in MSN list)");
add_trace("msn", "given", "%s", id);
add_trace("msn", "used", "%s", msn1);
end_trace();
}
if (ifscreen) // match
{
- start_trace(0, interface, numberrize_callerinfo(id, *type), NULL, out?DIRECTION_OUT:DIRECTION_IN, 0, 0, "SCREEN (fount in screen list)");
+ start_trace(0, interface, numberrize_callerinfo(id, *type), NULL, out?DIRECTION_OUT:DIRECTION_IN, 0, 0, "SCREEN (found in screen list)");
switch(*type)
{
case INFO_NTYPE_UNKNOWN: