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

📄 srvstruc.h

📁 c语言编程软件vc6.0中文绿色版_vc6.0官方下载
💻 H
📖 第 1 页 / 共 2 页
字号:
//
// Structure related defines
//

#define SRV_SERVBSIZE(a)                            \
            ((WORD)(a->srvio.packetsize) > (WORD)0  \
            ? (WORD)(a->srvio.packetsize)           \
            : (WORD)512)

#define SRV_DEFAULT_SERVBSIZE   512
#define MAX_NETLIBS             16      // Maximum server side net-libs
#define SRV_SERVNETFUNCS	11

#ifdef BRIDGE
  #define SRV_CLIENTNETFUNCS    12
#endif

typedef long (CDECL *LGFARPROC)();

typedef struct srv_handler {
	
  struct srv_handler * previous;
  struct srv_handler * next;
  struct srv_handler * last;
  int (* handler)(void *);

} SRV_HANDLER;

typedef struct srv_pevents {		
	 SRV_HANDLER * srv_attention;
	 SRV_HANDLER * srv_connect;
	 SRV_HANDLER * srv_disconnect;
	 SRV_HANDLER * srv_rpc;
	 SRV_HANDLER * srv_language;
	 SRV_HANDLER * srv_start;
	 SRV_HANDLER * srv_stop;
	 SRV_HANDLER * srv_sleep;
	 SRV_HANDLER * srv_restart;
	 SRV_HANDLER * srv_transmgr;
	 SRV_HANDLER * srv_oledb;
} SRV_PEVENTS;

typedef struct srv_events {
    int (*srv_hndl_attention)(void *);  // ( SRV_PROC   * )
    int (*srv_hndl_connect)(void *);    // ( SRV_PROC   * )
    int (*srv_hndl_disconnect)(void *); // ( SRV_PROC   * )
    int (*srv_hndl_restart)(void *);    // ( SRV_SERVER * )
    int (*srv_hndl_rpc)(void *);        // ( SRV_PROC   * )
    int (*srv_hndl_sleep)(void *);      // ( SRV_SERVER * )
    int (*srv_hndl_language)(void *);   // ( SRV_PROC   * )
    int (*srv_hndl_start)(void *);      // ( SRV_SERVER * )
    int (*srv_hndl_stop)(void *);	// ( SRV_SERVER * )
    int (*srv_hndl_attention_ack)(void *);  // ( SRV_PROC * )
    int (*srv_hndl_transmgr)(void *);	// ( SRV_PROC * )
    int (*srv_hndl_insertexec)(void *);	// ( SRV_PROC * )
    int (*srv_hndl_oledb)(void *);	// ( SRV_PROC * )
} SRV_EVENTS;

typedef struct srv_subchannel {
	struct srv_proc * srvproc;
   HANDLE threadHDL;
   THREAD threadID;
	HANDLE ss_handle;
	HANDLE cs_handle;
	HANDLE hEvent;
	BOOL status;
	struct srv_proc * site_srvproc;
	DWORD index;
	struct srv_proc ** master_list;
} SRV_SUBCHANNEL;

//
// define structures
//

typedef struct translation_info
{
    BOOL flag;                      // data translation flag
    void (*int2)(short*);           // 2-byte integer swap function
    void (*int4)(long*);            // 4-byte integer swap function
    void (*recvflt)(float*);        // receive 8-byte float translation function
    void (*sendflt)(float*);        // send 8-byte float translation function
    void (*recvflt4)(float*);       // receive 4-byte float translation function
    void (*sendflt4)(float*);       // send 4-byte float translation function
    void (*recvchar)(char *, int);  // ASCII translation function
    void (*sendchar)(char *, int);  // ASCII translation function
    void (*twoint4)(char *);        // 2 4-byte integer swap function
    void (*twoint2)(char *);        // 2 2-byte interger swap function
} TRANSLATION_INFO;


typedef struct srv_params
{
    struct srv_server    * server;
    struct srv_proc      * srvproc;
    struct srv_queuehead * queuehead;
    struct srv_comport	 * comport;
    THREAD                 threadID;
    HANDLE                 threadHDL;
} SRV_PARAMS;

#if defined( _MSSQLRISC_)
  #pragma pack(2)
#endif

//  SRV_LOGIN
//     The (TDS 4.0) login record received from the server client at login time.
//

typedef struct srv_loginrec {
    BYTE lhostname[SRV_MAXNAME];    // name of host or generic
    BYTE lhostnlen;         // length of lhostname
    BYTE lusername[SRV_MAXNAME];    // name of user
    BYTE lusernlen;         // length of lusername
    BYTE lpw[SRV_MAXNAME];  // password (plaintext)
    BYTE lpwnlen;           // length of lpw
	BYTE lhostproc[SRV_HOSTIDLEN];	 // host process identification
	BYTE lunused[SRV_MAXNAME-SRV_HOSTIDLEN - 6];	 // unused
    BYTE lapptype [6];	    // Application specific.
    BYTE lhplen;            // length of host process id
    BYTE lint2;             // type of int2 on this host
    BYTE lint4;             // type of int4 on this host
    BYTE lchar;             // type of char
    BYTE lflt;              // type of float
    BYTE ldate;             // type of datetime
    BYTE lusedb;            // notify on exec of use db cmd
    BYTE ldmpld;            // disallow use of dump/load and bulk insert
    BYTE linterface;        // SQL interface type
    BYTE ltype;             // type of network connection
    BYTE spare[7];          // NOTE: Apparently used by System-10
    BYTE lappname[SRV_MAXNAME]; // application name
    BYTE lappnlen;          // length of appl name
    BYTE lservname[SRV_MAXNAME];    // name of server
    BYTE lservnlen;         // length of lservname
    BYTE lrempw[0xff];      // passwords for remote servers
    BYTE lrempwlen;         // length of lrempw
    BYTE ltds[4];           // tds version
    BYTE lprogname[DBPROGNLEN]; // client program name
    BYTE lprognlen;         // length of client program name
    BYTE lprogvers[4];      // client program version
    BYTE lnoshort;          // NEW: auto convert of short datatypes
    BYTE lflt4;             // NEW: type of flt4 on this host
    BYTE ldate4;            // NEW: type of date4 on this host
    BYTE llanguage[SRV_MAXNAME];    // NEW: initial language
    BYTE llanglen;          // NEW: length of language
    BYTE lsetlang;          // NEW: notify on language change
    short slhier;           // NEW: security label hierarchy
    BYTE slcomp[8];         // NEW: security components
    short slspare;          // NEW: security label spare
    BYTE slrole;            // NEW: security login role
    BYTE lcharset[SRV_MAXNAME]; // character set name (unused)
    BYTE lcharsetlen;       // length of character set (unused)
    BYTE lsetcharset;       // notify on character set change (unused)
    BYTE lpacketsize[SRV_PKTLEN]; // length of TDS packets
    BYTE lpacketsizelen;    // length of lpacketsize
    BYTE ldummy[3];         // NEW: pad to longword

} SRV_LOGINREC;

//
//  SRV_LOGIN_OLDTDS
//     The login record received from "old" TDS 2.0 or 3.4 server clients.
//     The format is basically the same as 4.0, it is just shorter (no server
//     name or password, etc appended at the end).
//
typedef struct srv_login_oldtds {
    BYTE lhostname[SRV_MAXNAME];    // name of host or generic
    BYTE lhostnlen;         // length of lhostname
    BYTE lusername[SRV_MAXNAME];    // name of user
    BYTE lusernlen;         // length of lusername
    BYTE lpw[SRV_MAXNAME];  // password (plaintext)
    BYTE lpwnlen;           // length of lpw
    BYTE lhostproc[SRV_MAXNAME];    // host process identification
    BYTE lhplen;            // length of host process id
    BYTE lint2;             // type of int2 on this host
    BYTE lint4;             // type of int4 on this host
    BYTE lchar;             // type of char
    BYTE lflt;              // type of float
    BYTE ldate;             // type of datetime
    BYTE lusedb;            // notify on exec of use db cmd
    BYTE ldmpld;            // disallow use of dump/load and bulk insert
    BYTE linterface;        // SQL interface type
    BYTE spare[8];          // spare fields
    BYTE lappname[SRV_MAXNAME]; // application name
    BYTE lappnlen;          // length of appl name
    BYTE ldummy;         // pad length to even boundary

} SRV_LOGIN_OLDTDS;
#if defined( _MSSQLRISC_)
  #pragma pack()
#endif

// Define structure for ODS statistics

typedef struct srv_stats {
    int NumReads;
    int NumWrites;
} SRV_STATS;



// Define list elements used in queuing
// network request.

typedef struct srv_queuehead {
    struct srv_queuehead * Flink;
    struct srv_queuehead * Blink;
    struct srv_listhead  * ListHead;
} SRV_QUEUEHEAD, *PSRV_QUEUEHEAD;


typedef struct srv_listhead {
    struct srv_listentry * Flink;
    struct srv_listentry * Blink;
    int    NumListEntries;
    int    NumReadRequest;
    int    MaxQueueLength;
    long   ListLock;
    HANDLE ListEvent;
} SRV_LISTHEAD, *PSRV_LISTHEAD;

typedef struct srv_listentry {
    struct srv_listentry * Flink;
    struct srv_listentry * Blink;
    struct srv_proc      * pSrvProc;
} SRV_LISTENTRY, *PSRV_LISTENTRY;

// Define routines to manage list entries.

//
//  VOID
//  InitializeListHead(
//  PSRV_LISTENTRY ListHead
//      );
//

#define InitializeListHead(TYPE, ListHead) (\
    (ListHead)->Flink = (ListHead)->Blink = (TYPE)(ListHead))

//
//  BOOLEAN
//  IsListEmpty(
//  PSRV_LISTENTRY ListHead
//      );
//

#define IsListEmpty(ListHead) (\
    ( ((ListHead)->Flink == (ListHead)) ? TRUE : FALSE ) )

//
//  SRV_LISTENTRY
//  RemoveHeadList(
//  TYPE,
//  TYPE ListHead
//      );
//

#define RemoveHeadList(TYPE,ListHead) \
    (TYPE)(ListHead)->Flink;\
    {\
    TYPE FirstEntry;\
        FirstEntry = (ListHead)->Flink;\
    FirstEntry->Flink->Blink = (TYPE)(ListHead);\
        (ListHead)->Flink = FirstEntry->Flink;\
    }

//
//  VOID
//  RemoveEntryList(
//  PSRV_LISTENTRY Entry
//      );
//

#define RemoveEntryList(Entry) {\
    PSRV_LISTENTRY _EX_Entry;\
        _EX_Entry = (Entry);\
        _EX_Entry->Blink->Flink = _EX_Entry->Flink;\
        _EX_Entry->Flink->Blink = _EX_Entry->Blink;\
    }

//
//  VOID
//  InsertTailList(
//  PSRV_LISTHEAD  ListHead,
//  PSRV_LISTENTRY Entry
//      );
//

#define InsertTailList(ListHead,Entry) \
    (Entry)->Flink = (ListHead);\
    (Entry)->Blink = (ListHead)->Blink;\
    (ListHead)->Blink->Flink = (Entry);\
    (ListHead)->Blink = (Entry);\
    InterlockedIncrement(&(ListHead)->NumListEntries);

//
//  VOID
//  InsertHeadList(
//  PSRV_LISTHEAD  ListHead,
//  PSRV_LISTENTRY Entry
//      );
//

#define InsertHeadList(ListHead,Entry) \
    (Entry)->Flink = (ListHead)->Flink;\
    (Entry)->Blink = (ListHead);\
    (ListHead)->Flink->Blink = (Entry);\
    (ListHead)->Flink = (Entry);\
    InterlockedIncrement(&(ListHead)->NumListEntries);

//
//  VOID
//  InsertHeadQueue(
//  PSRV_QUEUEHEAD  ListHead,
//  PSRV_QUEUEHEAD  Entry
//      );
//

#define InsertHeadQueue(ListHead,Entry) \
    (Entry)->Flink = (ListHead)->Flink;\
    (Entry)->Blink = (ListHead);\
    (ListHead)->Flink->Blink = (Entry);\
    (ListHead)->Flink = (Entry);

//
//  VOID
//  InsertTailQueue(
//  PSRV_QUEUEHEAD  ListHead,
//  PSRV_QUEUEHEAD  Entry
//      );
//

#define InsertTailQueue(ListHead,Entry) \
    (Entry)->Flink = (ListHead);\
    (Entry)->Blink = (ListHead)->Blink;\
    (ListHead)->Blink->Flink = (Entry);\
    (ListHead)->Blink = (Entry);

//
//  VOID
//  RemoveEntryQueue(
//  PSRV_QUEUEHEAD Entry
//      );
//

#define RemoveEntryQueue(Entry) {\
    PSRV_QUEUEHEAD _EX_Entry;\
        _EX_Entry = (Entry);\
        _EX_Entry->Blink->Flink = _EX_Entry->Flink;\
        _EX_Entry->Flink->Blink = _EX_Entry->Blink;\
    }


// Configuration structure.

typedef struct srv_config {
    unsigned  connections;          // maximum allowed client connections
    unsigned  stacksize;            // stack size of new threads created
    BOOL      log_file_open;        // flag indicating log file open
    HANDLE    log_handle;           // handle of openned log file
    char      log_file_name[SRV_MAXFILENAME];    // name of log file
    BOOL      print_recv;           // dump reads to screen
    BOOL      print_send;           // dump sends to screen
    BOOL      remote_access;        // flag indicating remote server access
    unsigned  max_remote_sites;     // simultaneous remote sites accessing
    unsigned  max_remote_connections;   // maximum allowed in/out remote connections
    WORD      numConnectsPerThread; // Number of connections to monitor per network thread
    WORD      MaxWorkingThreads;    // Max number of working threads
    WORD      MinWorkingThreads;    // Min Number of working threads
    WORD      ConcurrentThreads;    // Min Number of working threads
    DWORD     WorkingThreadTimeout; // Time to wait before exiting when idle
    unsigned  max_packets;          // maximum number of network packets buffered
    //
    // Multi Server Side Net-Library support
    //
    WORD      numNetLibs;
    WORD      spare;
    LGFARPROC SSNetLibs[MAX_NETLIBS][SRV_SERVNETFUNCS];         // NetLib Function ptrs
    HANDLE    SSModules[MAX_NETLIBS];                           // NetLib Module handles
    char      connect_names[MAX_NETLIBS][SRV_MAXFILENAME];      // NetLib connection names
    char      connect_dlls[MAX_NETLIBS][SRV_MAXFILENAME];       // NetLib names
    char      connect_versions[MAX_NETLIBS][SRV_MAXFILENAME];   // NetLib versions
    char      server_name[SRV_MAXFILENAME]; // Server name
    BOOL      local_only;           // flag indicating local access only
    BOOL      unpack_rpc;           // flag indicating if RPCs should be unpacked
    unsigned  max_packetsize;       // maximum network packet size
	unsigned  dflt_packetsize;		// The default packet size.

    int       ThreadPriority;  // Priority of thread in class.
    BOOL ansi;	// flag indicating if ANSI codepage is used
    BYTE      tdsversion[4];
    BYTE      progversion[4];
    DWORD     threadaffinity;			// thread affinity option
#ifdef BRIDGE
    HANDLE      CSModule;                       // Client NetLib Module handle
    LGFARPROC   CSNetLib[SRV_CLIENTNETFUNCS];   // NetLib Function ptrs
    char        client_name[SRV_MAXFILENAME];   // Client side name
    BOOL        bAuditConnects;                 // flag indicating if connects should be logged
#endif
} SRV_CONFIG;

//
//  SRV_TDSHDR
//  The first 8 bytes of each network packet constitute the packet

⌨️ 快捷键说明

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