#ifndef LIP_OPCUA_SERVER_CFG_DEFS_H
#define LIP_OPCUA_SERVER_CFG_DEFS_H

#include "lip/lip_cfg_defs.h"

#ifdef LIP_CFG_OPCUA_SERVER_ENABLE
    #define LIP_OPCUA_SERVER_ENABLE                 LIP_CFG_OPCUA_SERVER_ENABLE
#else
    #define LIP_OPCUA_SERVER_ENABLE                 0
#endif

#ifdef LIP_CFG_OPCUA_SERVER_AUTO_START_ENABLE
    #define LIP_OPCUA_SERVER_AUTO_START_ENABLE      LIP_CFG_OPCUA_SERVER_AUTO_START_ENABLE
#else
    #define LIP_OPCUA_SERVER_AUTO_START_ENABLE      LIP_OPCUA_SERVER_ENABLE
#endif




#ifdef LIP_CFG_OPCUA_SERVER_WAIT_HELLO_TOUT
    #define LIP_OPCUA_SERVER_WAIT_HELLO_TOUT        LIP_CFG_OPCUA_SERVER_WAIT_HELLO_TOUT
#else
    #define LIP_OPCUA_SERVER_WAIT_HELLO_TOUT        (30*1000)
#endif


#ifdef LIP_CFG_OPCUA_SERVER_BUF_MEM
    #define LIP_OPCUA_SERVER_BUF_MEM(v)             LIP_CFG_OPCUA_SERVER_BUF_MEM(v)
#else
    #define LIP_OPCUA_SERVER_BUF_MEM(v)             LIP_DEFAULT_STATIC_BUF_MEM(v)
#endif




#ifdef LIP_CFG_OPCUA_SERVER_RXMSG_MAX_SIZE
    #define LIP_OPCUA_SERVER_RXMSG_MAX_SIZE         LIP_CFG_OPCUA_SERVER_RXMSG_MAX_SIZE
#else
    #define LIP_OPCUA_SERVER_RXMSG_MAX_SIZE         (8196)
#endif

#ifdef LIP_CFG_OPCUA_SERVER_TXMSG_MAX_SIZE
    #define LIP_OPCUA_SERVER_TXMSG_MAX_SIZE         LIP_CFG_OPCUA_SERVER_TXMSG_MAX_SIZE
#else
    #define LIP_OPCUA_SERVER_TXMSG_MAX_SIZE         8196
#endif


#ifdef LIP_CFG_OPCUA_SERVER_SOCKET_RXBUF_SIZE
    #define LIP_OPCUA_SERVER_SOCKET_RXBUF_SIZE      LIP_CFG_OPCUA_SERVER_SOCKET_RXBUF_SIZE
#else
    #define LIP_OPCUA_SERVER_SOCKET_RXBUF_SIZE      (2*LIP_OPCUA_SERVER_RXMSG_MAX_SIZE)
#endif

#ifdef LIP_CFG_OPCUA_SERVER_SOCKET_TXBUF_SIZE
    #define LIP_OPCUA_SERVER_SOCKET_TXBUF_SIZE      LIP_CFG_OPCUA_SERVER_SOCKET_TXBUF_SIZE
#else
    #define LIP_OPCUA_SERVER_SOCKET_TXBUF_SIZE      (2*LIP_OPCUA_SERVER_TXMSG_MAX_SIZE)
#endif


#ifdef LIP_CFG_OPCUA_SERVER_SESSION_CNT
    #define LIP_OPCUA_SERVER_SESSION_CNT            LIP_CFG_OPCUA_SERVER_SESSION_CNT
#else
    #define LIP_OPCUA_SERVER_SESSION_CNT            8
#endif


#ifdef LIP_CFG_OPCUA_SERVER_SC_CNT
    #define LIP_OPCUA_SERVER_SC_CNT                 LIP_CFG_OPCUA_SERVER_SC_CNT
#else
    #define LIP_OPCUA_SERVER_SC_CNT                 (LIP_OPCUA_SERVER_SESSION_CNT + 1)
#endif

#if LIP_OPCUA_SERVER_ENABLE
    #ifdef LIP_CFG_OPCUA_SERVER_SOCKET_CNT
        #define LIP_OPCUA_SERVER_SOCKET_CNT         LIP_CFG_OPCUA_SERVER_SOCKET_CNT
    #else
        #define LIP_OPCUA_SERVER_SOCKET_CNT         LIP_OPCUA_SERVER_SC_CNT
    #endif
#else
    #define LIP_OPCUA_SERVER_SOCKET_CNT             0
#endif


#ifdef LIP_CFG_OPCUA_SERVER_SC_TOKEN_LIFETIME_MAX
    #define LIP_OPCUA_SERVER_SC_TOKEN_LIFETIME_MAX  LIP_CFG_OPCUA_SERVER_SC_TOKEN_LIFETIME_MAX
#else
    #define LIP_OPCUA_SERVER_SC_TOKEN_LIFETIME_MAX  (60*60*1000)
#endif


#ifdef LIP_CFG_OPCUA_SERVER_EP_MAX_CNT
    #define LIP_OPCUA_SERVER_EP_MAX_CNT             LIP_CFG_OPCUA_SERVER_EP_MAX_CNT
#else
    #define LIP_OPCUA_SERVER_EP_MAX_CNT             1
#endif


#ifdef LIP_CFG_OPCUA_SERVER_SESSION_MAX_TOUT
    #define LIP_OPCUA_SERVER_SESSION_MAX_TOUT       LIP_CFG_OPCUA_SERVER_SESSION_MAX_TOUT
#endif

#ifdef LIP_CFG_OPCUA_SERVER_SUB_MAX_LIFE_CNT
    #define LIP_OPCUA_SERVER_SUB_MAX_LIFE_CNT       LIP_CFG_OPCUA_SERVER_SUB_MAX_LIFE_CNT
#endif

#if LIP_OPCUA_SERVER_ENABLE
    #ifdef LIP_CFG_OPCUA_SERVER_SUBS_ENABLE
        #define LIP_OPCUA_SERVER_SUBS_ENABLE        LIP_CFG_OPCUA_SERVER_SUBSCRIPTION_ENABLE
    #else
        #define LIP_OPCUA_SERVER_SUBS_ENABLE        1
    #endif
#else
    #define LIP_OPCUA_SERVER_SUBS_ENABLE            0
#endif

#ifdef LIP_CFG_OPCUA_SERVER_SESSION_SUBS_MAX_CNT
    #define LIP_OPCUA_SERVER_SESSION_SUBS_MAX_CNT   LIP_CFG_OPCUA_SERVER_SESSION_SUBS_MAX_CNT
#else
    #define LIP_OPCUA_SERVER_SESSION_SUBS_MAX_CNT   4
#endif

#ifdef LIP_CFG_OPCUA_SERVER_MONITEM_MAX_CNT
    #define LIP_OPCUA_SERVER_MONITEM_MAX_CNT        LIP_CFG_OPCUA_SERVER_MONITEM_MAX_CNT
#else
    #define LIP_OPCUA_SERVER_MONITEM_MAX_CNT        128
#endif


#ifdef LIP_CFG_OPCUA_SERVER_SUB_MONITEM_MAX_CNT
    #define LIP_OPCUA_SERVER_SUB_MONITEM_MAX_CNT   LIP_CFG_OPCUA_SERVER_SUB_MONITEM_MAX_CNT
#else
    #define LIP_OPCUA_SERVER_SUB_MONITEM_MAX_CNT   LIP_OPCUA_SERVER_MONITEM_MAX_CNT
#endif


#ifdef LIP_CFG_OPCUA_SERVER_MONITEM_USER_DATA_MAX_SIZE
    #define LIP_OPCUA_SERVER_MONITEM_USER_DATA_MAX_SIZE   LIP_CFG_OPCUA_SERVER_MONITEM_USER_DATA_MAX_SIZE
#else
    #define LIP_OPCUA_SERVER_MONITEM_USER_DATA_MAX_SIZE   0
#endif

#ifdef LIP_CFG_OPCUA_SERVER_SUB_MIN_PUB_INTERVAL_MS
    #define LIP_OPCUA_SERVER_SUB_MIN_PUB_INTERVAL_MS    LIP_CFG_OPCUA_SERVER_SUB_MIN_PUB_INTERVAL_MS
#else
    #define LIP_OPCUA_SERVER_SUB_MIN_PUB_INTERVAL_MS    100
#endif


#ifdef LIP_CFG_OPCUA_SERVER_SESSION_PUBREQ_MAX_CNT
    #define LIP_OPCUA_SERVER_SESSION_PUBREQ_MAX_CNT     LIP_CFG_OPCUA_SERVER_SESSION_PUBREQ_MAX_CNT
#else
    #define LIP_OPCUA_SERVER_SESSION_PUBREQ_MAX_CNT     32
#endif


#ifdef LIP_CFG_OPCUA_SERVER_SUB_KEEPALIVE_MAX_CNT
    #define LIP_OPCUA_SERVER_SUB_KEEPALIVE_MAX_CNT      LIP_CFG_OPCUA_SERVER_SUB_KEEPALIVE_MAX_CNT
#else
    #define LIP_OPCUA_SERVER_SUB_KEEPALIVE_MAX_CNT      255
#endif





#if LIP_OPCUA_SERVER_SUB_KEEPALIVE_MAX_CNT > 255
    #error keepalive more than 255 is not supported
#endif



#ifdef LIP_CFG_OPCUA_SERVER_SESSION_MEM
    #define LIP_OPCUA_SERVER_SESSION_MEM(v)             LIP_CFG_OPCUA_SERVER_SESSION_MEM(v)
#else
    #define LIP_OPCUA_SERVER_SESSION_MEM(v)             LIP_DEFAULT_STATIC_BUF_MEM(v)
#endif

#ifdef LIP_CFG_OPCUA_SERVER_MONITEMS_MEM
    #define LIP_OPCUA_SERVER_MONITEMS_MEM(v)            LIP_CFG_OPCUA_SERVER_MONITEMS_MEM(v)
#else
    #define LIP_OPCUA_SERVER_MONITEMS_MEM(v)            LIP_DEFAULT_STATIC_BUF_MEM(v)
#endif

#ifdef LIP_CFG_OPCUA_SERVER_MONITEMS_QUEUE_ENABLE
    #define LIP_OPCUA_SERVER_MONITEMS_QUEUE_ENABLE      LIP_CFG_OPCUA_SERVER_MONITEMS_QUEUE_ENABLE
#else
    #define LIP_OPCUA_SERVER_MONITEMS_QUEUE_ENABLE      0
#endif

#ifdef LIP_CFG_OPCUA_SERVER_MONITEMS_QUEUE_MAX_SIZE
    #define LIP_OPCUA_SERVER_MONITEMS_QUEUE_MAX_SIZE    LIP_CFG_OPCUA_SERVER_MONITEMS_QUEUE_MAX_SIZE
#else
    #define LIP_OPCUA_SERVER_MONITEMS_QUEUE_MAX_SIZE    256
#endif

#ifdef LIP_CFG_OPCUA_SERVER_MONITEMS_QUEUE_MEM
    #define LIP_OPCUA_SERVER_MONITEMS_QUEUE_MEM(v)      LIP_CFG_OPCUA_SERVER_MONITEMS_QUEUE_MEM(v)
#else
    #define LIP_OPCUA_SERVER_MONITEMS_QUEUE_MEM(v)      LIP_DEFAULT_STATIC_BUF_MEM(v)
#endif


#ifdef LIP_CFG_OPCUA_SERVER_USER_ITEM_MAX_CNT
    #define LIP_OPCUA_SERVER_USER_ITEM_MAX_CNT          LIP_CFG_OPCUA_SERVER_USER_ITEM_MAX_CNT
#else
    #define LIP_OPCUA_SERVER_USER_ITEM_MAX_CNT          64
#endif

#ifdef LIP_CFG_OPCUA_SERVER_ITEM_USER_EXTREFS_MAX_CNT
    #define LIP_OPCUA_SERVER_ITEM_USER_EXTREFS_MAX_CNT  LIP_CFG_OPCUA_SERVER_ITEM_USER_EXTREFS_MAX_CNT
#endif

#ifdef LIP_CFG_OPCUA_SERVER_USER_ITEM_MEM
    #define LIP_OPCUA_SERVER_USER_ITEM_MEM(v)           LIP_CFG_OPCUA_SERVER_USER_ITEM_MEM(v)
#else
    #define LIP_OPCUA_SERVER_USER_ITEM_MEM(v)           LIP_DEFAULT_STATIC_BUF_MEM(v)
#endif


#ifdef LIP_CFG_OPCUA_SERVER_VERSION_STR
    #define LIP_OPCUA_SERVER_VERSION_STR                LIP_CFG_OPCUA_SERVER_VERSION_STR
#endif




#endif // LIP_OPCUA_SERVER_CFG_DEFS_H
