📄 cli.c
字号:
}
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 + -