Add -lncurses to LDD flags
[lcr.git] / interface.c
index 4cc978c..f1cb3f2 100644 (file)
@@ -880,18 +880,12 @@ static int inter_dialmax(struct interface *interface, char *filename, int line,
 }
 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);
+       if (!value || !value[0]) {
+               SPRINT(interface_error, "Error in %s (line %d): Missing tones directory.\n", filename, line);
                return(-1);
        }
-       /* goto end of chain */
-       ifport = interface->ifport;
-       while(ifport->next)
-               ifport = ifport->next;
-       SCPY(ifport->tones_dir, value);
+       SCPY(interface->tones_dir, value);
+
        return(0);
 }
 static int inter_gsm(struct interface *interface, char *filename, int line, char *parameter, char *value)
@@ -907,18 +901,23 @@ static int inter_gsm_bs(struct interface *interface, char *filename, int line, c
 #else
        struct interface *searchif;
 
+       interface->gsm_bs = 1;
+
+       if (!value)
+               interface->gsm_bs_name[0] = '\0';
+       else
+               SCPY(interface->gsm_bs_name, value);
+
+       /* check if name is used multiple times */
        searchif = interface_newlist;
        while(searchif) {
-               if (searchif->gsm_bs) {
-                       SPRINT(interface_error, "Error in %s (line %d): interface '%s' already uses gsm BS side.\n", filename, line, searchif->name);
+               if (searchif != interface && searchif->gsm_bs && !strcmp(searchif->gsm_bs_name, interface->gsm_bs_name)) {
+                       SPRINT(interface_error, "Error in %s (line %d): network '%s' already uses the given MS name '%s', choose a different one.\n", filename, line, interface->gsm_bs_name, searchif->gsm_bs_name);
                        return(-1);
                }
                searchif = searchif->next;
        }
 
-       /* goto end of chain again to set gsmflag */
-       interface->gsm_bs = 1;
-
        return(0);
 #endif
 }
@@ -953,7 +952,7 @@ static int inter_gsm_ms(struct interface *interface, char *filename, int line, c
        /* check if name is used multiple times */
        searchif = interface_newlist;
        while(searchif) {
-               if (searchif != interface && !strcmp(searchif->gsm_ms_name, interface->gsm_ms_name)) {
+               if (searchif != interface && searchif->gsm_bs && !strcmp(searchif->gsm_ms_name, interface->gsm_ms_name)) {
                        SPRINT(interface_error, "Error in %s (line %d): mobile '%s' already uses the given MS name '%s', choose a different one.\n", filename, line, interface->gsm_ms_name, searchif->gsm_ms_name);
                        return(-1);
                }
@@ -1097,11 +1096,17 @@ static int inter_ss5(struct interface *interface, char *filename, int line, char
                if (!strcasecmp(element, "delay"))
                        ifport->ss5 |= SS5_FEATURE_DELAY;
                else
-               if (!strcasecmp(element, "starrelease"))
-                       ifport->ss5 |= SS5_FEATURE_STAR_RELEASE;
+               if (!strcasecmp(element, "release"))
+                       ifport->ss5 |= SS5_FEATURE_RELEASE;
+               else
+               if (!strcasecmp(element, "mute-rx"))
+                       ifport->ss5 |= SS5_FEATURE_MUTE_RX;
+               else
+               if (!strcasecmp(element, "mute-tx"))
+                       ifport->ss5 |= SS5_FEATURE_MUTE_TX;
                else
-               if (!strcasecmp(element, "suppress"))
-                       ifport->ss5 |= SS5_FEATURE_SUPPRESS;
+               if (!strcasecmp(element, "quality"))
+                       ifport->ss5 |= SS5_FEATURE_QUALITY;
                else {
                        SPRINT(interface_error, "Error in %s (line %d): parameter '%s' does not allow value element '%s'.\n", filename, line, parameter, element);
                        return(-1);
@@ -1343,18 +1348,21 @@ struct interface_param interface_param[] = {
        {"tones_dir", &inter_tones_dir, "<path>",
        "Overrides the given tone_dir in options.conf.\n"
        "To used kernel tones in mISDN_dsp.ko, say 'american', 'german', or 'oldgerman'."},
+       {"tones-dir", &inter_tones_dir, "<path>",
+       "Overrides the given tone_dir in options.conf.\n"
+       "To used kernel tones in mISDN_dsp.ko, say 'american', 'german', or 'oldgerman'."},
 
        {"gsm", &inter_gsm, "",
        ""},
-       {"gsm-bs", &inter_gsm_bs, "",
-       "Sets up GSM base station interface for using OpenBSC."},
+       {"gsm-bs", &inter_gsm_bs, "[<socket name>]",
+       "Sets up GSM base station interface for using OpenBSC.\n"
+       "The socket is /tmp/bsc_mncc by default. If socket name is given, the socket will be\n"
+       "extended to /tmp/bsc_mncc_<socket name>."},
        {"hr", &inter_gsm_bs_hr, "",
        "Enable and prefer half rate for mobile terminating calls."},
-       {"gsm-ms", &inter_gsm_ms, "<socket>",
+       {"gsm-ms", &inter_gsm_ms, "<socket name>",
        "Sets up GSM mobile station interface for using Osmocom-BB.\n"
-       "The name of the MS folows the interface name.\n"
-       "The socket is /tmp/osmocom_l2 by default and need to be changed when multiple\n"
-       "MS interfaces are used."},
+       "The socket will be /tmp/ms_mncc_<socket name>."},
        {"sip", &inter_sip, "<local IP> <remote IP>",
        "Sets up SIP interface that represents one SIP endpoint.\n"
        "Give SIP configuration file."},
@@ -1390,8 +1398,9 @@ struct interface_param interface_param[] = {
        " bell - Allow releasing and pulse-dialing via 2600 Hz like old Bell systems.\n"
        " pulsedialing - Use pulse dialing on outgoing exchange. (takes long!)\n"
        " delay - Use on incomming exchange, to make you feel a delay when blueboxing.\n"
-       " starrelease - Pulse dialing a star (11 pulses per digit) clears current call.\n"
-       " suppress - Suppress received tones, as they will be recognized."},
+       " release - Pulse dialing a star (11 pulses per digit) clears current call.\n"
+       " mutes-rx - Mute received 2600 and 2400 Hz tones when detected. (more realistic)\n"
+       " mutes-tx - Mute received 2600 and 2400 Hz tones while transmitting reply tone. (more hackable)"},
 #endif
 
        {"remote", &inter_remote, "<application>",
@@ -1690,7 +1699,7 @@ void relink_interfaces(void)
 #endif
 #ifdef WITH_GSM_BS
                        if (interface->gsm_bs)
-                               gsm_bs_exit(0);
+                               gsm_bs_delete(interface->gsm_bs_name);
 #endif
 #ifdef WITH_SIP
                        if (interface->sip)
@@ -1725,7 +1734,7 @@ void relink_interfaces(void)
 #endif
 #ifdef WITH_GSM_BS
                        if (interface->gsm_bs)
-                               gsm_bs_init(interface);
+                               gsm_bs_new(interface);
 #endif
 #ifdef WITH_SIP
                        if (interface->sip)