Move the DAHDI-to-DAHDI operator mode check from app_dial into chan_dahdi
authorSean Bright <sean@malleable.com>
Tue, 7 Oct 2008 21:34:44 +0000 (21:34 +0000)
committerSean Bright <sean@malleable.com>
Tue, 7 Oct 2008 21:34:44 +0000 (21:34 +0000)
so we don't have to hardcode anything.

(closes issue #13636)
Reported by: seanbright
Patches:
      13636.diff uploaded by seanbright (license 71)
Reviewed by: russellb, putnopvut

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@147388 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_dial.c
channels/chan_dahdi.c
channels/chan_iax2.c

index df2dd5f..b26f9dd 100644 (file)
@@ -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;
index db24a6d..552b984 100644 (file)
@@ -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 */
index 9282aed..116c13a 100644 (file)
@@ -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;