summaryrefslogtreecommitdiffstats
path: root/src/router/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/router/main.c')
-rw-r--r--src/router/main.c58
1 files changed, 45 insertions, 13 deletions
diff --git a/src/router/main.c b/src/router/main.c
index 91bfdc6..82eeee3 100644
--- a/src/router/main.c
+++ b/src/router/main.c
@@ -33,13 +33,13 @@
#include "display.h"
int num_kanal = 1;
-osmo_cc_endpoint_t *cc_ep = NULL;
+static osmo_cc_endpoint_t *cc_ep1 = NULL, *cc_ep2 = NULL;
static char *routing_script = "~/.osmocom/router/routing.sh";
static char *routing_shell = "bash";
#define MAX_CC_ARGS 1024
-static int cc_argc = 0;
-static const char *cc_argv[MAX_CC_ARGS];
+static int cc_argc1 = 0, cc_argc2 = 0;
+static const char *cc_argv1[MAX_CC_ARGS], *cc_argv2[MAX_CC_ARGS];
static void print_usage(const char *app)
{
@@ -62,9 +62,12 @@ static void print_help()
printf(" Define the shell to run the routing scrip. (default = %s)\n", routing_shell);
printf(" -C --cc \"<osmo-cc arg>\" [--cc ...]\n");
printf(" Pass arguments to Osmo-CC endpoint. Use '-cc help' for description.\n");
+ printf(" --cc2 \"<osmo-cc arg>\" [--cc2 ...]\n");
+ printf(" Pass arguments to Osmo-CC endpoint of second instance. (multistack).\n");
}
-#define OPT_XXX 256
+#define OPT_CC2 256
+
static void add_options(void)
{
@@ -73,6 +76,7 @@ static void add_options(void)
option_add('r', "routing-script", 1);
option_add('s', "routing-shell", 1);
option_add('C', "cc", 1);
+ option_add(OPT_CC2, "cc2", 1);
}
static int handle_options(int short_option, int argi, char **argv)
@@ -106,11 +110,22 @@ static int handle_options(int short_option, int argi, char **argv)
osmo_cc_help();
return 0;
}
- if (cc_argc == MAX_CC_ARGS) {
+ if (cc_argc1 == MAX_CC_ARGS) {
fprintf(stderr, "Too many osmo-cc args!\n");
break;
}
- cc_argv[cc_argc++] = options_strdup(argv[argi]);
+ cc_argv1[cc_argc1++] = options_strdup(argv[argi]);
+ break;
+ case OPT_CC2:
+ if (!strcasecmp(argv[argi], "help")) {
+ osmo_cc_help();
+ return 0;
+ }
+ if (cc_argc2 == MAX_CC_ARGS) {
+ fprintf(stderr, "Too many osmo-cc args!\n");
+ break;
+ }
+ cc_argv2[cc_argc2++] = options_strdup(argv[argi]);
break;
default:
return -EINVAL;
@@ -169,15 +184,24 @@ int main(int argc, char *argv[])
return argi;
/* init osmo-cc endpoint */
- cc_ep = calloc(1, sizeof(*cc_ep));
- if (!cc_ep)
+ cc_ep1 = calloc(1, sizeof(*cc_ep1));
+ if (!cc_ep1)
goto error;
- rc = osmo_cc_new(cc_ep, OSMO_CC_VERSION, NULL, OSMO_CC_LOCATION_PRIV_SERV_LOC_USER, cc_message, NULL, NULL, cc_argc, cc_argv);
+ rc = osmo_cc_new(cc_ep1, OSMO_CC_VERSION, NULL, OSMO_CC_LOCATION_PRIV_SERV_LOC_USER, cc_message, NULL, NULL, cc_argc1, cc_argv1);
if (rc < 0)
goto error;
+ if (cc_argc2) {
+ /* init osmo-cc endpoint */
+ cc_ep2 = calloc(1, sizeof(*cc_ep2));
+ if (!cc_ep2)
+ goto error;
+ rc = osmo_cc_new(cc_ep2, OSMO_CC_VERSION, NULL, OSMO_CC_LOCATION_PRIV_SERV_LOC_USER, cc_message, NULL, NULL, cc_argc2, cc_argv2);
+ if (rc < 0)
+ goto error;
+ }
/* init call handling */
- call_init(cc_ep, routing_script, routing_shell);
+ call_init(cc_ep1, cc_ep2, routing_script, routing_shell);
/* prepare terminal */
tcgetattr(0, &term_orig);
@@ -243,13 +267,21 @@ next_char:
error:
- if (cc_ep) {
+ if (cc_ep1) {
+ /* exit call handling */
+ call_exit();
+
+ /* exit osmo-cc endpoint */
+ osmo_cc_delete(cc_ep1);
+ free(cc_ep1);
+ }
+ if (cc_ep2) {
/* exit call handling */
call_exit();
/* exit osmo-cc endpoint */
- osmo_cc_delete(cc_ep);
- free(cc_ep);
+ osmo_cc_delete(cc_ep2);
+ free(cc_ep2);
}
/* exit FM */