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

📄 net_sock.c

📁 ucos的tcpip协议占
💻 C
📖 第 1 页 / 共 5 页
字号:
                                                                  void               *p_data,
                                                                  CPU_INT16S          data_len,
                                                                  CPU_INT16S          flags,
                                                                  NET_SOCK_ADDR      *paddr_remote,
                                                                  NET_ERR            *perr);

#if (NET_SOCK_CFG_TYPE_STREAM_EN == DEF_ENABLED)
static  NET_SOCK_RTN_CODE   NetSock_TxDataHandlerStream          (NET_SOCK_ID         sock_id,
                                                                  NET_SOCK           *psock,
                                                                  void               *p_data,
                                                                  CPU_INT16S          data_len,
                                                                  CPU_INT16S          flags,
                                                                  NET_ERR            *perr);
#endif



/*$PAGE*/
                                                                                    /* ---------- SOCK FNCTS ---------- */

static  NET_SOCK           *NetSock_Get                          (NET_ERR            *perr);

#if (NET_SOCK_CFG_TYPE_STREAM_EN == DEF_ENABLED)
static  NET_CONN_ID         NetSock_GetConnTransport             (NET_SOCK           *psock,
                                                                  NET_ERR            *perr);
#endif



static  void                NetSock_CloseHandler                 (NET_SOCK           *psock,
                                                                  CPU_BOOLEAN         close_conn,
                                                                  CPU_BOOLEAN         close_conn_transport);

static  void                NetSock_CloseSock                    (NET_SOCK           *psock,
                                                                  CPU_BOOLEAN         close_conn,
                                                                  CPU_BOOLEAN         close_conn_transport);

static  void                NetSock_CloseSockHandler             (NET_SOCK           *psock,
                                                                  CPU_BOOLEAN         close_conn,
                                                                  CPU_BOOLEAN         close_conn_transport,
                                                                  NET_ERR            *perr);

static  void                NetSock_CloseSockFromClose           (NET_SOCK           *psock);


static  void                NetSock_CloseConn                    (NET_CONN_ID         conn_id);

static  void                NetSock_CloseConnFree                (NET_CONN_ID         conn_id);



static  void                NetSock_Free                         (NET_SOCK           *psock);

static  void                NetSock_FreeHandler                  (NET_SOCK           *psock,
                                                                  NET_ERR            *perr);

static  void                NetSock_FreeAddr                     (NET_SOCK           *psock);

static  void                NetSock_FreeBufQ                     (NET_BUF           **pbuf_q_head,
                                                                  NET_BUF           **pbuf_q_tail);



static  void                NetSock_Clr                          (NET_SOCK           *psock);

#if (NET_SOCK_CFG_TYPE_STREAM_EN == DEF_ENABLED)
static  void                NetSock_Copy                         (NET_SOCK           *psock_dest,
                                                                  NET_SOCK           *psock_src);
#endif

static  void                NetSock_Discard                      (NET_SOCK           *psock);



                                                                                    /* ----- RANDOM PORT Q FNCTS ------ */

static  NET_PORT_NBR        NetSock_RandomPortNbrGet             (NET_ERR            *perr);

static  void                NetSock_RandomPortNbrFree            (NET_PORT_NBR        port_nbr,
                                                                  NET_ERR            *perr);

static  CPU_BOOLEAN         NetSock_RandomPortNbrChkRange        (NET_PORT_NBR        port_nbr);

#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
static  CPU_BOOLEAN         NetSock_RandomPortNbrSrch            (NET_PORT_NBR        port_nbr);
#endif


/*
*********************************************************************************************************
*                                     LOCAL CONFIGURATION ERRORS
*********************************************************************************************************
*/


/*$PAGE*/
/*
*********************************************************************************************************
*                                           NetSock_Init()
*
* Description : (1) Initialize Network Socket Layer :
*
*                   (a) Perform    Socket/OS initialization
*                   (b) Initialize socket pool
*                   (c) Initialize socket table
*                   (d) Initialize random port number queue
*                   (e) Initialize socket statistics & error counters
*
*
* Argument(s) : perr        Pointer to variable that will receive the return error code from this function :
*
*                               NET_SOCK_ERR_NONE                       Socket layer successfully initialized.
*
*                                                                       ----- RETURNED BY NetOS_Sock_Init() : -----
*                               NET_OS_ERR_INIT_SOCK_RX_Q               Socket receive queue(s)
*                                                                           NOT successfully initialized.
*                               NET_OS_ERR_INIT_SOCK_RX_Q_TIMEOUT       Socket receive queue timeout(s)
*                                                                           NOT successfully configured.
*                               NET_OS_ERR_INIT_SOCK_CONN               Socket connection request signal(s)
*                                                                           NOT successfully initialized.
*                               NET_OS_ERR_INIT_SOCK_CONN_TIMEOUT       Socket connection request signal timeout(s)
*                                                                           NOT successfully configured.
*                               NET_OS_ERR_INIT_SOCK_ACCEPT             Socket connection accept  signal(s)
*                                                                           NOT successfully initialized.
*                               NET_OS_ERR_INIT_SOCK_ACCEPT_TIMEOUT     Socket connection accept  signal timeout(s)
*                                                                           NOT successfully configured.
*                               NET_OS_ERR_INIT_SOCK_CLOSE              Socket connection close   signal(s)
*                                                                           NOT successfully initialized.
*                               NET_OS_ERR_INIT_SOCK_CLOSE_TIMEOUT      Socket connection close   signal timeout(s)
*                                                                           NOT successfully configured.
*
* Return(s)   : none.
*
* Caller(s)   : Net_Init().
*
*               This function is an INTERNAL network protocol suite function & MUST NOT be called by 
*               application function(s).
*
* Note(s)     : (2) Socket pool MUST be initialized PRIOR to initializing the pool with pointers to sockets.
*********************************************************************************************************
*/
/*$PAGE*/
void  NetSock_Init (NET_ERR  *perr)
{
    NET_SOCK          *psock;
    NET_PORT_NBR      *pport_nbr_q;
    NET_PORT_NBR       port_nbr_q_nbr;
    NET_SOCK_QTY       i;
    NET_PORT_NBR_QTY   j;
    NET_ERR            stat_err;


                                                                /* --------------- PERFORM SOCK/OS INIT --------------- */
    NetOS_Sock_Init(perr);                                      /* Create sock obj(s).                                  */
    if (*perr != NET_OS_ERR_NONE) {
         return;
    }

                                                                /* --------------- INIT SOCK POOL/STATS --------------- */
    NetSock_PoolPtr = (NET_SOCK *)0;                            /* See Note #2.                                         */

    NetStat_PoolInit((NET_STAT_POOL   *)&NetSock_PoolStat,
                     (NET_STAT_POOL_QTY) NET_SOCK_CFG_NBR_SOCK,
                     (NET_ERR         *)&stat_err);


                                                                /* ------------------ INIT SOCK TBL ------------------- */
    psock = &NetSock_Tbl[0];
    for (i = 0; i < NET_SOCK_CFG_NBR_SOCK; i++) {
        psock->Type   =  NET_SOCK_TYPE_SOCK;                    /* Init each sock type/id--NEVER modify.                */
        psock->ID     = (NET_SOCK_ID)i;

        psock->State  =  NET_SOCK_STATE_FREE;                   /* Init each sock as free/NOT used.                     */
        psock->Flags  =  NET_SOCK_FLAG_NONE;

#if (NET_DBG_CFG_MEM_CLR_EN == DEF_ENABLED)
        NetSock_Clr(psock);
#endif

        psock->NextSockPtr = (void *)NetSock_PoolPtr;           /* Free each sock to sock pool (see Note #2).           */
        NetSock_PoolPtr    =  psock;

        psock++;
    }


                                                                /* -------------- INIT RANDOM PORT NBR Q -------------- */
    pport_nbr_q    = &NetSock_RandomPortNbrQ[0];
    port_nbr_q_nbr =  NET_SOCK_CFG_PORT_NBR_RANDOM_BASE;
    for (j = 0; j < NET_SOCK_PORT_NBR_RANDOM_NBR; j++) {
       *pport_nbr_q = port_nbr_q_nbr;

        port_nbr_q_nbr++;
        pport_nbr_q++;
    }

    NetSock_RandomPortNbrQ_HeadIx  = 0;
    NetSock_RandomPortNbrQ_TailIx  = 0;
    NetSock_RandomPortNbrQ_NbrUsed = 0;


/*$PAGE*/
                                                                /* ------------ INIT SOCK STAT & ERR CTRS ------------- */
#if (NET_CTR_CFG_STAT_EN                 == DEF_ENABLED)
    NetSock_StatRxPktCtr                 =  0;
    NetSock_StatRxPktProcessedCtr        =  0;
#endif


#if (NET_CTR_CFG_ERR_EN                  == DEF_ENABLED)
    NetSock_ErrNullPtrCtr                =  0;
    NetSock_ErrNullSizeCtr               =  0;

    NetSock_ErrNoneAvailCtr              =  0;
    NetSock_ErrNotUsedCtr                =  0;

    NetSock_ErrCloseCtr                  =  0;


    NetSock_ErrInvalidFamilyCtr          =  0;
    NetSock_ErrInvalidProtocolCtr        =  0;
    NetSock_ErrInvalidSockTypeCtr        =  0;
    NetSock_ErrInvalidSockCtr            =  0;

    NetSock_ErrInvalidFlagsCtr           =  0;
    NetSock_ErrInvalidOpCtr              =  0;
    NetSock_ErrInvalidStateCtr           =  0;

    NetSock_ErrInvalidAddrCtr            =  0;
    NetSock_ErrInvalidAddrLenCtr         =  0;
    NetSock_ErrInvalidAddrInUseCtr       =  0;

    NetSock_ErrInvalidPortNbrCtr         =  0;
    NetSock_ErrInvalidConnInUseCtr       =  0;


#if (NET_SOCK_CFG_TYPE_STREAM_EN         == DEF_ENABLED)
    NetSock_ErrConnAcceptQ_NoneAvailCtr  =  0;
#endif

    NetSock_ErrRandomPortNbrNoneAvailCtr =  0;


    NetSock_ErrRxDestCtr                 =  0;
    NetSock_ErrRxPktDiscardedCtr         =  0;


#if  (NET_ERR_CFG_ARG_CHK_EXT_EN         == DEF_ENABLED)
    NetSock_ErrTxInvalidSizeCtr          =  0;
#endif

#if  (NET_ERR_CFG_ARG_CHK_DBG_EN         == DEF_ENABLED)
    NetSock_ErrInvalidTypeCtr            =  0;
    NetSock_ErrInvalidConnCtr            =  0;

    NetSock_ErrRxInvalidBufIxCtr         =  0;

#if (NET_SOCK_CFG_TYPE_STREAM_EN         == DEF_ENABLED)
    NetSock_ErrConnAcceptQ_MaxCtr        =  0;
#endif

    NetSock_ErrRandomPortNbrQ_UsedCtr    =  0;
    NetSock_ErrRandomPortNbrQ_NbrInQ_Ctr =  0;
#endif
#endif


   *perr = NET_SOCK_ERR_NONE;
}


/*$PAGE*/
/*
*********************************************************************************************************
*                                            NetSock_Rx()
*
* Description : (1) Process received socket data & forward to application :
*

⌨️ 快捷键说明

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