mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-17 07:18:15 +00:00
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
This commit is contained in:
339
addons/ooh323c/src/ooStackCmds.c
Normal file
339
addons/ooh323c/src/ooStackCmds.c
Normal file
@@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user