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

📄 net_conn.c

📁 ucos的tcpip协议占
💻 C
📖 第 1 页 / 共 5 页
字号:
/*
*********************************************************************************************************
*                                              uC/TCP-IP
*                                      The Embedded TCP/IP Suite
*
*                          (c) Copyright 2003-2006; Micrium, Inc.; Weston, FL
*
*               All rights reserved.  Protected by international copyright laws.
*
*               uC/TCP-IP is provided in source form for FREE evaluation, for educational
*               use or peaceful research.  If you plan on using uC/TCP-IP in a commercial
*               product you need to contact Micrium to properly license its use in your
*               product.  We provide ALL the source code for your convenience and to help
*               you experience uC/TCP-IP.  The fact that the source code is provided does
*               NOT mean that you can use it without paying a licensing fee.
*
*               Knowledge of the source code may NOT be used to develop a similar product.
*
*               Please help us continue to provide the Embedded community with the finest
*               software available.  Your honesty is greatly appreciated.
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*
*                                    NETWORK CONNECTION MANAGEMENT
*
* Filename      : net_conn.c
* Version       : V1.87
* Programmer(s) : ITJ
*********************************************************************************************************
* Note(s)       : (1) Supports network connections for local & remote addresses of the following :
*
*                     (a) Families :
*                         (1) IPv4 Connections
*                             (A) BSD 4.x Sockets
*
*                     (b) Connection types :
*                         (1) Datagram
*                         (2) Stream
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                            INCLUDE FILES
*********************************************************************************************************
*/

#define    NET_CONN_MODULE
#include  <net.h>


/*
*********************************************************************************************************
*                                               MODULE
*
* Note(s) : (1) See 'net_conn.h  MODULE'.
*********************************************************************************************************
*/

#ifdef  NET_CONN_MODULE_PRESENT


/*$PAGE*/
/*
*********************************************************************************************************
*                                            LOCAL DEFINES
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                           LOCAL CONSTANTS
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                          LOCAL DATA TYPES
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                            LOCAL TABLES
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                       LOCAL GLOBAL VARIABLES
*********************************************************************************************************
*/


/*$PAGE*/
/*
*********************************************************************************************************
*                                      LOCAL FUNCTION PROTOTYPES
*********************************************************************************************************
*/

static  void       NetConn_Close                 (NET_CONN             *pconn);

static  void       NetConn_CloseApp              (NET_CONN             *pconn);

static  void       NetConn_CloseTransport        (NET_CONN             *pconn);


static  void       NetConn_CloseAllConnListConns (NET_CONN            **pconn_list);



static  void       NetConn_FreeHandler           (NET_CONN             *pconn);


static  void       NetConn_Clr                   (NET_CONN             *pconn);

#if (NET_ERR_CFG_ARG_CHK_DBG_EN == DEF_ENABLED)
static  void       NetConn_Discard               (NET_CONN             *pconn);
#endif



static  NET_CONN  *NetConn_ListSrch              (NET_CONN            **pconn_list,
                                                  NET_CONN_LIST_TYPE    conn_list_type,
                                                  CPU_BOOLEAN           sec_srch_addr_reqd,
                                                  CPU_INT08U           *paddr_local,
                                                  CPU_INT08U           *paddr_remote);


static  void       NetConn_ChainInsert           (NET_CONN            **pconn_list,
                                                  NET_CONN             *pconn_chain);

static  void       NetConn_ChainUnlink           (NET_CONN            **pconn_list,
                                                  NET_CONN             *pconn_chain);


static  void       NetConn_Add                   (NET_CONN            **pconn_list,
                                                  NET_CONN             *pconn_chain,
                                                  NET_CONN             *pconn,
                                                  NET_CONN_LIST_TYPE    conn_list_type);

static  void       NetConn_Unlink                (NET_CONN             *pconn);


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


/*$PAGE*/
/*
*********************************************************************************************************
*                                           NetConn_Init()
*
* Description : (1) Initialize Network Connection Management Module :
*
*                   (a) Initialize network connection pool
*                   (b) Initialize network connection table
*                   (c) Initialize network connection lists
*                   (d) Initialize network connection wildcard address(s)
*                   (e) Initialize network connection statistics & error counters
*
*
* Argument(s) : none.
*
* 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) Network connection pool MUST be initialized PRIOR to initializing the pool with 
*                   pointers to network connections.
*
*               (3) Network connection  addresses maintained in network-order.  Therefore, network 
*                   connection wildcard address(es) MUST be configured in network-order.
*
*               (4) Ideally, network connection address configuration comparison(s) would be calculated 
*                   at compile-time.  However, some compilers do NOT allow pre-processor directives to 
*                   include run-time macro's -- e.g. 'sizeof()'.
*********************************************************************************************************
*/
/*$PAGE*/
void  NetConn_Init (void)
{
    NET_CONN            *pconn;
    NET_CONN           **pconn_list;
    NET_CONN_QTY         i;
    NET_CONN_LIST_QTY    j;
    CPU_INT16U           k;
    CPU_INT16U           ix;
    CPU_INT16U           val_len;
    CPU_INT08U           val;
    NET_ERR              stat_err;


                                                                /* ------------- INIT NET CONN POOL/STATS ------------- */
    NetConn_PoolPtr = (NET_CONN *)0;                            /* See Note #2.                                         */

    NetStat_PoolInit((NET_STAT_POOL   *)&NetConn_PoolStat,
                     (NET_STAT_POOL_QTY) NET_CONN_CFG_NBR_CONN,
                     (NET_ERR         *)&stat_err);


                                                                /* ---------------- INIT NET CONN TBL ----------------- */
    pconn = &NetConn_Tbl[0];
    for (i = 0; i < NET_CONN_CFG_NBR_CONN; i++) {
        pconn->Type  =  NET_CONN_TYPE_CONN;                     /* Init each net conn type/id--NEVER modify.            */
        pconn->ID    = (NET_CONN_ID)i;

        pconn->Flags =  NET_CONN_FLAG_NONE;                     /* Init each net conn as NOT used.                      */

#if (NET_DBG_CFG_MEM_CLR_EN == DEF_ENABLED)
        NetConn_Clr(pconn);
#endif

        pconn->NextConnPtr = (void     *)NetConn_PoolPtr;       /* Free each net conn to net conn pool (see Note #2).   */
        NetConn_PoolPtr    = (NET_CONN *)pconn;

        pconn++;
    }


                                                                /* --------------- INIT NET CONN LISTS ---------------- */
                                                                /* Init net conn lists.                                 */
    pconn_list = &NetConn_ServerConnListHead[0];
    for (j = 0; j < NET_CONN_CFG_PROTOCOL_MAX; j++) {
       *pconn_list = (NET_CONN *)0;
        pconn_list++;
    }

    pconn_list = &NetConn_ClientConnListHead[0];
    for (j = 0; j < NET_CONN_CFG_PROTOCOL_MAX; j++) {
       *pconn_list = (NET_CONN *)0;
        pconn_list++;
    }

                                                                /* Init net conn list ptrs.                             */
    NetConn_ConnListChainPtr     = (NET_CONN *)0;
    NetConn_ConnListConnPtr      = (NET_CONN *)0;
    NetConn_ConnListNextChainPtr = (NET_CONN *)0;
    NetConn_ConnListNextConnPtr  = (NET_CONN *)0;



/*$PAGE*/
                                                                /* ----------- INIT NET CONN WILDCARD ADDRS ----------- */
                                                                /* See Note #3.                                         */
    Mem_Clr((void     *)&NetConn_AddrWildCard[0],
            (CPU_SIZE_T) NET_CONN_CFG_ADDR_LEN);

#if (NET_CONN_CFG_FAMILY == NET_CONN_FAMILY_IP_V4_SOCK)
    if (NET_CONN_ADDR_IP_LEN_ADDR <= NET_CONN_CFG_ADDR_LEN) {   /* See Note #4.                                         */
        NetConn_AddrWildCardAvail  = DEF_YES;

        val_len = NET_CONN_ADDR_IP_LEN_ADDR;
        for (k = 0; k < val_len; k++) {
            val                      = (NET_CONN_ADDR_IP_WILD_CARD >> (k * DEF_OCTET_NBR_BITS)) & DEF_OCTET_MASK;
            ix                       =  val_len - k - 1;
            NetConn_AddrWildCard[ix] =  val;
        }

    } else {
        NetConn_AddrWildCardAvail = DEF_NO;
    }


#else
    NetConn_AddrWildCardAvail = DEF_NO;
   (void)&k;                                                    /* Prevent compiler warnings.                           */
   (void)&ix;
   (void)&val;
   (void)&val_len;
#endif



                                                                /* ---------- INIT NET CONN STAT & ERR CTRS ----------- */
#if (NET_CTR_CFG_ERR_EN                  == DEF_ENABLED)
    NetConn_ErrNoneAvailCtr              =  0;
    NetConn_ErrNotUsedCtr                =  0;

    NetConn_ErrCloseCtr                  =  0;

    NetConn_ErrInvalidConnCtr            =  0;
    NetConn_ErrInvalidConnAddrLenCtr     =  0;
    NetConn_ErrInvalidConnAddrInUseCtr   =  0;

    NetConn_ErrInvalidFamilyCtr          =  0;

    NetConn_ErrInvalidListTypeCtr        =  0;
    NetConn_ErrInvalidListIxCtr          =  0;

#if (NET_ERR_CFG_ARG_CHK_DBG_EN          == DEF_ENABLED)

⌨️ 快捷键说明

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