📄 cli.c
字号:
TB640_CAS_LOG ( TRACE_LEVEL_ALWAYS, "\n" );
TB640_CAS_LOG ( TRACE_LEVEL_ALWAYS, "\tInstantaneous calls per sec. : %08d Instantaneous BHCC : %08d\n",
un32NbCallPerSeconds, un32NbBHCA );
TB640_CAS_LOG ( TRACE_LEVEL_ALWAYS, "\tCall opening successful : %08d Call completed : %08d\n",
StatsCopy.un32NbCallOpeningSuccess, StatsCopy.un32NbCallCompleted );
TB640_CAS_LOG ( TRACE_LEVEL_ALWAYS, "\tCall opening with out-of-res. : %08d Call closing total : %08d\n",
StatsCopy.un32NbCallOpeningOutOfRes,
StatsCopy.un32NbCallClosingTotal );
TB640_CAS_LOG ( TRACE_LEVEL_ALWAYS, "\tNb incoming call collision : %08d Nb outgoing call collision : %08d\n",
StatsCopy.un32NbIncomingCallCollision, StatsCopy.un32NbOutgoingCallCollision );
TB640_CAS_LOG ( TRACE_LEVEL_ALWAYS, "\tCall opening failure : %08d Nb timeout events : %08d\n",
StatsCopy.un32NbCallOpeningFailure, StatsCopy.un32NbTimeoutOccured );
TB640_CAS_LOG ( TRACE_LEVEL_ALWAYS, "\tRestart sent : %08d Call opening timeslot busy : %08d\n",
StatsCopy.un32NbRestartAttempt, StatsCopy.un32NbCallOpeningTimeslotBusy );
TB640_CAS_LOG ( TRACE_LEVEL_ALWAYS, "\tNo free tmslot for stress tst : %08d Nb elapsed sec. since start : %08d\n",
StatsCopy.un32NbCallNoFreeTimeslotToOpen, ((StatsCopy.un32CurrentTimestamp - StatsCopy.un32StartTimestamp) / 1000) );
TB640_CAS_LOG ( TRACE_LEVEL_ALWAYS, "\tNb incoming call refusal : %08d \n",
StatsCopy.un32NbIncomingCallRefusal );
TB640_CAS_LOG ( TRACE_LEVEL_ALWAYS, "\n" );
TBX_SEM_GIV (g_StressStatsSem);
fAutomaticCallGenerationActivated = TBX_FALSE;
g_fRefreshDisplay |= (TB640_CAS_CLI_CLEAR_BEFORE_REFRESH | TB640_CAS_CLI_REFRESH_DISPLAY | TB640_CAS_CLI_FORCE_REFRESH);
}
else
{
TB640_CAS_DISPLAY_PRINT ("Automatic call generation is not activated....\n");
}
break;
/* Space = refresh */
case ' ':
g_fRefreshDisplay |= (TB640_CAS_CLI_CLEAR_BEFORE_REFRESH | TB640_CAS_CLI_REFRESH_DISPLAY | TB640_CAS_CLI_FORCE_REFRESH);
break;
/* (A)djust trace levels */
case 'A':
TB640CasAdjustTraceLevel (&g_AppContext->un32FileLogLevel, &g_AppContext->un32DisplayLogLevel);
g_fRefreshDisplay |= (TB640_CAS_CLI_CLEAR_BEFORE_REFRESH | TB640_CAS_CLI_REFRESH_DISPLAY);
break;
/* (P)rint timeslot history */
case 'P':
Result = TB640CasSelectAdapterTrunkTimeslot (&un32Adapter, &un32Trunk, &un32Timeslot);
if (TBX_RESULT_SUCCESS(Result))
{
TB640CasPrintTimeslotHistory (un32Adapter, un32Trunk, un32Timeslot);
g_fRefreshDisplay |= (TB640_CAS_CLI_CLEAR_BEFORE_REFRESH | TB640_CAS_CLI_REFRESH_DISPLAY);
}
break;
/* (R)estart timeslot */
case 'R':
Result = TB640CasSelectAdapterTrunkTimeslot (&un32Adapter, &un32Trunk, &un32Timeslot);
if (TBX_RESULT_SUCCESS(Result))
{
TB640CasRestartTimeslot (un32Adapter, un32Trunk, un32Timeslot);
g_fRefreshDisplay |= (TB640_CAS_CLI_CLEAR_BEFORE_REFRESH | TB640_CAS_CLI_REFRESH_DISPLAY);
}
break;
/* Print stack stats */
case '$':
TB640_CAS_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_CAS_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_CAS_LOG (TRACE_LEVEL_4, "****************** Done ****************\n");
break;
/* Display window move down */
case '2':
TBX_SEM_GET (g_AppContext->DisplaySem, TBX_SEM_WAIT_FOREVER);
if (g_un32ErrorLineReadIndex != g_un32ErrorLineWriteIndex)
{
if (++g_un32ErrorLineReadIndex >= TB640_CAS_CLI_MAX_NB_ERROR_LINES)
{
g_un32ErrorLineReadIndex = 0;
}
}
TBX_SEM_GIV (g_AppContext->DisplaySem);
g_fRefreshDisplay |= (TB640_CAS_CLI_REFRESH_DISPLAY);
break;
/* Display window page down */
case '3':
TBX_SEM_GET (g_AppContext->DisplaySem, TBX_SEM_WAIT_FOREVER);
/* Make sure there is something in the buffer */
if (g_un32ErrorLineReadIndex != g_un32ErrorLineWriteIndex)
{
un32Tmp = g_un32ErrorLineReadIndex + 25;
if (un32Tmp >= TB640_CAS_CLI_MAX_NB_ERROR_LINES)
{
/* Wrap around case */
un32Tmp = 0 + (un32Tmp - TB640_CAS_CLI_MAX_NB_ERROR_LINES);
if (g_un32ErrorLineReadIndex > g_un32ErrorLineWriteIndex)
{
if (un32Tmp < g_un32ErrorLineWriteIndex)
{
/* No overflow */
g_un32ErrorLineReadIndex = un32Tmp;
}
else
{
/* Overflow */
g_un32ErrorLineReadIndex = (g_un32ErrorLineWriteIndex - 1);
}
}
else
{
/* Overflow */
g_un32ErrorLineReadIndex = (g_un32ErrorLineWriteIndex - 1);
}
}
else
{
/* No wrap-around case */
if (g_un32ErrorLineReadIndex < g_un32ErrorLineWriteIndex)
{
if (un32Tmp < g_un32ErrorLineWriteIndex)
{
/* No overflow */
g_un32ErrorLineReadIndex = un32Tmp;
}
else
{
/* Overflow */
g_un32ErrorLineReadIndex = (g_un32ErrorLineWriteIndex - 1);
}
}
else
{
/* No overflow possible - the write pointer is behind us */
g_un32ErrorLineReadIndex = un32Tmp;
}
}
}
TBX_SEM_GIV (g_AppContext->DisplaySem);
g_fRefreshDisplay |= (TB640_CAS_CLI_REFRESH_DISPLAY);
break;
/* Display window move up */
case '8':
TBX_SEM_GET (g_AppContext->DisplaySem, TBX_SEM_WAIT_FOREVER);
un32OldReadIndex = g_un32ErrorLineReadIndex;
if (g_un32ErrorLineReadIndex != 0)
{
g_un32ErrorLineReadIndex--;
}
else
{
g_un32ErrorLineReadIndex = (TB640_CAS_CLI_MAX_NB_ERROR_LINES-1);
}
if (g_un32ErrorLineReadIndex == g_un32ErrorLineWriteIndex)
{
g_un32ErrorLineReadIndex = un32OldReadIndex;
}
TBX_SEM_GIV (g_AppContext->DisplaySem);
g_fRefreshDisplay |= (TB640_CAS_CLI_REFRESH_DISPLAY);
break;
/* Display window page up */
case '9':
TBX_SEM_GET (g_AppContext->DisplaySem, TBX_SEM_WAIT_FOREVER);
/* Make sure there is something in the buffer */
if (g_un32ErrorLineReadIndex != g_un32ErrorLineWriteIndex)
{
if (g_un32ErrorLineReadIndex < 25)
{
/* Wrap around case */
un32Tmp = (TB640_CAS_CLI_MAX_NB_ERROR_LINES - g_un32ErrorLineReadIndex);
if (g_un32ErrorLineReadIndex < g_un32ErrorLineWriteIndex)
{
if (un32Tmp > g_un32ErrorLineWriteIndex)
{
/* No underflow */
g_un32ErrorLineReadIndex = un32Tmp;
}
else
{
/* underflow */
g_un32ErrorLineReadIndex = (g_un32ErrorLineWriteIndex + 1);
if (g_un32ErrorLineReadIndex >= TB640_CAS_CLI_MAX_NB_ERROR_LINES)
{
g_un32ErrorLineReadIndex = 0;
}
}
}
else
{
/* underflow */
g_un32ErrorLineReadIndex = (g_un32ErrorLineWriteIndex + 1);
}
}
else
{
/* No wrap-around case */
un32Tmp = g_un32ErrorLineReadIndex - 25;
if (g_un32ErrorLineReadIndex > g_un32ErrorLineWriteIndex)
{
if (un32Tmp > g_un32ErrorLineWriteIndex)
{
/* No underflow */
g_un32ErrorLineReadIndex = un32Tmp;
}
else
{
/* underflow */
g_un32ErrorLineReadIndex = (g_un32ErrorLineWriteIndex + 1);
}
}
else
{
/* No underflow possible - the write pointer is in front of us */
g_un32ErrorLineReadIndex = un32Tmp;
}
}
}
TBX_SEM_GIV (g_AppContext->DisplaySem);
g_fRefreshDisplay |= (TB640_CAS_CLI_REFRESH_DISPLAY);
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_CAS_LOG (TRACE_LEVEL_ALWAYS, "CAS sample application\n");
TB640_CAS_LOG (TRACE_LEVEL_ALWAYS, "Copyright (c)2002-2005 by TelcoBridges inc.\n");
TB640_CAS_LOG (TRACE_LEVEL_ALWAYS, "Application instance run on %s", asctime(pTime));
TB640_CAS_LOG (TRACE_LEVEL_ALWAYS, "----------------------------------------------------------------\n\n");
}
}
break;
/* (Q)uit */
case 'Q':
g_fExit = TBX_TRUE;
break;
/* Unknown command */
default:
break;
}
}
/* If automatic call generation is activated */
if (fAutomaticCallGenerationActivated)
{
/* Only start calls on precise boundary */
while (TBX_TRUE)
{
TBX_INT32 n32ElapsedMs;
/* Make sure we are not processing in the futur */
n32ElapsedMs = (TBX_INT32)(un32Timer - un32LastTimeWhereACallWasMade);
n32ElapsedMs *= TBX_MSEC_PER_TICKS;
if (n32ElapsedMs < 0)
{
un32LastTimeWhereACallWasMade = un32Timer;
break;
}
/* Do we need to make a call ? */
un32ElapsedMs = un32Timer - un32LastTimeWhereACallWasMade;
un32ElapsedMs *= TBX_MSEC_PER_TICKS;
if (un32ElapsedMs < un32StressDelayBetweenCalls)
{
break;
}
/* We cannot make more than x calls per seconds even if we are "behind" our schedule */
if (un32StressDelayBetweenCalls < 1000)
{
un32ElapsedMs = un32Timer - un32LastTimeWhereACallWasMade;
un32ElapsedMs *= TBX_MSEC_PER_TICKS;
if (un32ElapsedMs >= (1000 / TB640_CAS_CLI_MIN_TIME_BETWEEN_STRESS_CALLS))
{
un32LastTimeWhereACallWasMade = un32Timer - (1000 / TB640_CAS_CLI_MIN_TIME_BETWEEN_STRESS_CALLS);
}
}
/* Select timeslot to use for call generation */
Result = TB640CasSelectCallForAutomaticCall(un32StressOutgoingTimeslotMinIdleMsec, &un32Adapter, &un32Trunk, &un32Timeslot);
if (TBX_RESULT_SUCCESS(Result))
{
TB640CasMakeCall (un32Adapter, un32Trunk, un32Timeslot, un32StressMinCallDuration, un32StressMaxCallDuration);
}
else
{
TB640_CAS_INCREMENT_STATS (un32NbCallNoFreeTimeslotToOpen, 1);
g_fRefreshDisplay |= (TB640_CAS_CLI_REFRESH_DISPLAY);
}
/* Wait until next time delay is expired before making another call */
un32LastTimeWhereACallWasMade += un32StressDelayBetweenCalls;
}
/* Only restart timeslot on precise boundary */
if (un32StressDelayBetweenRestart > 0)
{
while (TBX_TRUE)
{
TBX_INT32 n32ElapsedMs;
/* Make sure we are not processing in the futur */
n32ElapsedMs = (TBX_INT32)(un32Timer - un32LastTimeWhereARestartWasMade);
n32ElapsedMs *= TBX_MSEC_PER_TICKS;
if (n32ElapsedMs < 0)
{
un32LastTimeWhereARestartWasMade = un32Timer;
break;
}
/* Do we need to do a restart ? */
un32ElapsedMs = un32Timer - un32LastTimeWhereARestartWasMade;
un32ElapsedMs *= TBX_MSEC_PER_TICKS;
if (un32ElapsedMs < un32StressDelayBetweenRestart)
{
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -