📄 voip_cli.c
字号:
{
/* Release the thread semaphore while we print to screen */
TBX_SEM_GIV (g_pContext->hThreadSem);
}
return;
}
/*-------------------------------------------------------------------------------------------------------------------------------
|
| VoipCliHandleMenuChoice : This function handles the menu choice of user
|
| Note : ~
|
| Return : TBX_RESULT_OK
| TBX_RESULT_FAIL
|
*------------------------------------------------------------------------------------------------------------------------------*/
TBX_VOID VoipCliHandleMenuChoice(
IN TBX_CLI_TOOLS_HANDLE in_hCliTools,
IN PTBX_VOID in_pContext,
IN TBX_INT in_KeyPressed,
IN_OUT PTBX_CLI_TOOLS_CMD io_pCmdInput)
{
PVOIP_CLI_CONTEXT pCliContext = &g_pContext->CliContext;
PVOIP_ADAPTER_CONTEXT pAdapterContext = pCliContext->pActiveAdapterContext;
PVOIP_ADAPTER_CONTEXT_NODE pAdapterContextNode;
TBX_UINT32 un32Index;
(TBX_VOID)in_hCliTools;
(TBX_VOID)in_pContext;
TBX_SEM_GET (g_pContext->hThreadSem, TBX_SEM_WAIT_FOREVER);
{
if( !pCliContext->fCliToolsSafe )
{
/* Not safe yet to process this callback. Do nothing for now */
}
else
{
TBX_BOOL fBypassStandardKeyHandler = TBX_FALSE;
TBX_BOOL fHandled = TBX_FALSE;
if
(
pCliContext->aDisplay[pCliContext->un32DisplayIndex] == VOIP_CLI_DISPLAY_TYPE_CONNECTION_INFO ||
pCliContext->aDisplay[pCliContext->un32DisplayIndex] == VOIP_CLI_DISPLAY_TYPE_STREAM_INFO ||
pCliContext->aDisplay[pCliContext->un32DisplayIndex] == VOIP_CLI_DISPLAY_TYPE_TRUNK_INFO
)
{
/* In this display screens, don't map the arrows to standard, they are reused */
if
(
in_KeyPressed == TBX_CLI_TOOLS_KEY_PAGE_UP_KEY ||
in_KeyPressed == TBX_CLI_TOOLS_KEY_PAGE_DOWN_KEY ||
in_KeyPressed == TBX_CLI_TOOLS_KEY_HOME_KEY ||
in_KeyPressed == TBX_CLI_TOOLS_KEY_END_KEY ||
in_KeyPressed == TBX_CLI_TOOLS_KEY_UP_ARROW_KEY ||
in_KeyPressed == TBX_CLI_TOOLS_KEY_DOWN_ARROW_KEY
)
{
fBypassStandardKeyHandler = TBX_TRUE;
}
}
if( !fBypassStandardKeyHandler )
{
fHandled = TbxCliToolsDefaultKeysHandler( in_hCliTools, in_KeyPressed );
}
/* Call default tbx_cli_tools key handler for basic keys (we don't need to bypass any of them here) */
if( !fHandled )
{
/* All displays options */
switch (in_KeyPressed)
{
/* (Q)uit */
case 3: /* Control-c */
case VOIP_CLI_MENU_KEY_QUIT:
{
VoipCliCmdQuitInit( io_pCmdInput );
} break;
case VOIP_CLI_MENU_KEY_NEED_CLS:
{
TbxCliToolsNeedCls( pCliContext->hCliTools );
} break;
case TBX_CLI_TOOLS_KEY_TAB:
/* Update display index */
if( (pCliContext->un32DisplayCount > 0) && (++pCliContext->un32DisplayIndex >= pCliContext->un32DisplayCount) )
{
pCliContext->un32DisplayIndex = 0;
for( un32Index = 0; un32Index < pCliContext->un32AdaptersCount; un32Index++ )
{
if( ++pCliContext->un32AdapterIndex >= pCliContext->un32AdaptersCount )
{
pCliContext->un32AdapterIndex = 0;
}
pAdapterContextNode = TBXPoolOfBuffersFindBufferByIndex( g_pContext->hPoolOfAdapters, pCliContext->un32AdapterIndex );
if( pAdapterContextNode && pAdapterContextNode->pAdapterContext->State != VOIP_ADAPTER_STATE_NOT_USED )
{
pAdapterContext = pAdapterContextNode->pAdapterContext;
break;
}
}
if( un32Index >= pCliContext->un32AdaptersCount )
{
pCliContext->pActiveAdapterContext = NULL;
}
else
{
pCliContext->pActiveAdapterContext = pAdapterContext;
}
}
/* Initialize page count and index */
if( pCliContext->un32DisplayIndex == VOIP_CLI_DISPLAY_TYPE_CONNECTION_INFO )
{
pCliContext->un32PageCount = 1;
pCliContext->un32PageIndex = 0;
}
else if( pCliContext->un32DisplayIndex == VOIP_CLI_DISPLAY_TYPE_TRUNK_INFO )
{
pCliContext->un32PageCount = VOIP_MAX_TRUNK_PER_ADAPTER;
pCliContext->un32PageIndex = 0;
}
break;
case TBX_CLI_TOOLS_KEY_BACKSPACE:
/* Update display index */
if( pCliContext->un32DisplayCount > 0 )
{
if( pCliContext->un32DisplayIndex == 0 )
{
pCliContext->un32DisplayIndex = (pCliContext->un32DisplayCount - 1);
for( un32Index = 0; un32Index < pCliContext->un32AdaptersCount; un32Index++ )
{
if( pCliContext->un32AdapterIndex == 0 )
{
pCliContext->un32AdapterIndex = (pCliContext->un32AdaptersCount - 1);
}
else
{
pCliContext->un32AdapterIndex--;
}
pAdapterContextNode = TBXPoolOfBuffersFindBufferByIndex( g_pContext->hPoolOfAdapters, pCliContext->un32AdapterIndex );
if( pAdapterContextNode && pAdapterContextNode->pAdapterContext->State != VOIP_ADAPTER_STATE_NOT_USED )
{
pAdapterContext = pAdapterContextNode->pAdapterContext;
break;
}
}
if( un32Index >= pCliContext->un32AdaptersCount )
{
pCliContext->pActiveAdapterContext = NULL;
}
else
{
pCliContext->pActiveAdapterContext = pAdapterContext;
}
}
else
{
pCliContext->un32DisplayIndex--;
}
}
/* Initialize page count and index */
if( pCliContext->un32DisplayIndex == VOIP_CLI_DISPLAY_TYPE_CONNECTION_INFO )
{
pCliContext->un32PageCount = 1;
pCliContext->un32PageIndex = 0;
}
else if( pCliContext->un32DisplayIndex == VOIP_CLI_DISPLAY_TYPE_TRUNK_INFO )
{
pCliContext->un32PageCount = VOIP_MAX_TRUNK_PER_ADAPTER;
pCliContext->un32PageIndex = 0;
}
break;
case VOIP_CLI_MENU_KEY_NEXT_DEMO_STEP:
if( (pAdapterContext != NULL) && (pAdapterContext->fAttached == TBX_TRUE) )
{
if( pAdapterContext->Demo.fActive == TBX_TRUE )
{
VoipCliCmdNextDemoStepInit( io_pCmdInput );
}
}
break;
}
/* Main display */
if( pCliContext->aDisplay[pCliContext->un32DisplayIndex] == VOIP_CLI_DISPLAY_TYPE_MAIN )
{
/* Main displays options */
switch (in_KeyPressed)
{
/* Adjust (t)race levels */
case VOIP_CLI_MENU_KEY_ADJUST_TRACE_LEVEL:
{
VoipCliCmdSetTraceLevelInit( io_pCmdInput );
} break;
/* (R)eload config */
case VOIP_CLI_MENU_KEY_RELOAD_CONFIG:
{
VoipCliCmdReloadConfigInit( io_pCmdInput );
} break;
case TBX_CLI_TOOLS_DEFAULT_CHECKPOINT_SET:
{
/* Add a checkpoint in the scrolling log */
TbxCliToolsLogSetCheckpoint( pCliContext->hCliTools );
} break;
case TBX_CLI_TOOLS_DEFAULT_CHECKPOINT_NEXT:
{
if( g_DefaultPrompts.LogFind.szSearchString[0] == '\0' )
{
/* Search checkpoints */
TbxCliToolsLogGotoCheckpoint
(
pCliContext->hCliTools,
TBX_TRUE
);
}
else
{
/* Search in log */
TbxCliToolsLogGotoString
(
pCliContext->hCliTools,
g_DefaultPrompts.LogFind.szSearchString,
TBX_TRUE,
TBX_FALSE
);
}
} break;
case TBX_CLI_TOOLS_DEFAULT_CHECKPOINT_PREV:
{
if( g_DefaultPrompts.LogFind.szSearchString[0] == '\0' )
{
/* Search checkpoints */
TbxCliToolsLogGotoCheckpoint
(
pCliContext->hCliTools,
TBX_FALSE
);
}
else
{
/* Search in log */
TbxCliToolsLogGotoString
(
pCliContext->hCliTools,
g_DefaultPrompts.LogFind.szSearchString,
TBX_FALSE,
TBX_FALSE
);
}
} break;
case TBX_CLI_TOOLS_DEFAULT_LOG_FIND:
{
/* Find in log */
VoipCliCmdLogFindInit( io_pCmdInput );
} break;
case VOIP_CLI_MENU_KEY_STRESS_TEST:
if( (pAdapterContext != NULL) && (pAdapterContext->fAttached == TBX_TRUE) )
{
if( pAdapterContext->Demo.fActive == TBX_FALSE )
{
if( pAdapterContext->StressTest.fActive == TBX_TRUE )
{
VoipCliCmdStopStressTestInit( io_pCmdInput );
}
else
{
VoipCliCmdStartStressTestInit( io_pCmdInput );
}
}
}
break;
case VOIP_CLI_MENU_KEY_RESET_STRESS_TEST_STATS:
if( (pAdapterContext != NULL) && (pAdapterContext->fAttached == TBX_TRUE) )
{
if( pAdapterContext->StressTest.fActive == TBX_TRUE )
{
VoipCliCmdResetStressTestStatsInit( io_pCmdInput );
}
}
break;
case VOIP_CLI_MENU_KEY_DEMO:
if( (pAdapterContext != NULL) && (pAdapterContext->fAttached == TBX_TRUE) )
{
if( pAdapterContext->StressTest.fActive == TBX_FALSE )
{
if( pAdapterContext->Demo.fActive == TBX_TRUE )
{
VoipCliCmdStopDemoInit( io_pCmdInput );
}
else
{
VoipCliCmdStartDemoInit( io_pCmdInput );
}
}
}
break;
case VOIP_CLI_MENU_KEY_ALLOCATE_CONNECTION:
if( (pAdapterContext != NULL) && (pAdapterContext->fAttached == TBX_TRUE) )
{
if( (pAdapterContext->Demo.fActive == TBX_FALSE) &&
(pAdapterContext->StressTest.fActive == TBX_FALSE) )
{
VoipCliCmdAllocateConnectionInit( io_pCmdInput );
}
}
break;
case VOIP_CLI_MENU_KEY_CLEAR_CONNECTION:
if( (pAdapterContext != NULL) && (pAdapterContext->fAttached == TBX_TRUE) )
{
if( (pAdapterContext->Demo.fActive == TBX_FALSE) &&
(pAdapterContext->StressTest.fActive == TBX_FALSE) )
{
VoipCliCmdClearConnectionInit( io_pCmdInput );
}
}
break;
}
}
/* Connection information display */
else if( pCliContext->aDisplay[pCliContext->un32DisplayIndex] == VOIP_CLI_DISPLAY_TYPE_CONNECTION_INFO )
{
/* Main displays options */
switch (in_KeyPressed)
{
/* Skip next 5 trunks */
case TBX_CLI_TOOLS_KEY_PAGE_DOWN_KEY:
{
if( pCliContext->un32PageIndex >= (pCliContext->un32PageCount - 5) )
{
pCliContext->un32PageIndex = (pCliContext->un32PageIndex - (pCliContext->un32PageCount - 5));
}
else
{
pCliContext->un32PageIndex += 5;
}
} break;
/* Skip previous 5 trunks */
case TBX_CLI_TOOLS_KEY_PAGE_UP_KEY:
{
if( pCliContext->un32PageIndex < 5 )
{
pCliContext->un32PageIndex = (pCliContext->un32PageCount - (5 - pCliContext->un32PageIndex));
}
else
{
pCliContext->un32PageIndex -= 5;
}
} break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -