/**********************************************************************/
/**                       Microsoft Windows NT                       **/
/**                Copyright(c) Microsoft Corp., 1993                **/
/**********************************************************************/

/*
    cons.hxx

    This file contains the global constant definitions for the
    FTPD Service.


    FILE HISTORY:
        KeithMo     07-Mar-1993 Created.
        MuraliK     28-Mar-1995 Moved out the Behaviour flags to USER_DATA
                                     definition

*/


#ifndef _CONS_HXX_
#define _CONS_HXX_


//
//  Maximum length of command from control socket.
//

#define MAX_COMMAND_LENGTH              512             // characters


//
//  Maximum length of a reply sent to the FTP client.
//

#define MAX_REPLY_LENGTH                1024            // characters


//
//  Maximum length of a user name.  This must be long enough to
//  hold a name of the form domain\user, where "domain" is a maximum
//  length domain name, and "user" is a maximum length user name.
//

#define MAX_USERNAME_LENGTH             (DNLEN+UNLEN+1) // characters

//
// timeout for sends
//

#define FTP_DEF_SEND_TIMEOUT            30
#define FTP_DEF_RECV_TIMEOUT            600

//
//  Valid bits for read/write access masks.  There is
//  one bit per dos drive (A-Z).
//

#define VALID_DOS_DRIVE_MASK    ((DWORD)( ( 1 << 26 ) - 1 ))


//
//  Make statistics a little easier.
//

#define INCREMENT_COUNTER(name)                                        \
            InterlockedIncrement((LPLONG)&name)

#define INCR_STAT_COUNTER( name)                                       \
            INCREMENT_COUNTER( g_FtpStatistics.name)

#define DECREMENT_COUNTER(name)                                        \
            InterlockedDecrement((LPLONG) &name)

#define DECR_STAT_COUNTER( name)                                       \
            DECREMENT_COUNTER( g_FtpStatistics.name)

#define UPDATE_LARGE_COUNTER(name,increment)                           \
            if( 1 ) {                                                  \
                EnterCriticalSection( &g_StatisticsLock );             \
                g_FtpStatistics.name.QuadPart += (LONGLONG)(increment);\
                LeaveCriticalSection( &g_StatisticsLock );             \
            } else

//
//  Make locking & unlocking the TSVC_INFO structure a bit prettier.
//

#define READ_LOCK_TSVC()        g_pTsvcInfo->LockThisForRead()
#define WRITE_LOCK_TSVC()       g_pTsvcInfo->LockThisForWrite()
#define UNLOCK_TSVC()           g_pTsvcInfo->UnlockThis()

#define READ_LOCK_INST()        g_pInstance->LockThisForRead()
#define WRITE_LOCK_INST()       g_pInstance->LockThisForWrite()
#define UNLOCK_INST()           g_pInstance->UnlockThis()

#define LockAdminForRead()      READ_LOCK_TSVC()
#define LockAdminForWrite()     WRITE_LOCK_TSVC()
#define UnlockAdmin()           UNLOCK_TSVC()


//
//  Map an FTP connection port number to the related data port number.
//

#define CONN_PORT_TO_DATA_PORT(port)                                    \
            (PORT)htons( (u_short)( ( (u_short) ntohs(port) ) - 1 ) )



#endif  // _CONS_HXX_