X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=interface.c;h=cbfed2e8078c46d10a1c583cdfbf09ccafc49a5c;hp=4e432afd8b2d6e977e6a943c4fd817b83421f922;hb=57a91e52d4ec8ace01206ecb78d597a8be2561fb;hpb=34598a346419f0e661526e6208dade4aff570008 diff --git a/interface.c b/interface.c index 4e432af..cbfed2e 100644 --- a/interface.c +++ b/interface.c @@ -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,12 +943,11 @@ 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); + SCPY(ifport->gsm_ms_name, value); /* check if name is used multiple times */ searchif = interface_newlist; @@ -1083,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 @@ -1247,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} }; @@ -1502,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; } @@ -1534,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; } @@ -1551,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; } @@ -1585,6 +1593,10 @@ void load_port(struct interface_port *ifport) if (ifport->gsm_ms) 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 */ }