return(0);
#endif
}
+static int inter_authenticate(struct interface *interface, char *filename, int line, char *parameter, char *value)
+{
+#ifndef WITH_SIP
+ SPRINT(interface_error, "Error in %s (line %d): SIP not compiled in.\n", filename, line);
+ return(-1);
+#else
+ char *p;
+
+ if (!interface->sip) {
+ SPRINT(interface_error, "Error in %s (line %d): This is not a SIP interface.\n", filename, line);
+ return(-1);
+ }
+
+ /* copy values */
+ if (!value || !value[0]) {
+ SPRINT(interface_error, "Error in %s (line %d): Missing SIP user.\n", filename, line);
+ return(-1);
+ }
+ p = get_seperated(value);
+ if (!p[0]) {
+ SPRINT(interface_error, "Error in %s (line %d): Missing SIP password.\n", filename, line);
+ return(-1);
+ }
+ SCPY(interface->sip_auth_user, value);
+ SCPY(interface->sip_auth_password, p);
+
+ return(0);
+#endif
+}
+static int options_timer(struct interface *interface, char *filename, int line, char *parameter, char *value)
+{
+#ifndef WITH_SIP
+ SPRINT(interface_error, "Error in %s (line %d): SIP not compiled in.\n", filename, line);
+ return(-1);
+#else
+ if (!interface->sip) {
+ SPRINT(interface_error, "Error in %s (line %d): This is not a SIP interface.\n", filename, line);
+ return(-1);
+ }
+
+ if (value)
+ interface->sip_options_timer = atoi(value);
+
+ return(0);
+#endif
+}
+static int options_stun(struct interface *interface, char *filename, int line, char *parameter, char *value)
+{
+#ifndef WITH_SIP
+ SPRINT(interface_error, "Error in %s (line %d): SIP not compiled in.\n", filename, line);
+ return(-1);
+#else
+ char *p;
+
+ if (!interface->sip) {
+ SPRINT(interface_error, "Error in %s (line %d): This is not a SIP interface.\n", filename, line);
+ return(-1);
+ }
+
+ if (!value || !value[0]) {
+ SPRINT(interface_error, "Error in %s (line %d): Missing STUN server.\n", filename, line);
+ return(-1);
+ }
+ p = get_seperated(value);
+ if (!p[0]) {
+ SPRINT(interface_error, "Error in %s (line %d): Missing STUN timer.\n", filename, line);
+ return(-1);
+ }
+ SCPY(interface->sip_stun_server, value);
+ interface->sip_stun_interval = atoi(p);
+
+ return(0);
+#endif
+}
+static int inter_rtp_ports(struct interface *interface, char *filename, int line, char *parameter, char *value)
+{
+#ifndef WITH_SIP
+ SPRINT(interface_error, "Error in %s (line %d): SIP not compiled in.\n", filename, line);
+ return(-1);
+#else
+ char *p;
+
+ if (!interface->sip) {
+ SPRINT(interface_error, "Error in %s (line %d): This is not a SIP interface.\n", filename, line);
+ return(-1);
+ }
+
+ /* copy values */
+ if (!value || !value[0]) {
+ SPRINT(interface_error, "Error in %s (line %d): Missing 'from' port.\n", filename, line);
+ return(-1);
+ }
+ p = get_seperated(value);
+ if (!p[0]) {
+ SPRINT(interface_error, "Error in %s (line %d): Missing 'to' port.\n", filename, line);
+ return(-1);
+ }
+ interface->rtp_port_from = atoi(value);
+ interface->rtp_port_to = atoi(p);
+
+ return(0);
+#endif
+}
+static int inter_register(struct interface *interface, char *filename, int line, char *parameter, char *value)
+{
+#ifndef WITH_SIP
+ SPRINT(interface_error, "Error in %s (line %d): SIP not compiled in.\n", filename, line);
+ return(-1);
+#else
+ char *p;
+
+ if (!interface->sip) {
+ SPRINT(interface_error, "Error in %s (line %d): This is not a SIP interface.\n", filename, line);
+ return(-1);
+ }
+
+ /* copy values */
+ if (!value || !value[0]) {
+ SPRINT(interface_error, "Error in %s (line %d): Missing SIP user.\n", filename, line);
+ return(-1);
+ }
+ p = get_seperated(value);
+ if (!p[0]) {
+ SPRINT(interface_error, "Error in %s (line %d): Missing SIP host\n", filename, line);
+ return(-1);
+ }
+ interface->sip_register = 1;
+ SCPY(interface->sip_register_user, value);
+ SCPY(interface->sip_register_host, p);
+
+ return(0);
+#endif
+}
static int inter_rtp_bridge(struct interface *interface, char *filename, int line, char *parameter, char *value)
{
int supported = 0;
{"gsm-ms", &inter_gsm_ms, "<socket name>",
"Sets up GSM mobile station interface for using Osmocom-BB.\n"
"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."},
+ {"sip", &inter_sip, "<local IP/host> <remote IP/host>",
+ "Sets up SIP interface that represents one SIP endpoint."},
+ {"register", &inter_register, "<user> <host>",
+ "Registers to given SIP registrar."},
+ {"authenticate", &inter_authenticate, "<user> <password>",
+ "Defines SIP user and password for authentication."},
+ {"options-timer", &options_timer, "<timer> | 0",
+ "Defines SIP timer to send OPTIONS messages to keepalive SIP sessions."},
+ {"stun", &options_stun, "<server> <interval>",
+ "Defines STUN server to resolv real local IP.\n"
+ "The interval is used to check if IP has changed. (use 300)"},
+ {"rtp-ports", &inter_rtp_ports, "<port from> <port to>",
+ "Defines the range of ports to be used for RTP. This overrides the default."},
{"rtp-bridge", &inter_rtp_bridge, "",
"Enables RTP bridging directly from this interface.\n"
"This only works if both bridged interfaces use RTP, e.g. between gsm-bs and sip.\n"