+static int inter_dialmax(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;
+ ifport->dialmax = atoi(value);
+ return(0);
+}
+static int inter_tones_dir(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;
+ SCPY(ifport->tones_dir, value);
+ return(0);
+}
+static int inter_gsm(struct interface *interface, char *filename, int line, char *parameter, char *value)
+{
+#ifndef WITH_GSM
+ SPRINT(interface_error, "Error in %s (line %d): GSM not compiled in.\n", filename, line);
+ return(-1);
+#else
+ struct interface_port *ifport;
+ struct interface *searchif;
+
+ /* check gsm */
+ if (!gsm) {
+ SPRINT(interface_error, "Error in %s (line %d): GSM is not activated.\n", filename, line);
+ return(-1);
+ }
+ searchif = interface_newlist;
+ while(searchif) {
+ ifport = searchif->ifport;
+ while(ifport) {
+ if (ifport->gsm) {
+ SPRINT(interface_error, "Error in %s (line %d): port '%s' already uses gsm\n", filename, line, value);
+ return(-1);
+ }
+ ifport = ifport->next;
+ }
+ searchif = searchif->next;
+ }
+
+ /* set portname */
+ if (inter_portname(interface, filename, line, (char *)"portname", gsm->conf.interface_lcr))
+ return(-1);
+ /* goto end of chain again to set gsmflag*/
+ ifport = interface->ifport;
+ while(ifport->next)
+ ifport = ifport->next;
+ ifport->gsm = 1;
+ return(0);
+#endif
+}
+static int inter_nonotify(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;
+ ifport->nonotify = 1;
+ return(0);
+}
+#ifdef WITH_SS5
+static int inter_ss5(struct interface *interface, char *filename, int line, char *parameter, char *value)
+{
+ struct interface_port *ifport;
+ char *element;
+
+ /* 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;
+ ifport->ss5 |= SS5_ENABLE;
+ while((element = strsep(&value, " "))) {
+ if (element[0] == '\0')
+ continue;
+ if (!strcasecmp(element, "connect"))
+ ifport->ss5 |= SS5_FEATURE_CONNECT;
+ else
+ if (!strcasecmp(element, "nodisconnect"))
+ ifport->ss5 |= SS5_FEATURE_NODISCONNECT;
+ else
+ if (!strcasecmp(element, "releaseguardtimer"))
+ ifport->ss5 |= SS5_FEATURE_RELEASEGUARDTIMER;
+ else
+ if (!strcasecmp(element, "bell"))
+ ifport->ss5 |= SS5_FEATURE_BELL;
+ else
+ if (!strcasecmp(element, "pulsedialing"))
+ ifport->ss5 |= SS5_FEATURE_PULSEDIALING;
+ else
+ if (!strcasecmp(element, "delay"))
+ ifport->ss5 |= SS5_FEATURE_DELAY;
+ else
+ if (!strcasecmp(element, "starrelease"))
+ ifport->ss5 |= SS5_FEATURE_STAR_RELEASE;
+ else
+ if (!strcasecmp(element, "suppress"))
+ ifport->ss5 |= SS5_FEATURE_SUPPRESS;
+ else {
+ SPRINT(interface_error, "Error in %s (line %d): parameter '%s' does not allow value element '%s'.\n", filename, line, parameter, element);
+ return(-1);
+ }
+ }
+ return(0);
+}
+#endif