summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/app_dial.c6
-rw-r--r--channels/chan_dahdi.c7
-rw-r--r--channels/chan_iax2.c3
3 files changed, 11 insertions, 5 deletions
diff --git a/apps/app_dial.c b/apps/app_dial.c
index df2dd5fe5..b26f9ddd2 100644
--- a/apps/app_dial.c
+++ b/apps/app_dial.c
@@ -1926,11 +1926,7 @@ static int dial_exec_full(struct ast_channel *chan, void *data, struct ast_flags
res = -1;
goto done;
}
- if (opermode && !strncmp(chan->tech->type, "DAHDI", 5) && !strncmp(peer->name, "DAHDI", 5)) {
- /* what's this special handling for dahdi <-> dahdi ?
- * A: dahdi to dahdi calls are natively bridged at the kernel driver
- * level, so we need to ensure that this mode gets propagated
- * all the way down. */
+ if (opermode) {
struct oprmode oprmode;
oprmode.peer = peer;
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index db24a6d1c..552b9841d 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -3638,6 +3638,13 @@ static int dahdi_setoption(struct ast_channel *chan, int option, void *data, int
break;
case AST_OPTION_OPRMODE: /* Operator services mode */
oprmode = (struct oprmode *) data;
+ /* We don't support operator mode across technologies */
+ if (strcasecmp(chan->tech->type, oprmode->peer->tech->type)) {
+ ast_log(LOG_NOTICE, "Operator mode not supported on %s to %s calls.\n",
+ chan->tech->type, oprmode->peer->tech->type);
+ errno = EINVAL;
+ return -1;
+ }
pp = oprmode->peer->tech_pvt;
p->oprmode = pp->oprmode = 0;
/* setup peers */
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index 9282aed89..116c13ace 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -3823,6 +3823,9 @@ static int iax2_setoption(struct ast_channel *c, int option, void *data, int dat
/* these two cannot be sent, because they require a result */
errno = ENOSYS;
return -1;
+ case AST_OPTION_OPRMODE:
+ errno = EINVAL;
+ return -1;
default:
if (!(h = ast_malloc(datalen + sizeof(*h))))
return -1;