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

📄 cli.c

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