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

📄 cli.c

📁 telcobridges pri develop,30b+d
💻 C
📖 第 1 页 / 共 5 页
字号:
					}
					break;

				/* (T)erminate an existing call */
				case 'T':
					Result = TB640IsdnSelectAdapterTrunkTimeslot (&un32Adapter, &un32Trunk, &un32Timeslot);
					if (TBX_RESULT_SUCCESS(Result))
					{
						TB640IsdnTerminateCall (un32Adapter, un32Trunk, un32Timeslot);
						g_fRefreshDisplay |= (TB640_ISDN_CLI_REFRESH_DISPLAY | TB640_ISDN_CLI_CLEAR_BEFORE_REFRESH);
					}
					break;

				/* (C)lear all calls */
				case 'C':
					Result = TB640IsdnSelectAdapterTrunk (&un32Adapter, &un32Trunk);
					if (TBX_RESULT_SUCCESS(Result))
					{
						TB640IsdnTerminateAllCall (un32Adapter, un32Trunk);
						g_fRefreshDisplay |= (TB640_ISDN_CLI_REFRESH_DISPLAY | TB640_ISDN_CLI_CLEAR_BEFORE_REFRESH);
					}
					break;

				/* Print stack stats */
				case '$':
					TB640_ISDN_LOG (TRACE_LEVEL_4, "************ Stack statistics **********\n");
					for (un32Adapter=0; un32Adapter<g_AppContext->un32NbAdapter; un32Adapter++)
					{
						for (un32Trunk=0; un32Trunk<g_AppContext->ahAdapterInfo[un32Adapter].un32NbTrunk; un32Trunk++)
						{
							TB640_ISDN_LOG (TRACE_LEVEL_4, "    Adp:%1d, Trk:%2d    NbCallFailure:%06d  NbTimeout:%06d",
								un32Adapter,
								un32Trunk,
								g_AppContext->ahAdapterInfo[un32Adapter].aTrunkInfo[un32Trunk].un32NbCallOpeningFailure,
								g_AppContext->ahAdapterInfo[un32Adapter].aTrunkInfo[un32Trunk].un32NbTimeoutOccured);

						}
					}
					TB640_ISDN_LOG (TRACE_LEVEL_4, "****************** Done ****************\n");
					break;

				/* (B)egin automatic call generation */
				case 'B':
					if (fAutomaticCallGenerationActivated == TBX_FALSE)
					{
						Result = TB640IsdnSelectStressParameters (&n32SStressNbCallToPerform, &un32StressDelayBetweenCalls, &un32StressMinCallDuration, &un32StressMaxCallDuration, &un32StressDelayBetweenRestart, &un32StressOutgoingTimeslotMinIdleMsec);
						if (TBX_RESULT_SUCCESS(Result))
						{
							TB640_ISDN_LOG (TRACE_LEVEL_4, "Starting stress testing (nbCall=%d, delay=%d, mincd=%d, maxcd=%d, rstrtdelay=%d, minidlemsec=%d)\n",
                                            n32SStressNbCallToPerform, un32StressDelayBetweenCalls, un32StressMinCallDuration, un32StressMaxCallDuration, un32StressDelayBetweenRestart, un32StressOutgoingTimeslotMinIdleMsec);

							/* Take a new time snapshot */
							un32Timer = TBX_GET_TICK();

							/* Clear the statistics */
							TBX_SEM_GET (g_StressStatsSem, TBX_SEM_WAIT_FOREVER);
							memset ((char *)&g_StressStats, 0, sizeof(g_StressStats));
							g_StressStats.un32StartTimestamp = un32Timer;
							g_StressStats.un32CurrentTimestamp = un32Timer;
							g_StressStats.fStatsActivated = TBX_TRUE;
							TBX_SEM_GIV (g_StressStatsSem);

							/* Start the test */
							un32LastTimeWhereACallWasMade = un32Timer;
							un32LastTimeWhereARestartWasMade = un32Timer;
							fAutomaticCallGenerationActivated = TBX_TRUE;

							g_fRefreshDisplay |= (TB640_ISDN_CLI_REFRESH_DISPLAY | TB640_ISDN_CLI_CLEAR_BEFORE_REFRESH);
						}
					}
					else
					{
						TB640_ISDN_DISPLAY_PRINT ("Automatic call generation is already activated....\n");
					}
					break;

				/* (S)top automatic call generation */
				case 'S':
					if (fAutomaticCallGenerationActivated != TBX_FALSE)
					{
						TBX_SEM_GET (g_StressStatsSem, TBX_SEM_WAIT_FOREVER);
						g_StressStats.fStatsActivated = TBX_FALSE;
						TBX_SEM_GIV (g_StressStatsSem);
						fAutomaticCallGenerationActivated = TBX_FALSE;

						TB640_ISDN_LOG (TRACE_LEVEL_4, "Stopped stress testing\n");
						TB640_ISDN_LOG (TRACE_LEVEL_4, "    Instantaneous calls per sec.  : %08d              Instantaneous BHCC            : %08d\n",
							un32NbCallPerSeconds, un32NbBHCA);
						TB640_ISDN_LOG (TRACE_LEVEL_4,"    Call opening successful       : %08d              Call completed                : %08d\n",
							StatsCopy.un32NbCallOpeningSuccess, StatsCopy.un32NbCallCompleted);
						TB640_ISDN_LOG (TRACE_LEVEL_4,"    Call opening with out-of-res. : %08d              Call closing total            : %08d\n",
							StatsCopy.un32NbCallOpeningOutOfRes,  StatsCopy.un32NbCallClosingTotal);
						TB640_ISDN_LOG (TRACE_LEVEL_4,"    Nb incoming call collision    : %08d              Nb outgoing call collision    : %08d\n",
							StatsCopy.un32NbIncomingCallCollision, StatsCopy.un32NbOutgoingCallCollision);
						TB640_ISDN_LOG (TRACE_LEVEL_4, "    Call opening failure          : %08d              Nb timeout events             : %08d\n",
							StatsCopy.un32NbCallOpeningFailure, StatsCopy.un32NbTimeoutOccured);
						TB640_ISDN_LOG (TRACE_LEVEL_4, "    Restart sent                  : %08d              Reset sent                    : %08d\n",
							StatsCopy.un32NbRestartAttempt, StatsCopy.un32NbResetAttempt);
						TB640_ISDN_LOG (TRACE_LEVEL_4,"    No free tmslot for stress tst : %08d              Nb elapsed sec. since start   : %08d\n",
							StatsCopy.un32NbCallNoFreeTimeslotToOpen, ((StatsCopy.un32CurrentTimestamp - StatsCopy.un32StartTimestamp) / 1000));
						g_fRefreshDisplay |= (TB640_ISDN_CLI_REFRESH_DISPLAY | TB640_ISDN_CLI_CLEAR_BEFORE_REFRESH);
					}
					else
					{
						TB640_ISDN_DISPLAY_PRINT ("Automatic call generation is not activated....\n");
					}
					break;

				/* (K)ill gateways */
				case 'K':
					Result = TB640IsdnSelectAdapter (&un32Adapter);
					if (TBX_RESULT_SUCCESS(Result) && un32Adapter < TB640_ISDN_MAX_SUPPORTED_ADAPTERS )
					{
						TBX_NETWORK_REDUNDANCY_PARAMETERS			RedundancyParams;
						PTB640_ISDN_ADAPTER_INFO					pAdapterInfo;

						pAdapterInfo = &(g_AppContext->ahAdapterInfo [un32Adapter]);

						TBXGetNetworkRedundancyState
						(
							g_AppContext->hTbxLib,
							pAdapterInfo->hAdapter,
							&RedundancyParams,
							NULL,
							NULL
						);
						RedundancyParams.un32PollDelayMs			= 500;
						RedundancyParams.un32NetworkDownDelayMs		= 1500;
						RedundancyParams.un32AdapterDownDelayMs		= 10000;
						RedundancyParams.fUseNetworkGw0				= TBX_FALSE;
						RedundancyParams.fUseNetworkGw1				= TBX_FALSE;


						/* Enable Network redundancy for this adapter */
						TBXConfigureNetworkRedundancy( g_AppContext->hTbxLib, pAdapterInfo->hAdapter, &RedundancyParams );
					}
					break;

				/* (U)nkill gateways */
				case 'U':
					Result = TB640IsdnSelectAdapter (&un32Adapter);
					if (TBX_RESULT_SUCCESS(Result) && un32Adapter < TB640_ISDN_MAX_SUPPORTED_ADAPTERS )
					{
						TBX_NETWORK_REDUNDANCY_PARAMETERS			RedundancyParams;
						PTB640_ISDN_ADAPTER_INFO					pAdapterInfo;

						pAdapterInfo = &(g_AppContext->ahAdapterInfo [un32Adapter]);

						TBXGetNetworkRedundancyState
						(
							g_AppContext->hTbxLib,
							pAdapterInfo->hAdapter,
							&RedundancyParams,
							NULL,
							NULL
						);

						RedundancyParams.un32PollDelayMs			= 500;
						RedundancyParams.un32NetworkDownDelayMs		= 1500;
						RedundancyParams.un32AdapterDownDelayMs		= 10000;
						RedundancyParams.fUseNetworkGw0				= TBX_TRUE;
						RedundancyParams.fUseNetworkGw1				= TBX_TRUE;

						/* Enable Network redundancy for this adapter */
						TBXConfigureNetworkRedundancy( g_AppContext->hTbxLib, pAdapterInfo->hAdapter, &RedundancyParams );
					}
					break;

				/* (O) Toggle automatic answering (for overlap mode)*/
				case 'O':
					if (g_AppContext->fAnswerCallsManually)
					{
						g_AppContext->fAnswerCallsManually = TBX_FALSE;
					}
					else
					{
						g_AppContext->fAnswerCallsManually = TBX_TRUE;
					}
					TB640_ISDN_LOG (TRACE_LEVEL_4, "Call answering is in %s mode for overlap mode\n",
					  (g_AppContext->fAnswerCallsManually?"MANUAL":"AUTOMATIC"));

					g_fRefreshDisplay |= (TB640_ISDN_CLI_REFRESH_DISPLAY | TB640_ISDN_CLI_CLEAR_BEFORE_REFRESH);
					break;

				/* (N) Answer call */
				case 'N':
					if (!g_AppContext->fAnswerCallsManually)
					{
						TB640_ISDN_DISPLAY_PRINT ("Not allowed.  Call answering is in AUTOMATIC mode\n" );
					}
					else
					{
						Result = TB640IsdnSelectAdapterTrunkTimeslot (&un32Adapter, &un32Trunk, &un32Timeslot);
						if (TBX_RESULT_SUCCESS(Result))
						{
							TB640IsdnAnswerCall (un32Adapter, un32Trunk, un32Timeslot);
							g_fRefreshDisplay |= (TB640_ISDN_CLI_REFRESH_DISPLAY | TB640_ISDN_CLI_CLEAR_BEFORE_REFRESH);
						}
					}
					break;

				/* Space = refresh */
				case ' ':
					g_fRefreshDisplay |= (TB640_ISDN_CLI_FORCE_REFRESH | TB640_ISDN_CLI_REFRESH_DISPLAY | TB640_ISDN_CLI_CLEAR_BEFORE_REFRESH);
					break;

				/* (A)djust trace levels */
				case 'A':
					TB640IsdnAdjustTraceLevel (&g_AppContext->un32FileLogLevel, &g_AppContext->un32DisplayLogLevel);
					g_fRefreshDisplay |= (TB640_ISDN_CLI_REFRESH_DISPLAY | TB640_ISDN_CLI_CLEAR_BEFORE_REFRESH);
					break;

				/* (P)rint timeslot history */
				case 'P':
					Result = TB640IsdnSelectAdapterTrunkTimeslot (&un32Adapter, &un32Trunk, &un32Timeslot);
					if (TBX_RESULT_SUCCESS(Result))
					{
						TB640IsdnPrintTimeslotHistory (un32Adapter, un32Trunk, un32Timeslot);
						g_fRefreshDisplay |= (TB640_ISDN_CLI_REFRESH_DISPLAY | TB640_ISDN_CLI_CLEAR_BEFORE_REFRESH);
					}
					break;

				/* (D) Toggle between calls and B-chan states */
				case 'D':
					g_AppContext->fDisplayBChannelStates = !g_AppContext->fDisplayBChannelStates;
					g_fRefreshDisplay |= (TB640_ISDN_CLI_REFRESH_DISPLAY | TB640_ISDN_CLI_CLEAR_BEFORE_REFRESH);
					break;

				/* (E) Change B-channel state */
				case 'E':
					Result = TB640IsdnSelectAdapterTrunkTimeslotAndBChanState (&un32Adapter, &un32Trunk, &un32Timeslot, &State);
					if (TBX_RESULT_SUCCESS(Result))
					{
						TB640IsdnChangeBChannelState (un32Adapter, un32Trunk, un32Timeslot, State);
						g_fRefreshDisplay |= (TB640_ISDN_CLI_REFRESH_DISPLAY | TB640_ISDN_CLI_CLEAR_BEFORE_REFRESH);
					}
					break;

				/* (R)estart timeslot(s) */
				case 'R':
					TB640IsdnRestartMultipleTimeslots();
					break;

				/* Display window page down */
				case '3':
					TB640IsdnCliPageDown();
					g_fRefreshDisplay = TBX_TRUE;
					break;

				/* Display window page up */
				case '9':
					TB640IsdnCliPageUp();
					g_fRefreshDisplay = TBX_TRUE;
					break;

				/* Display window home */
				case '7':
					TB640IsdnCliHome();
					g_fRefreshDisplay = TBX_TRUE;
					break;

				/* Display window end */
				case '1':
					TB640IsdnCliEnd();
					g_fRefreshDisplay = TBX_TRUE;
					break;

				/* Display window move down */
				case '2':
					TB640IsdnCliDownArrow();
					g_fRefreshDisplay = TBX_TRUE;
					break;

				/* Display window move up */
				case '8':
					TB640IsdnCliUpArrow();
					g_fRefreshDisplay = TBX_TRUE;
					break;


				/* (F)lush log file */
				case 'F':
					{
						TBX_CHAR		szNewFilename [128];
						time_t			tTime;
						struct tm *		pTime;

						/* Close the log file if it was opened */
						if (NULL != g_AppContext->pLogFile)
						{
							fclose (g_AppContext->pLogFile);
							g_AppContext->pLogFile = NULL;

							sprintf (szNewFilename, "%s_%d", g_AppContext->szFilename, g_AppContext->un32LogNumber++ );

							g_AppContext->pLogFile = fopen (szNewFilename, "w+");
							if (NULL == g_AppContext->pLogFile)
							{
								TBX_EXIT_ERROR(TBX_RESULT_FAIL, 0, "Unable to open log file");
							}

							/* Get the time of day */
							time (&tTime);
							pTime = localtime( &tTime );

							/* Print a string to the log file... */
							TB640_ISDN_LOG (TRACE_LEVEL_ALWAYS, "ISDN sample application\n");
							TB640_ISDN_LOG (TRACE_LEVEL_ALWAYS, "Copyright (c)2003 by Telcobridges inc.\n");
							TB640_ISDN_LOG (TRACE_LEVEL_ALWAYS, "Application instance run on %s", asctime(pTime));
							TB640_ISDN_LOG (TRACE_LEVEL_ALWAYS, "----------------------------------------------------------------\n\n");
						}
					}
					break;

				/* (L)ib stats */
				case 'L':
					TBXLibStats (g_AppContext->hTbxLib);
					break;

				/* (Q)uit */
				case 'Q':
					g_fExit = TBX_TRUE;
					break;

				/* Unknown command */
				default:
					break;
				}
			}

			/* If automatic call generation is activated */
			if (fAutomaticCallGenerationActivated)
			{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -