diff options
author | Russell Bryant <russell@russellbryant.com> | 2009-06-30 16:40:38 +0000 |
---|---|---|
committer | Russell Bryant <russell@russellbryant.com> | 2009-06-30 16:40:38 +0000 |
commit | c511a2674906fd93470f0a9b77340041771466e1 (patch) | |
tree | d3d6aa7ea86d11ecaa6e88efbc46a5dde1c63ea5 /addons/ooh323c/src/ooStackCmds.c | |
parent | 62d3f1dfd9632f18c4f7c12e44af30f4cc08c292 (diff) |
Move Asterisk-addons modules into the main Asterisk source tree.
Someone asked yesterday, "is there a good reason why we can't just put these
modules in Asterisk?". After a brief discussion, as long as the modules are
clearly set aside in their own directory and not enabled by default, it is
perfectly fine.
For more information about why a module goes in addons, see README-addons.txt.
chan_ooh323 does not currently compile as it is behind some trunk API updates.
However, it will not build by default, so it should be okay for now.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@204413 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'addons/ooh323c/src/ooStackCmds.c')
-rw-r--r-- | addons/ooh323c/src/ooStackCmds.c | 339 |
1 files changed, 339 insertions, 0 deletions
diff --git a/addons/ooh323c/src/ooStackCmds.c b/addons/ooh323c/src/ooStackCmds.c new file mode 100644 index 000000000..a75a33cb0 --- /dev/null +++ b/addons/ooh323c/src/ooStackCmds.c @@ -0,0 +1,339 @@ +/* + * Copyright (C) 2004-2005 by Objective Systems, Inc. + * + * This software is furnished under an open source license and may be + * used and copied only in accordance with the terms of this license. + * The text of the license may generally be found in the root + * directory of this installation in the COPYING file. It + * can also be viewed online at the following URL: + * + * http://www.obj-sys.com/open/license.html + * + * Any redistributions of this file including modified versions must + * maintain this copyright notice. + * + *****************************************************************************/ + +#include "ooStackCmds.h" +#include "ooh323ep.h" +#include "ooCalls.h" +#include "ooCmdChannel.h" + +extern OOSOCKET gCmdChan; + +int ooGenerateOutgoingCallToken (char *callToken, size_t size) +{ + static int counter = 1; + char aCallToken[200]; + int ret = 0; + + + sprintf (aCallToken, "ooh323c_o_%d", counter++); + + if (counter > OO_MAX_CALL_TOKEN) + counter = 1; + + if ((strlen(aCallToken)+1) < size) + strcpy (callToken, aCallToken); + else { + ret = OO_FAILED; + } + + return ret; +} + + +OOStkCmdStat ooMakeCall + (const char* dest, char* callToken, size_t bufsiz, ooCallOptions *opts) +{ + OOStackCommand cmd; + + if(!callToken) + return OO_STKCMD_INVALIDPARAM; + + + /* Generate call token*/ + if (ooGenerateOutgoingCallToken (callToken, bufsiz) != OO_OK){ + return OO_STKCMD_INVALIDPARAM; + } + + if(gCmdChan == 0) + { + if(ooCreateCmdConnection() != OO_OK) + return OO_STKCMD_CONNECTIONERR; + } + + memset(&cmd, 0, sizeof(OOStackCommand)); + cmd.type = OO_CMD_MAKECALL; + cmd.param1 = (void*) malloc(strlen(dest)+1); + if(!cmd.param1) + { + return OO_STKCMD_MEMERR; + } + strcpy((char*)cmd.param1, dest); + + + cmd.param2 = (void*) malloc(strlen(callToken)+1); + if(!cmd.param2) + { + free(cmd.param1); + return OO_STKCMD_MEMERR; + } + + strcpy((char*)cmd.param2, callToken); + + if(!opts) + { + cmd.param3 = 0; + } + else { + cmd.param3 = (void*) malloc(sizeof(ooCallOptions)); + if(!cmd.param3) + { + free(cmd.param1); + free(cmd.param2); + return OO_STKCMD_MEMERR; + } + memcpy((void*)cmd.param3, opts, sizeof(ooCallOptions)); + } + + if(ooWriteStackCommand(&cmd) != OO_OK) + { + free(cmd.param1); + free(cmd.param2); + if(cmd.param3) free(cmd.param3); + return OO_STKCMD_WRITEERR; + } + + return OO_STKCMD_SUCCESS; +} + + +OOStkCmdStat ooManualRingback(const char *callToken) +{ + OOStackCommand cmd; + if(!callToken) + { + return OO_STKCMD_INVALIDPARAM; + } + + if(gCmdChan == 0) + { + if(ooCreateCmdConnection() != OO_OK) + return OO_STKCMD_CONNECTIONERR; + } + + memset(&cmd, 0, sizeof(OOStackCommand)); + cmd.type = OO_CMD_MANUALRINGBACK; + cmd.param1 = (void*) malloc(strlen(callToken)+1); + if(!cmd.param1) + { + return OO_STKCMD_MEMERR; + } + strcpy((char*)cmd.param1, callToken); + + if(ooWriteStackCommand(&cmd) != OO_OK) + { + free(cmd.param1); + return OO_STKCMD_WRITEERR; + } + + return OO_STKCMD_SUCCESS; +} + +OOStkCmdStat ooAnswerCall(const char *callToken) +{ + OOStackCommand cmd; + + if(!callToken) + { + return OO_STKCMD_INVALIDPARAM; + } + + if(gCmdChan == 0) + { + if(ooCreateCmdConnection() != OO_OK) + return OO_STKCMD_CONNECTIONERR; + } + + memset(&cmd, 0, sizeof(OOStackCommand)); + cmd.type = OO_CMD_ANSCALL; + + cmd.param1 = (void*) malloc(strlen(callToken)+1); + if(!cmd.param1) + { + return OO_STKCMD_MEMERR; + } + strcpy((char*)cmd.param1, callToken); + + if(ooWriteStackCommand(&cmd) != OO_OK) + { + free(cmd.param1); + return OO_STKCMD_WRITEERR; + } + + return OO_STKCMD_SUCCESS; +} + +OOStkCmdStat ooForwardCall(const char* callToken, char *dest) +{ + OOStackCommand cmd; + + if(!callToken || !dest) + { + return OO_STKCMD_INVALIDPARAM; + } + + if(gCmdChan == 0) + { + if(ooCreateCmdConnection() != OO_OK) + return OO_STKCMD_CONNECTIONERR; + } + + memset(&cmd, 0, sizeof(OOStackCommand)); + cmd.type = OO_CMD_FWDCALL; + + cmd.param1 = (void*) malloc(strlen(callToken)+1); + cmd.param2 = (void*) malloc(strlen(dest)+1); + if(!cmd.param1 || !cmd.param2) + { + if(cmd.param1) free(cmd.param1); /* Release memory */ + if(cmd.param2) free(cmd.param2); + return OO_STKCMD_MEMERR; + } + strcpy((char*)cmd.param1, callToken); + strcpy((char*)cmd.param2, dest); + + if(ooWriteStackCommand(&cmd) != OO_OK) + { + free(cmd.param1); + free(cmd.param2); + return OO_STKCMD_WRITEERR; + } + + return OO_STKCMD_SUCCESS; +} + + +OOStkCmdStat ooHangCall(const char* callToken, OOCallClearReason reason) +{ + OOStackCommand cmd; + + if(!callToken) + { + return OO_STKCMD_INVALIDPARAM; + } + + if(gCmdChan == 0) + { + if(ooCreateCmdConnection() != OO_OK) + return OO_STKCMD_CONNECTIONERR; + } + + memset(&cmd, 0, sizeof(OOStackCommand)); + cmd.type = OO_CMD_HANGCALL; + cmd.param1 = (void*) malloc(strlen(callToken)+1); + cmd.param2 = (void*) malloc(sizeof(OOCallClearReason)); + if(!cmd.param1 || !cmd.param2) + { + if(cmd.param1) free(cmd.param1); /* Release memory */ + if(cmd.param2) free(cmd.param2); + return OO_STKCMD_MEMERR; + } + strcpy((char*)cmd.param1, callToken); + *((OOCallClearReason*)cmd.param2) = reason; + + if(ooWriteStackCommand(&cmd) != OO_OK) + { + free(cmd.param1); + free(cmd.param2); + return OO_STKCMD_WRITEERR; + } + + return OO_STKCMD_SUCCESS; +} + + +OOStkCmdStat ooStopMonitor() +{ + OOStackCommand cmd; + + if(gCmdChan == 0) + { + if(ooCreateCmdConnection() != OO_OK) + return OO_STKCMD_CONNECTIONERR; + } + + memset(&cmd, 0, sizeof(OOStackCommand)); + cmd.type = OO_CMD_STOPMONITOR; + + if(ooWriteStackCommand(&cmd) != OO_OK) + return OO_STKCMD_WRITEERR; + + return OO_STKCMD_SUCCESS; +} + +OOStkCmdStat ooSendDTMFDigit(const char *callToken, const char* dtmf) +{ + OOStackCommand cmd; + + if(!callToken) + { + return OO_STKCMD_INVALIDPARAM; + } + + if(gCmdChan == 0) + { + if(ooCreateCmdConnection() != OO_OK) + return OO_STKCMD_CONNECTIONERR; + } + + memset(&cmd, 0, sizeof(OOStackCommand)); + cmd.type = OO_CMD_SENDDIGIT; + + cmd.param1 = (void*) malloc(strlen(callToken)+1); + cmd.param2 = (void*) malloc(strlen(dtmf)+1); + if(!cmd.param1 || !cmd.param2) + { + if(cmd.param1) free(cmd.param1); /* Release memory */ + if(cmd.param2) free(cmd.param2); + return OO_STKCMD_MEMERR; + } + strcpy((char*)cmd.param1, callToken); + strcpy((char*)cmd.param2, dtmf); + + if(ooWriteStackCommand(&cmd) != OO_OK) + { + free(cmd.param1); + free(cmd.param2); + return OO_STKCMD_WRITEERR; + } + + return OO_STKCMD_SUCCESS; +} + + +const char* ooGetStkCmdStatusCodeTxt(OOStkCmdStat stat) +{ + switch(stat) + { + case OO_STKCMD_SUCCESS: + return "Stack command - successfully issued"; + + case OO_STKCMD_MEMERR: + return "Stack command - Memory allocation error"; + + case OO_STKCMD_INVALIDPARAM: + return "Stack command - Invalid parameter"; + + case OO_STKCMD_WRITEERR: + return "Stack command - write error"; + + case OO_STKCMD_CONNECTIONERR: + return "Stack command - Failed to create command channel"; + + default: + return "Invalid status code"; + } +} + |