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

📄 states.c

📁 telcobridges cas develop
💻 C
📖 第 1 页 / 共 5 页
字号:
		{
			TB640_CAS_LOG (TRACE_LEVEL_2, "%s call 0x%08X has closed connection 0x%08X successfully\n", (in_pCallContext->fCallOriginator?"Outgoing":"Incoming"), in_pCallContext->hCall, in_pCallContext->hConnection);
			in_pCallContext->fConnected = TBX_FALSE;
		}
		else
		{
			TB640_CAS_LOG (TRACE_LEVEL_3, "%s call 0x%08X has NOT closed connection 0x%08X\n", (in_pCallContext->fCallOriginator?"Outgoing":"Incoming"), in_pCallContext->hCall, in_pCallContext->hConnection);
			in_pCallContext->fCallSuccessful = TBX_FALSE;
		}

		/* One less response to receive */
		in_pCallContext->hConnection = (TB640_CONNECTION_HANDLE)NULL;
		pTrunkResInfo->hConnection = (TB640_CONNECTION_HANDLE)NULL;
		in_pCallContext->nDestroyRspExpected--;

		/* Wait until all response are received */
		if (in_pCallContext->nCreateRspExpected > 0)
		{
			TB640_CAS_STATE_WAIT;
		}

		TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_TEN);
	}

	TB640_CAS_STATE_RETURN
}


/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  TB640CasProcessStateTen:	CAS processing for call state 'ten'
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateTen)
{
	TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_TEN)
	{
		TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_ELEVEN);
	}

	TB640_CAS_STATE_DECLARE_FIRST_EVENT (TB640_MSG_ID_NOT_USED)
	{
		TB640_CAS_STATE_WAIT;
	}

	TB640_CAS_STATE_RETURN
}


/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  TB640CasProcessStateEleven:	CAS processing for call state 'eleven'
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateEleven)
{
	TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_ELEVEN)
	{
		/* Send the release command */
		TB640CasSendReleaseRq (in_pCallContext);
		TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_TWELVE);
	}

	TB640_CAS_STATE_DECLARE_FIRST_EVENT (TB640_MSG_ID_NOT_USED)
	{
		TB640_CAS_STATE_WAIT;
	}

	TB640_CAS_STATE_RETURN
}



/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  TB640CasProcessStateTwelve:	CAS processing for call state 'twelve'
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateTwelve)
{
	TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_TWELVE)
	{
		TB640_CAS_INCREMENT_STATS (un32NbCallClosingTotal, 1);
		if (in_pCallContext->fCallSuccessful)
		{
			TB640_CAS_INCREMENT_STATS (un32NbCallCompleted, 1);
		}

		if (pTrunkResInfo->Statistics.State != TB640_CAS_TRUNK_RESOURCE_STATE_CONDEMNED)
		{
			pTrunkResInfo->Statistics.State = TB640_CAS_TRUNK_RESOURCE_STATE_IDLE;
			pTrunkResInfo->Statistics.un32LastIdleTimestamp = TBX_GET_TICK();
		}
		pTrunkResInfo->hCall = (TB640_CAS_CALL_HANDLE)NULL;
		g_fRefreshDisplay |= (TB640_CAS_CLI_REFRESH_DISPLAY);

		TB640_CAS_DECREMENT_TRANSIANT_CALL (1);

		TB640_CAS_DESTROY_CONTEXT;
	}

	TB640_CAS_STATE_DECLARE_FIRST_EVENT (TB640_MSG_ID_NOT_USED)
		TB640_CAS_STATE_CONTINUE;

	TB640_CAS_STATE_RETURN
}




/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  TB640CasProcessStateThirteen:	CAS processing for call state 'thirteen'
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateThirteen)
{
	TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_THIRTEEN)
	{
		pTrunkResInfo->Statistics.State = TB640_CAS_TRUNK_RESOURCE_STATE_OPENING_OUTGOING;
		g_fRefreshDisplay |= (TB640_CAS_CLI_REFRESH_DISPLAY);
		TB640_CAS_STATE_WAIT;
	}

	TB640_CAS_STATE_DECLARE_FIRST_EVENT (TB640_MSG_ID_CAS_CMD_CONNECT_REQUEST)
	{
		PTB640_RSP_CAS_CMD_CONNECT_REQUEST		pReq = (PTB640_RSP_CAS_CMD_CONNECT_REQUEST)in_pMsgPayload;
		if (TBX_RESULT_SUCCESS(pReq->Result))
		{
			/* Timeslot is now in use */
			in_pCallContext->hCall = pReq->hCall;
			pTrunkResInfo->hCall = in_pCallContext->hCall;

			TB640_CAS_LOG (TRACE_LEVEL_1, "Outgoing 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);
			TB640_CAS_LOG (TRACE_LEVEL_2, "Calling address is %s\n", in_pCallContext->aun8OutbandCallingAddress);

			TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_FOURTHEEN);
		}
		else
		{
			if (pReq->Result == TB640_RESULT_CASMGR_RELEASE_NOT_COMPLETED_RETRY_LATER)
			{
				TB640_CAS_INCREMENT_STATS (un32NbCallOpeningTimeslotBusy, 1);
			}
			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 );
			}
			in_pCallContext->fCasDisconnected = TBX_TRUE;
			TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_TWELVE);

		}
	}

	TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_TIMEOUT)
	{
		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_INCREMENT_STATS (un32NbTimeoutOccured, 1);
		TB640_CAS_INCREMENT_TRUNK_STATS (un32NbTimeoutOccured, 1);
		in_pCallContext->fTimeoutOccured = TBX_TRUE;
		in_pCallContext->fCasNeedToDisconnect = TBX_TRUE;
		TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_EIGHT);
	}

	TB640_CAS_STATE_RETURN
}


/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  TB640CasProcessStateFourtheen:	CAS processing for call state 'fourtheen'
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateFourtheen)
{
	TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_FOURTHEEN)
	{
		/* Nothing to do */
		TB640_CAS_STATE_WAIT;
	}

	TB640_CAS_STATE_DECLARE_FIRST_EVENT (TB640_MSG_ID_CAS_NOTIF_DISCONNECT_INDICATION)
	{
		in_pCallContext->fCasDisconnected = 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_ELEVEN);
	}

	TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_NOTIF_CONNECT_CONFIRM)
	{
		if (in_pCallContext->fCasNeedToDisconnect == TBX_FALSE)
		{
			TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_FIFTHEEN);
		}
		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)
	{
		TBX_UINT32								un32Count;
		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 ( (pTrunkInfo->StackConfiguration.CasVariant == TB640_CAS_VARIANT_R2_CHINA) ||
			 (pTrunkInfo->StackConfiguration.CasVariant == TB640_CAS_VARIANT_R2_KOREA) ||
			 (pTrunkInfo->StackConfiguration.CasVariant == TB640_CAS_VARIANT_R2_SINGAPORE) ||
			 (pTrunkInfo->StackConfiguration.CasVariant == TB640_CAS_VARIANT_R2_BANGLADESH) ||
			 (pTrunkInfo->StackConfiguration.CasVariant == TB640_CAS_VARIANT_R2_GENERIC))
		{
			/* Is the dialing over ? */
			if (pEvent->Event.StatusIndication == TB640_CAS_STATUS_IND_VALUE_CAS_R2_DIALING_DONE)
			{
				/* Check if there was an error */
				if (pEvent->Event.aun8Data [0] == TB640_CAS_R2_DIALING_DONE_RESULT_ERROR)
				{
					TB640_CAS_INCREMENT_STATS (un32NbCallOpeningFailure, 1);
					TB640_CAS_INCREMENT_TRUNK_STATS (un32NbCallOpeningFailure, 1);
					TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_SEVEN);
				}

				/* Check the meaning of the digit to see if we should disconnect the call */
				for (un32Count=0; un32Count<pTrunkInfo->un8R2NbRefusalDigit; un32Count++)
				{
					if (pEvent->Event.aun8Data [1] == pTrunkInfo->aun8R2PossibleRefuseDigits [un32Count])
					{
						TB640_CAS_LOG (TRACE_LEVEL_2, "Outgoing call 0x%08X dialing is done with GroupB digit = %c (refusal)\n",
							in_pCallContext->hCall,
							pEvent->Event.aun8Data [1] );

						TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_SEVEN);
					}
				}

				TB640_CAS_LOG (TRACE_LEVEL_2, "Outgoing call 0x%08X dialing is done with GroupB digit = %c (acceptance)\n",
					in_pCallContext->hCall,
					pEvent->Event.aun8Data [1] );
			}
		}

		/* For Taiwan modified R1, we need to check the result of the dialing */
		else if ( pTrunkInfo->StackConfiguration.CasVariant == TB640_CAS_VARIANT_TAIWAN_R1)
		{
			/* Is the dialing over ? */
			if (pEvent->Event.StatusIndication == TB640_CAS_STATUS_IND_VALUE_CAS_MDR1_DIALING_DONE)
			{
				/* Check if there was an error */
				if (pEvent->Event.aun8Data [0] == TB640_CAS_MDR1_DIALING_DONE_RESULT_ERROR)
				{
					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_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)
	{
		TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_EIGHT);
	}

	TB640_CAS_STATE_DECLARE_NEXT_EVENT (TB640_MSG_ID_CAS_TIMEOUT)
	{
		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_INCREMENT_STATS (un32NbTimeoutOccured, 1);
		TB640_CAS_INCREMENT_TRUNK_STATS (un32NbTimeoutOccured, 1);
		in_pCallContext->fTimeoutOccured = TBX_TRUE;
		in_pCallContext->fCasNeedToDisconnect = TBX_TRUE;
		TB640_CAS_CHANGE_STATE (TB640_CAS_CALL_APP_STATE_EIGHT);
	}

	TB640_CAS_STATE_RETURN
}


/*-------------------------------------------------------------------------------------------------------------------------------
 |
 |  TB640CasProcessStateFiftheen:	CAS processing for call state 'fiftheen'
 |
 *------------------------------------------------------------------------------------------------------------------------------*/
TB640_CAS_STATE_FUNCTION(TB640CasProcessStateFiftheen)
{
	TB640_CAS_STATE_ENTRY(TB640_CAS_CALL_APP_STATE_FIFTHEEN)
	{
		if( g_AppContext->fDoConnection )
		{
			if( g_AppContext->fCTBusConnection == TBX_FALSE )
			{
				TB640_CAS_LOG (TRACE_LEVEL_2, "Outgoing call 0x%08X using trunk %d, timeslot %d\n", in_pCallContext->hCall, in_pCallContext->un32TrunkIndex, in_pCallContext->un32TimeslotIndex);

				/* Create the connection */
				TB640CasSendCreateConnection ((TB640_RESOURCE_HANDLE) NULL, pTrunkResInfo->hTrunkResource, in_pCallContext);
				in_pCallContext->nCreateRspExpected = 1;
				TB640_

⌨️ 快捷键说明

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