X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=interface.c;h=cbfed2e8078c46d10a1c583cdfbf09ccafc49a5c;hp=448affc7d575cf2baeb8dcbb47af22a68276de72;hb=57a91e52d4ec8ace01206ecb78d597a8be2561fb;hpb=3a8f58ec8946b7f1683208d1cc3b054486f12e6c diff --git a/interface.c b/interface.c index 448affc..cbfed2e 100644 --- a/interface.c +++ b/interface.c @@ -325,9 +325,9 @@ static int inter_portname(struct interface *interface, char *filename, int line, ifport = ifport->next; } - /* check for port already assigned, but not for shared gsm interface */ + /* check for port already assigned, but not for shared loop interface */ searchif = interface_newlist; - if (!strcmp(value, options.loopback_lcr)) + if (!!strcmp(value, options.loopback_lcr)) { while(searchif) { ifport = searchif->ifport; @@ -897,11 +897,6 @@ static int inter_gsm_bs(struct interface *interface, char *filename, int line, c 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; @@ -936,13 +931,6 @@ static int inter_gsm_ms(struct interface *interface, char *filename, int line, c #else struct interface_port *ifport, *searchifport; struct interface *searchif; - char *element; - - /* check gsm */ - if (!gsm) { - SPRINT(interface_error, "Error in %s (line %d): GSM is not activated.\n", filename, line); - return(-1); - } /* set portname */ if (inter_portname(interface, filename, line, (char *)"portname", options.loopback_lcr)) @@ -955,27 +943,20 @@ static int inter_gsm_ms(struct interface *interface, char *filename, int line, c ifport->gsm_ms = 1; /* copy values */ - element = strsep(&value, " "); - if (!element || !element[0]) { + if (!value || !value[0]) { SPRINT(interface_error, "Error in %s (line %d): Missing MS name and socket name.\n", filename, line); return(-1); } - SCPY(ifport->gsm_ms_name, element); - element = strsep(&value, " "); - if (!element || !element[0]) { - SPRINT(interface_error, "Error in %s (line %d): Missing socket name after MS name.\n", filename, line); - return(-1); - } - SCPY(ifport->gsm_ms_socket, element); + SCPY(ifport->gsm_ms_name, value); - /* check if socket is used multiple times */ + /* check if name is used multiple times */ searchif = interface_newlist; while(searchif) { searchifport = searchif->ifport; while(searchifport) { if (searchifport != ifport - && !strcmp(searchifport->gsm_ms_socket, ifport->gsm_ms_socket)) { - SPRINT(interface_error, "Error in %s (line %d): mobile '%s' already uses the given socket '%s', choose a different one.\n", filename, line, ifport->gsm_ms_name, searchifport->gsm_ms_socket); + && !strcmp(searchifport->gsm_ms_name, ifport->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, ifport->gsm_ms_name, searchifport->gsm_ms_name); return(-1); } searchifport = searchifport->next; @@ -1089,6 +1070,13 @@ static int inter_remote(struct interface *interface, char *filename, int line, c return(0); } +static int inter_shutdown(struct interface *interface, char *filename, int line, char *parameter, char *value) +{ + interface->shutdown = 1; + + return(0); +} + /* * structure of parameters @@ -1253,6 +1241,9 @@ struct interface_param interface_param[] = { "Sets up an interface that communicates with the remote application.\n" "Use \"asterisk\" to use chan_lcr as remote application."}, + {"shutdown", &inter_shutdown, "", + "Interface will not be loaded when processing interface.conf"}, + {NULL, NULL, NULL, NULL} }; @@ -1508,6 +1499,17 @@ void relink_interfaces(void) /* unlink all mISDNports */ mISDNport = mISDNport_first; while(mISDNport) { + if (mISDNport->ifport) { + ifport = mISDNport->ifport; +#ifdef WITH_GSM_MS + if (ifport->gsm_ms) + gsm_ms_delete(ifport->gsm_ms_name); +#endif +#ifdef WITH_GSM_BS + if (ifport->gsm_bs) + gsm_bs_exit(0); +#endif + } mISDNport->ifport = NULL; mISDNport = mISDNport->next; } @@ -1540,11 +1542,7 @@ void relink_interfaces(void) while(mISDNport) { if (mISDNport->ifport == NULL) { PDEBUG(DEBUG_ISDN, "Port %d is not used anymore and will be closed\n", mISDNport->portnum); - /* remove all port objects and destroy port */ -#ifdef WITH_GSM_MS - if (ifport->gsm_ms) - gsm_ms_delete(ifport->gsm_ms_name); -#endif + /* destroy port */ mISDNport_close(mISDNport); goto closeagain; } @@ -1557,7 +1555,11 @@ void relink_interfaces(void) ifport = interface->ifport; while(ifport) { if (!ifport->mISDNport) { - load_port(ifport); + if (!interface->shutdown) { + load_port(ifport); + } else { + ifport->block = 2; + } } ifport = ifport->next; } @@ -1589,7 +1591,11 @@ void load_port(struct interface_port *ifport) mISDNport_static(mISDNport); #ifdef WITH_GSM_MS if (ifport->gsm_ms) - gsm_ms_new(ifport->gsm_ms_name, ifport->gsm_ms_socket); + gsm_ms_new(ifport->gsm_ms_name); +#endif +#ifdef WITH_GSM_BS + if (ifport->gsm_bs) + gsm_bs_init(); #endif } else { ifport->block = 2; /* not available */