BST_VOID BST_SYS_MntnInit( BST_VOID ) { BST_OS_LOCKCNT_T tThreadLockCnt; tThreadLockCnt = BST_OS_ThreadLock(); g_stBstMntnEntity.stReportTimer = BST_OS_TimerCreate ( BST_SYS_MntnTimerExpired, BST_NULL_PTR ); lstInit( &g_stBstMntnEntity.stAppList ); BST_OS_MEMSET( &g_stBstMntnEntity.aucLocalIp[0], 0, OM_BST_IP_ADDR_LEN ); g_stBstMntnEntity.ucChanged = BST_FALSE; g_stBstMntnEntity.ucIsInit = BST_TRUE; BST_RLS_LOG( "[Mntn] Initial System" ); BST_OS_ThreadUnLock( tThreadLockCnt ); return; }
BST_ERR_ENUM_UINT8 BST_SRV_CHNL_Itf( BST_SRV_CHNL_HEAD_STRU *pstPktItem ) { BST_SRV_CHNL_LINK_STRU *pstLinkItem = BST_NULL_PTR; BST_SRV_CHNL_LINK_STRU *pstLinkItem2; BST_IP_CSocket *pcSocket; BST_OS_TIMERID_T ulTimerId; BST_ERR_ENUM_UINT8 enRtnVal; BST_ASSERT_NULL_RTN( pstPktItem, BST_ERR_INVALID_PTR ); pstLinkItem = BST_SRV_Q_PeekHead( g_lstChnlMng ); enRtnVal = BST_NO_ERROR_MSG; for(;;) { if( BST_NULL_PTR == pstLinkItem ) { break; } if( ( pstLinkItem->stLink.ulMainLinkId == pstPktItem->ulMainLinkId ) &&( pstLinkItem->stLink.ulAuxLinkId == pstPktItem->ulAuxLinkId ) ) { break; } pstLinkItem = pstLinkItem->pNext; } BST_DBG_LOG1( "CPC_PACKET_DROP pstPktItem->usCmdId", pstPktItem->usCmdId ); switch( pstPktItem->usCmdId ) { case BST_DSPP_FLG_CMD_CLEAR: if( BST_NULL_PTR != pstLinkItem ) { BST_SRV_CHNL_Close( pstLinkItem ); delete pstLinkItem->pcSocket; BST_SRV_Q_RmvItem( (BST_SRV_CHNL_Q **)&g_lstChnlMng, (BST_SRV_CHNL_Q *)pstLinkItem, (BST_SRV_CHNL_Q **)&pstLinkItem2 ); BST_OS_TimerRemove( pstLinkItem->ulTimerId ); BST_OS_FREE( pstLinkItem ); } else { enRtnVal = BST_ERR_UNKNOW_OBJ; } break; case BST_DSPP_FLG_CMD_CLOSE: if( BST_NULL_PTR != pstLinkItem ) { BST_SRV_CHNL_Close( pstLinkItem ); delete pstLinkItem->pcSocket; BST_SRV_Q_RmvItem( (BST_SRV_CHNL_Q **)&g_lstChnlMng, (BST_SRV_CHNL_Q *)pstLinkItem, (BST_SRV_CHNL_Q **)&pstLinkItem2 ); BST_OS_TimerRemove( pstLinkItem->ulTimerId ); BST_OS_FREE( pstLinkItem ); } else { enRtnVal = BST_ERR_UNKNOW_OBJ; } break; case BST_DSPP_FLG_CMD_SEND: BST_DBG_LOG1("BST_SRV_CHNL_Itf send pstLinkItem",pstLinkItem); if( BST_NULL_PTR == pstLinkItem ) { pstLinkItem = (BST_SRV_CHNL_LINK_STRU *)BST_OS_MALLOC ( BST_OS_SIZEOF(BST_SRV_CHNL_LINK_STRU) ); if( BST_NULL_PTR == pstLinkItem ) { enRtnVal = BST_ERR_NO_MEMORY; break; } pcSocket = BST_SRV_CHNL_CreateSocket( pstPktItem ); if ( BST_NULL_PTR == pcSocket ) { BST_RLS_LOG("BST_SRV_CHNL_CreateSocket error"); enRtnVal = BST_ERR_PAR_UNKNOW; break; } ulTimerId = BST_OS_TimerCreate ( BST_SRV_CHNL_SysTimerExpired, BST_NULL_PTR, BST_SRV_GetChnlCtrlHandle( 0 ) ); BST_SRV_CHNL_InitLink( pstLinkItem, pcSocket, ulTimerId ); pstLinkItem->ulAddrType = BST_DSPP_FLG_ADDTYPE_INET; pstLinkItem->stLink.ulMainLinkId = pstPktItem->ulMainLinkId; pstLinkItem->stLink.ulAuxLinkId = pstPktItem->ulAuxLinkId; BST_SRV_Q_PushToTail( (BST_SRV_CHNL_Q **)&g_lstChnlMng, (BST_SRV_CHNL_Q *)pstLinkItem ); } enRtnVal = BST_SRV_CHNL_Send( pstLinkItem, pstPktItem ); if( BST_ERR_ILLEGAL_PARAM == enRtnVal ) { BST_SRV_Q_RmvItem( (BST_SRV_CHNL_Q **)&g_lstChnlMng, (BST_SRV_CHNL_Q *)pstLinkItem, (BST_SRV_CHNL_Q **)&pstLinkItem2 ); BST_OS_FREE( pstLinkItem ); } return enRtnVal; default: break; } BST_SRV_FreeIpBlock( pstPktItem ); return enRtnVal; }