Added direct media support to ooh323 channel driver

options are documented in config sample
sample config rename to proper name - ooh323.conf

To change media address ooh323 send empty TCS if there was 
completed TCS exchange or send facility forwardedelements 
with new fast start proposal if not.
Then close transmit logical channels and renew TCS exchange.

If new fast start proposal is received then ooh323 stack call back
channel driver routine to change rtp address in the rtp instance.
If empty TCS is received then close transmit logical channels and
renew TCS exchange

Review: https://reviewboard.asterisk.org/r/1607/



git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@369613 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Alexandr Anikin
2012-07-04 21:42:05 +00:00
parent 50765000e6
commit fa10f3f8a8
16 changed files with 855 additions and 152 deletions

View File

@@ -545,6 +545,68 @@ OOStkCmdStat ooSetANI(const char *callToken, const char* ani)
return OO_STKCMD_SUCCESS;
}
OOStkCmdStat ooUpdateLogChannels(const char *callToken, const char* localIP, int port)
{
OOStackCommand cmd;
OOH323CallData *call;
if (!callToken) {
return OO_STKCMD_INVALIDPARAM;
}
if (!(call = ooFindCallByToken(callToken))) {
return OO_STKCMD_INVALIDPARAM;
}
if (localIP == NULL) {
return OO_STKCMD_INVALIDPARAM;
}
if (call->CmdChan == 0) {
if (ooCreateCallCmdConnection(call) != OO_OK) {
return OO_STKCMD_CONNECTIONERR;
}
}
memset(&cmd, 0, sizeof(OOStackCommand));
cmd.type = OO_CMD_UPDLC;
cmd.param1 = ast_malloc(strlen(callToken) + 1);
cmd.param2 = ast_malloc(strlen(localIP) + 1);
cmd.param3 = ast_malloc(sizeof(int) + 1);
if (!cmd.param1 || !cmd.param2 || !cmd.param3) {
if (cmd.param1) {
ast_free(cmd.param1); /* Release memory */
}
if (cmd.param2) {
ast_free(cmd.param2);
}
if (cmd.param3) {
ast_free(cmd.param3);
}
return OO_STKCMD_MEMERR;
}
strcpy((char*)cmd.param1, callToken);
cmd.plen1 = strlen(callToken);
strcpy((char*)cmd.param2, localIP);
cmd.plen2 = strlen(localIP);
*((int *)cmd.param3) = port;
cmd.plen3 = sizeof(int) + 1;
if (ooWriteCallStackCommand(call, &cmd) != OO_OK) {
ast_free(cmd.param1);
ast_free(cmd.param2);
ast_free(cmd.param3);
return OO_STKCMD_WRITEERR;
}
ast_free(cmd.param1);
ast_free(cmd.param2);
ast_free(cmd.param3);
return OO_STKCMD_SUCCESS;
}
OOStkCmdStat ooRequestChangeMode(const char *callToken, int isT38Mode)
{
OOStackCommand cmd;
@@ -593,7 +655,6 @@ OOStkCmdStat ooRequestChangeMode(const char *callToken, int isT38Mode)
return OO_STKCMD_SUCCESS;
}
const char* ooGetStkCmdStatusCodeTxt(OOStkCmdStat stat)
{
switch(stat)