⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 voip_cli.c

📁 telcobridges voip develop
💻 C
📖 第 1 页 / 共 5 页
字号:
	{
		/* 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 + -