}
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)
#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
+}
+static int inter_gsm_bs_hr(struct interface *interface, char *filename, int line, char *parameter, char *value)
+{
+#ifndef WITH_GSM_BS
+ SPRINT(interface_error, "Error in %s (line %d): GSM BS side not compiled in.\n", filename, line);
+ return(-1);
+#else
+ interface->gsm_bs_hr = 1;
return(0);
#endif
/* 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);
}
SPRINT(interface_error, "Error in %s (line %d): Interface does not support RTP\n", filename, line);
return(-1);
}
+
+ if (interface->app != EAPP_TYPE_BRIDGE) {
+ SPRINT(interface_error, "Error in %s (line %d): '%s' requires previous 'bridge' parameter.\n", filename, line, parameter);
+ return(-1);
+ }
+
interface->rtp_bridge = 1;
return(0);
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, "suppress"))
- ifport->ss5 |= SS5_FEATURE_SUPPRESS;
+ 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, "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);
{"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-ms", &inter_gsm_ms, "<socket>",
+ {"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 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."},
{"rtp-bridge", &inter_rtp_bridge, "",
"Enables RTP bridging directly from this interface.\n"
- "This only works, if both ends support RTP. (like gsm-bs and sip)"},
+ "This only works if both bridged interfaces use RTP, e.g. between gsm-bs and sip.\n"
+ "This parameter must follow a 'bridge' parameter.\n"},
#if 0
not needed, since ms defines what is supports and remote (sip) tells what is selected
{"rtp-payload", &inter_rtp_payload, "<codec>",
" 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>",
#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)
#endif
#ifdef WITH_GSM_BS
if (interface->gsm_bs)
- gsm_bs_init(interface);
+ gsm_bs_new(interface);
#endif
#ifdef WITH_SIP
if (interface->sip)