X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=interface.c;h=448affc7d575cf2baeb8dcbb47af22a68276de72;hp=a312e4eb98986970a96511a4e9860a9a06be9384;hb=3a8f58ec8946b7f1683208d1cc3b054486f12e6c;hpb=0f5c2eabde69c66e8793171c878652184f9de5d8 diff --git a/interface.c b/interface.c index a312e4e..448affc 100644 --- a/interface.c +++ b/interface.c @@ -327,9 +327,7 @@ static int inter_portname(struct interface *interface, char *filename, int line, /* check for port already assigned, but not for shared gsm interface */ searchif = interface_newlist; -#if defined WITH_GSM_BS || defined WITH_GSM_MS - if (!strcmp(value, gsm->conf.interface_lcr)) -#endif + if (!strcmp(value, options.loopback_lcr)) { while(searchif) { ifport = searchif->ifport; @@ -918,7 +916,7 @@ static int inter_gsm_bs(struct interface *interface, char *filename, int line, c } /* set portname */ - if (inter_portname(interface, filename, line, (char *)"portname", gsm->conf.interface_lcr)) + if (inter_portname(interface, filename, line, (char *)"portname", options.loopback_lcr)) return(-1); /* goto end of chain again to set gsmflag */ @@ -947,7 +945,7 @@ static int inter_gsm_ms(struct interface *interface, char *filename, int line, c } /* set portname */ - if (inter_portname(interface, filename, line, (char *)"portname", gsm->conf.interface_lcr)) + if (inter_portname(interface, filename, line, (char *)"portname", options.loopback_lcr)) return(-1); /* goto end of chain again to set gsmflag and socket */ @@ -1054,6 +1052,42 @@ static int inter_ss5(struct interface *interface, char *filename, int line, char return(0); } #endif +static int inter_remote(struct interface *interface, char *filename, int line, char *parameter, char *value) +{ + struct interface_port *ifport; + struct interface *searchif; + + if (!value[0]) { + SPRINT(interface_error, "Error in %s (line %d): parameter '%s' expects application name as value.\n", filename, line, parameter); + return(-1); + } + searchif = interface_newlist; + while(searchif) { + ifport = searchif->ifport; + while(ifport) { + if (ifport->remote && !strcmp(ifport->remote_app, value)) { + SPRINT(interface_error, "Error in %s (line %d): port '%s' already uses remote application '%s'.\n", filename, line, ifport->portname, value); + return(-1); + } + ifport = ifport->next; + } + searchif = searchif->next; + } + + /* set portname */ + if (inter_portname(interface, filename, line, (char *)"portname", options.loopback_lcr)) + return(-1); + + /* goto end of chain again to set application name */ + ifport = interface->ifport; + while(ifport->next) + ifport = ifport->next; + ifport->remote = 1; + SCPY(ifport->remote_app, value); + + + return(0); +} /* @@ -1215,6 +1249,10 @@ struct interface_param interface_param[] = { " suppress - Suppress received tones, as they will be recognized."}, #endif + {"remote", &inter_remote, "", + "Sets up an interface that communicates with the remote application.\n" + "Use \"asterisk\" to use chan_lcr as remote application."}, + {NULL, NULL, NULL, NULL} };