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

📄 states.c

📁 telcobridges cas develop
💻 C
📖 第 1 页 / 共 5 页
字号:
		else
		{
			TB640_CAS_INCREMENT_STATS (un32NbCallOpeningFailure, 1);
			TB640_CAS_INCREMENT_TRUNK_STATS (un32NbCallOpeningFailure, 1);
			TB640_CAS_LOG (TRACE_LEVEL_3, "Detected opening failure on call 0x%08X (trunk %d, timeslot %d)\n",
			  in_pCallContext->hCall,
			  in_pCallContext->un32TrunkIndex,
			  in_pCallContext->un32TimeslotIndex );
			TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_SEVEN);
		}
	}

	TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_NOTIF_STATUS_INDICATION)
	{
		PTB640_MSG_CAS_NOTIF_STATUS_INDICATION	pEvent = (PTB640_MSG_CAS_NOTIF_STATUS_INDICATION)in_pMsgPayload;

		/* For R2, we need to check the result of the dialing */
		if (pEvent->Event.StatusIndication == TB640_CAS_STATUS_IND_VALUE_CAS_R2_DIALING_DONE)
		{
			/* Check if the register signaling is over */
			if (pEvent->Event.aun8Data [0] == TB640_CAS_R2_DIALING_DONE_RESULT_BACKWARD_SIG_DONE)
			{
				TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_TWO);
			}
			else
			{
				TB640_CAS_INCREMENT_STATS (un32NbCallOpeningFailure, 1);
				TB640_CAS_INCREMENT_TRUNK_STATS (un32NbCallOpeningFailure, 1);
				TB640_CAS_LOG (TRACE_LEVEL_3, "Detected opening failure (R2) on call 0x%08X (trunk %d, timeslot %d)\n",
				  in_pCallContext->hCall,
				  in_pCallContext->un32TrunkIndex,
				  in_pCallContext->un32TimeslotIndex );
				TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_SEVEN);
			}
		}

		/* Ignore the message */
		TB640_CAS_STATE_WAIT;
	}

	TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_TIMEOUT)
	{
		in_pCallContext->fTimeoutOccured = TBX_TRUE;
		in_pCallContext->fCasNeedToDisconnect = TBX_TRUE;
		TB640_CAS_INCREMENT_STATS (un32NbTimeoutOccured, 1);
		TB640_CAS_INCREMENT_TRUNK_STATS (un32NbTimeoutOccured, 1);
		TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_SEVEN);
	}

	TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_DROP_CALL)
	{
		/* In case the user wants to force call shutdown */
		TB640_CAS_INCREMENT_STATS (un32NbCallOpeningFailure, 1);
		TB640_CAS_INCREMENT_TRUNK_STATS (un32NbCallOpeningFailure, 1);
		TB640_CAS_LOG (TRACE_LEVEL_3, "Detected opening failure on call 0x%08X (trunk %d, timeslot %d)\n",
		  in_pCallContext->hCall,
		  in_pCallContext->un32TrunkIndex,
		  in_pCallContext->un32TimeslotIndex );
		TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_SEVEN);
	}

	TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_RESTART)
	{
		TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_EIGHT);
	}

	TB640_CAS_STATE_RETURN
}



/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  TB640CasProcessStateTwo:	CAS processing for call state 'two'
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateTwo)
{
	TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_TWO)
	{
		if( g_AppContext->fDoConnection )
		{
			if( g_AppContext->fCTBusConnection == TBX_FALSE )
			{
				TB640_CAS_LOG (TRACE_LEVEL_1, "Incoming call 0x%08X using trunk %d, timeslot %d\n", in_pCallContext->hCall, in_pCallContext->un32TrunkIndex, in_pCallContext->un32TimeslotIndex);
				TB640_CAS_LOG (TRACE_LEVEL_1, "Called address is %s\n", in_pCallContext->aun8OutbandCalledAddress);
				if (strlen (in_pCallContext->aun8OutbandCallingAddress) > 0)
				{
					TB640_CAS_LOG (TRACE_LEVEL_2, "Calling address is %s\n", in_pCallContext->aun8OutbandCallingAddress);
				}
				else
				{
					TB640_CAS_LOG (TRACE_LEVEL_2, "Calling address is not available\n");
				}

				/* Do the connection */
				TB640CasSendCreateConnection (
				  (TB640_RESOURCE_HANDLE) NULL,
				  pTrunkResInfo->hTrunkResource,
				  in_pCallContext);
				in_pCallContext->nCreateRspExpected = 1;
				TB640_CAS_LOG (TRACE_LEVEL_0, "Incoming call 0x%08X tries to connect trunk resource 0x%08X\n", in_pCallContext->hCall, pTrunkResInfo->hTrunkResource);
			}
			else
			{
				TB640_CAS_LOG (TRACE_LEVEL_1, "Incoming call 0x%08X using trunk %d, timeslot %d, CTBUS %d:%d\n", in_pCallContext->hCall, in_pCallContext->un32TrunkIndex, in_pCallContext->un32TimeslotIndex, pCtbusInfo->un8CtbusStream, pCtbusInfo->un8CtbusTimeslot);
				TB640_CAS_LOG (TRACE_LEVEL_1, "Called address is %s\n", in_pCallContext->aun8OutbandCalledAddress);
				if (strlen (in_pCallContext->aun8OutbandCallingAddress) > 0)
				{
					TB640_CAS_LOG (TRACE_LEVEL_2, "Calling address is %s\n", in_pCallContext->aun8OutbandCallingAddress);
				}
				else
				{
					TB640_CAS_LOG (TRACE_LEVEL_2, "Calling address is not available\n");
				}

				/* Do the connection */
				TB640CasSendCreateConnection (
				  pCtbusInfo->hCtbusResource,
				  pTrunkResInfo->hTrunkResource,
				  in_pCallContext);
				in_pCallContext->nCreateRspExpected = 1;
				TB640_CAS_LOG (TRACE_LEVEL_0, "Incoming call 0x%08X tries to connect trunk resource 0x%08X and CtBus resource 0x%08X\n", in_pCallContext->hCall, pTrunkResInfo->hTrunkResource, pCtbusInfo->hCtbusResource);
			}
			pTrunkResInfo->Statistics.State = TB640_CAS_TRUNK_RESOURCE_STATE_CONNECTING;
			g_fRefreshDisplay |= (TB640_CAS_CLI_REFRESH_DISPLAY);

			TB640_CAS_STATE_WAIT;
		}
		else
		{
			TB640_CAS_LOG (TRACE_LEVEL_2, "No connection will be made\n" );
			TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_THREE);
		}
	}

	TB640_CAS_STATE_DECLARE_FIRST_EVENT (TB640_MSG_ID_CAS_NOTIF_DISCONNECT_INDICATION)
	{
		in_pCallContext->fCasDisconnected = TBX_TRUE;
		TB640_CAS_STATE_WAIT;
	}

	TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CONN_OP_CREATE)
	{
		PTB640_RSP_CONN_OP_CREATE		pRsp = (PTB640_RSP_CONN_OP_CREATE)in_pMsgPayload;

		/* One less response to obtain */
		in_pCallContext->nCreateRspExpected--;

		/* Was the connection successful ? */
		if (TBX_RESULT_SUCCESS(pRsp->Result))
		{
			in_pCallContext->fConnected = TBX_TRUE;
			in_pCallContext->hConnection = pRsp->hConn;
			pTrunkResInfo->hConnection = pRsp->hConn;
			TB640_CAS_LOG (TRACE_LEVEL_2, "Incoming call 0x%08X connected with handle 0x%08X\n", in_pCallContext->hCall, in_pCallContext->hConnection);

			/* Force a restart ? */
			if (in_pCallContext->fNeedToRestart != TBX_FALSE)
			{
				TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_EIGHT);
			}
		}
		else
		{
			TB640_CAS_LOG (TRACE_LEVEL_3, "Incoming call 0x%08X had an error while connecting resources (trunk %d, timeslot %d)\n",
			  in_pCallContext->hCall,
			  in_pCallContext->un32TrunkIndex,
			  in_pCallContext->un32TimeslotIndex );

			TB640_CAS_INCREMENT_STATS (un32NbCallOpeningFailure, 1);
			TB640_CAS_INCREMENT_TRUNK_STATS (un32NbCallOpeningFailure, 1);
			TB640_CAS_LOG (TRACE_LEVEL_3, "Detected opening failure on call 0x%08X (trunk %d, timeslot %d)\n",
			  in_pCallContext->hCall,
			  in_pCallContext->un32TrunkIndex,
			  in_pCallContext->un32TimeslotIndex );

			/* Force a restart ? */
			if (in_pCallContext->fNeedToRestart != TBX_FALSE)
			{
				TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_EIGHT);
			}
			else
			{
				TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_FIVE);
			}
		}

		/* Were we disconnected on our CAS channel */
		if ((in_pCallContext->fCasDisconnected == TBX_TRUE) || (in_pCallContext->fCasNeedToDisconnect == TBX_TRUE))
		{
			TB640_CAS_INCREMENT_STATS (un32NbCallOpeningFailure, 1);
			TB640_CAS_INCREMENT_TRUNK_STATS (un32NbCallOpeningFailure, 1);
			TB640_CAS_LOG (TRACE_LEVEL_3, "Detected opening failure on call 0x%08X (trunk %d, timeslot %d)\n",
			  in_pCallContext->hCall,
			  in_pCallContext->un32TrunkIndex,
			  in_pCallContext->un32TimeslotIndex );
			TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_FOUR);
		}

		TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_THREE);
	}

	TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_DROP_CALL)
	{
		/* In case the user wants to force call shutdown */
		in_pCallContext->fCasNeedToDisconnect = TBX_TRUE;
		TB640_CAS_STATE_WAIT;
	}

	TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_RESTART)
	{
		in_pCallContext->fNeedToRestart = TBX_TRUE;
		TB640_CAS_STATE_WAIT;
	}

	TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_TIMEOUT)
	{
		in_pCallContext->fTimeoutOccured = TBX_TRUE;
		in_pCallContext->fCasNeedToDisconnect = TBX_TRUE;
		TB640_CAS_INCREMENT_STATS (un32NbTimeoutOccured, 1);
		TB640_CAS_INCREMENT_TRUNK_STATS (un32NbTimeoutOccured, 1);
		TB640_CAS_STATE_WAIT;
	}

	TB640_CAS_STATE_RETURN
}


/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  TB640CasProcessStateThree:	CAS processing for call state 'three'
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateThree)
{
	TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_THREE)
	{
		TBX_UINT32		un32CallDuration;

		pTrunkResInfo->Statistics.State = TB640_CAS_TRUNK_RESOURCE_STATE_ACTIVE;
		g_fRefreshDisplay |= (TB640_CAS_CLI_REFRESH_DISPLAY);

		TB640_CAS_INCREMENT_STATS (un32NbCallOpeningSuccess, 1);
		in_pCallContext->fCallSuccessful = TBX_TRUE;

		/* Do we need to do a random call duration */
		if (in_pCallContext->un32MinCallDuration == in_pCallContext->un32MaxCallDuration)
		{
			if (in_pCallContext->un32MinCallDuration == (TBX_UINT32)-1)
			{
				TB640_CAS_LOG (TRACE_LEVEL_2, "%s call 0x%08X has an infinite call duration\n", (in_pCallContext->fCallOriginator?"Outgoing":"Incoming"), in_pCallContext->hCall);
			}
			else
			{
				TB640_CAS_LOG (TRACE_LEVEL_2, "%s call 0x%08X has a %d second call duration\n", (in_pCallContext->fCallOriginator?"Outgoing":"Incoming"), in_pCallContext->hCall, in_pCallContext->un32MinCallDuration);
			}

			/* Fixed call duration */
			un32CallDuration = in_pCallContext->un32MinCallDuration;
		}
		else
		{
			/* Random call generation */
			un32CallDuration = (in_pCallContext->un32MaxCallDuration - in_pCallContext->un32MinCallDuration);
			un32CallDuration = (un32CallDuration * rand()) / RAND_MAX;
			un32CallDuration += in_pCallContext->un32MinCallDuration;

			TB640_CAS_LOG (TRACE_LEVEL_2, "%s call 0x%08X has a %d second call duration (random)\n", (in_pCallContext->fCallOriginator?"Outgoing":"Incoming"), in_pCallContext->hCall, un32CallDuration);
		}

		/* Set the timeout on the call */
		if (un32CallDuration > 0)
		{
			/* Call duration of x second on the call */
			TB640_CAS_SET_TIMEOUT (un32CallDuration);
		}
		else
		{
			/* Call needs to be disconnected immediately */
			TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_FOUR);
		}

		TB640_CAS_DECREMENT_TRANSIANT_CALL (1);

		TB640_CAS_STATE_WAIT;
	}

	TB640_CAS_STATE_DECLARE_FIRST_EVENT (TB640_MSG_ID_CAS_NOTIF_DISCONNECT_INDICATION)
	{
		TB640_CAS_INCREMENT_TRANSIANT_CALL (1);
		in_pCallContext->fCasDisconnected = TBX_TRUE;
		TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_FOUR);
	}

	TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_DROP_CALL)
	{
		TB640_CAS_INCREMENT_TRANSIANT_CALL (1);

		/* The user wants to drop a call */

		TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_FOUR);
	}

	TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_TIMEOUT)
	{
		TB640_CAS_INCREMENT_TRANSIANT_CALL (1);
		in_pCallContext->fTimeoutOccured = TBX_TRUE;
		TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_FOUR);
	}

	TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_RESTART)
	{
		TB640_CAS_INCREMENT_TRANSIANT_CALL (1);
		TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_EIGHT);
	}

	TB640_CAS_STATE_RETURN
}


/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  TB640CasProcessStateFour:	CAS processing for call state 'four'
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateFour)
{
	TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_FOUR)
	{
		in_pCallContext->nDestroyRspExpected = 0;

		/* The call is disconnecting -> set a maximum timeout */
		TB640_CAS_SET_TIMEOUT (TB640_CAS_CALL_DISCONNECT_MAX_DURATION_SEC);

⌨️ 快捷键说明

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