534 lines
16 KiB
C
534 lines
16 KiB
C
//------------------------------------------------------------
|
|
// Open Data Services header file: srv.h
|
|
// Copyright (c) 1989, 1990, 1991, 1997 by Microsoft Corp.
|
|
//
|
|
|
|
// Avoid double inclusion
|
|
#ifndef _ODS_SRV_H_
|
|
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
|
|
#define _ODS_SRV_H_
|
|
|
|
#include "windows.h"
|
|
|
|
// ODS uses pack(4) on all CPU types
|
|
#pragma pack(4)
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// define model
|
|
#if !defined( FAR )
|
|
#define FAR far
|
|
#endif
|
|
|
|
//------------------------------------------------------------
|
|
// Formats of data types
|
|
#if !defined(DBTYPEDEFS) // Do not conflict with DBLIB definitions
|
|
#if !defined(MAXNUMERICLEN) // Do not conflict with ODBC definitions
|
|
|
|
#define DBTYPEDEFS
|
|
|
|
typedef unsigned char DBBOOL;
|
|
typedef unsigned char DBBYTE;
|
|
typedef unsigned char DBTINYINT;
|
|
typedef short DBSMALLINT;
|
|
typedef unsigned short DBUSMALLINT;
|
|
typedef long DBINT;
|
|
typedef char DBCHAR;
|
|
typedef unsigned char DBBINARY;
|
|
typedef unsigned char DBBIT;
|
|
typedef double DBFLT8;
|
|
|
|
typedef struct srv_datetime
|
|
{ // Format for SRVDATETIME
|
|
long dtdays; // number of days since 1/1/1900
|
|
unsigned long dttime; // number 300th second since mid
|
|
} DBDATETIME;
|
|
|
|
typedef struct srv_money
|
|
{ // Format for SRVMONEY
|
|
long mnyhigh;
|
|
unsigned long mnylow;
|
|
} DBMONEY;
|
|
|
|
typedef float DBFLT4;
|
|
typedef long DBMONEY4;
|
|
|
|
typedef struct dbdatetime4
|
|
{ // Format for SRVDATETIM4
|
|
unsigned short numdays; // number of days since 1/1/1900
|
|
unsigned short nummins; // number of minutes sicne midnight
|
|
} DBDATETIM4;
|
|
|
|
#define MAXNUMERICLEN 16
|
|
typedef struct dbnumeric
|
|
{ // Format for SRVNUMERIC,SRVNUMERICN,SRVDECIMAL,SRVDECIMALN
|
|
BYTE precision;
|
|
BYTE scale;
|
|
BYTE sign;
|
|
BYTE val[MAXNUMERICLEN];
|
|
} DBNUMERIC;
|
|
typedef DBNUMERIC DBDECIMAL;
|
|
|
|
#endif // #if !defined(MAXNUMERICLEN)
|
|
#endif // #if !defined( DBTYPEDEFS )
|
|
|
|
//------------------------------------------------------------
|
|
// Constants used by APIs
|
|
|
|
// Type Tokens
|
|
#define SRV_TDS_NULL (BYTE) 0x1f
|
|
#define SRV_TDS_TEXT (BYTE) 0x23
|
|
#define SRV_TDS_GUID (BYTE) 0x24
|
|
#define SRV_TDS_VARBINARY (BYTE) 0x25
|
|
#define SRV_TDS_INTN (BYTE) 0x26
|
|
#define SRV_TDS_VARCHAR (BYTE) 0x27
|
|
#define SRV_TDS_BINARY (BYTE) 0x2d
|
|
#define SRV_TDS_IMAGE (BYTE) 0x22
|
|
#define SRV_TDS_CHAR (BYTE) 0x2f
|
|
#define SRV_TDS_INT1 (BYTE) 0x30
|
|
#define SRV_TDS_BIT (BYTE) 0x32
|
|
#define SRV_TDS_INT2 (BYTE) 0x34
|
|
#define SRV_TDS_DECIMAL (BYTE) 0x37
|
|
#define SRV_TDS_INT4 (BYTE) 0x38
|
|
#define SRV_TDS_DATETIM4 (BYTE) 0x3a
|
|
#define SRV_TDS_FLT4 (BYTE) 0x3b
|
|
#define SRV_TDS_MONEY (BYTE) 0x3c
|
|
#define SRV_TDS_DATETIME (BYTE) 0x3d
|
|
#define SRV_TDS_FLT8 (BYTE) 0x3e
|
|
#define SRV_TDS_NUMERIC (BYTE) 0x3f
|
|
#define SRV_TDS_NTEXT (BYTE) 0x63
|
|
#define SRV_TDS_BITN (BYTE) 0x68
|
|
#define SRV_TDS_DECIMALN (BYTE) 0x6a
|
|
#define SRV_TDS_NUMERICN (BYTE) 0x6c
|
|
#define SRV_TDS_FLTN (BYTE) 0x6d
|
|
#define SRV_TDS_MONEYN (BYTE) 0x6e
|
|
#define SRV_TDS_DATETIMN (BYTE) 0x6f
|
|
#define SRV_TDS_MONEY4 (BYTE) 0x7a
|
|
#define SRV_TDS_BIGVARBINARY (BYTE) 0xA5
|
|
#define SRV_TDS_BIGVARCHAR (BYTE) 0xA7
|
|
#define SRV_TDS_BIGBINARY (BYTE) 0xAD
|
|
#define SRV_TDS_BIGCHAR (BYTE) 0xAF
|
|
#define SRV_TDS_NVARCHAR (BYTE) 0xe7
|
|
#define SRV_TDS_NCHAR (BYTE) 0xef
|
|
|
|
// Datatypes
|
|
// Also: values of symbol parameter to srv_symbol when type = SRV_DATATYPE
|
|
#define SRVNULL SRV_TDS_NULL
|
|
#define SRVTEXT SRV_TDS_TEXT
|
|
#define SRVGUID SRV_TDS_GUID
|
|
#define SRVVARBINARY SRV_TDS_VARBINARY
|
|
#define SRVINTN SRV_TDS_INTN
|
|
#define SRVVARCHAR SRV_TDS_VARCHAR
|
|
#define SRVBINARY SRV_TDS_BINARY
|
|
#define SRVIMAGE SRV_TDS_IMAGE
|
|
#define SRVCHAR SRV_TDS_CHAR
|
|
#define SRVINT1 SRV_TDS_INT1
|
|
#define SRVBIT SRV_TDS_BIT
|
|
#define SRVINT2 SRV_TDS_INT2
|
|
#define SRVDECIMAL SRV_TDS_DECIMAL
|
|
#define SRVINT4 SRV_TDS_INT4
|
|
#define SRVDATETIM4 SRV_TDS_DATETIM4
|
|
#define SRVFLT4 SRV_TDS_FLT4
|
|
#define SRVMONEY SRV_TDS_MONEY
|
|
#define SRVDATETIME SRV_TDS_DATETIME
|
|
#define SRVFLT8 SRV_TDS_FLT8
|
|
#define SRVNUMERIC SRV_TDS_NUMERIC
|
|
#define SRVNTEXT SRV_TDS_NTEXT
|
|
#define SRVBITN SRV_TDS_BITN
|
|
#define SRVDECIMALN SRV_TDS_DECIMALN
|
|
#define SRVNUMERICN SRV_TDS_NUMERICN
|
|
#define SRVFLTN SRV_TDS_FLTN
|
|
#define SRVMONEYN SRV_TDS_MONEYN
|
|
#define SRVDATETIMN SRV_TDS_DATETIMN
|
|
#define SRVMONEY4 SRV_TDS_MONEY4
|
|
#define SRVBIGVARBINARY SRV_TDS_BIGVARBINARY
|
|
#define SRVBIGVARCHAR SRV_TDS_BIGVARCHAR
|
|
#define SRVBIGBINARY SRV_TDS_BIGBINARY
|
|
#define SRVBIGCHAR SRV_TDS_BIGCHAR
|
|
#define SRVNVARCHAR SRV_TDS_NVARCHAR
|
|
#define SRVNCHAR SRV_TDS_NCHAR
|
|
|
|
// values for srv_symbol type parameter
|
|
#define SRV_ERROR 0
|
|
#define SRV_DONE 1
|
|
#define SRV_DATATYPE 2
|
|
#define SRV_EVENT 4
|
|
|
|
// values for srv_symbol symbol parameter, when type = SRV_ERROR
|
|
#define SRV_ENO_OS_ERR 0
|
|
#define SRV_INFO 1
|
|
#define SRV_FATAL_PROCESS 10
|
|
#define SRV_FATAL_SERVER 19
|
|
|
|
// Types of server events
|
|
// Also: values for srv_symbol symbol parameter, when type = SRV_EVENT
|
|
#define SRV_CONTINUE 0
|
|
#define SRV_LANGUAGE 1
|
|
#define SRV_CONNECT 2
|
|
#define SRV_RPC 3
|
|
#define SRV_RESTART 4
|
|
#define SRV_DISCONNECT 5
|
|
#define SRV_ATTENTION 6
|
|
#define SRV_SLEEP 7
|
|
#define SRV_START 8
|
|
#define SRV_STOP 9
|
|
#define SRV_EXIT 10
|
|
#define SRV_CANCEL 11
|
|
#define SRV_SETUP 12
|
|
#define SRV_CLOSE 13
|
|
#define SRV_PRACK 14
|
|
#define SRV_PRERROR 15
|
|
#define SRV_ATTENTION_ACK 16
|
|
#define SRV_CONNECT_V7 16 // TDS type for TDS 7 clients. Overloaded with SRV_ATTENTION_ACK
|
|
#define SRV_SKIP 17
|
|
#define SRV_TRANSMGR 18
|
|
#define SRV_OLEDB 20
|
|
#define SRV_INTERNAL_HANDLER 99
|
|
#define SRV_PROGRAMMER_DEFINED 100
|
|
|
|
// values for srv_config option parameter
|
|
#define SRV_CONNECTIONS 1
|
|
#define SRV_LOGFILE 2
|
|
#define SRV_STACKSIZE 3
|
|
#define SRV_REMOTE_ACCESS 7
|
|
#define SRV_REMOTE_CONNECTIONS 9
|
|
#define SRV_MAX_PACKETS 10
|
|
#define SRV_MAXWORKINGTHREADS 11
|
|
#define SRV_MINWORKINGTHREADS 12
|
|
#define SRV_THREADTIMEOUT 13
|
|
#define SRV_MAX_PACKETSIZE 17
|
|
#define SRV_THREADPRIORITY 18
|
|
#define SRV_ANSI_CODEPAGE 19
|
|
#define SRV_DEFAULT_PACKETSIZE 26
|
|
#define SRV_PASSTHROUGH 27
|
|
|
|
// vlaues for srv_config value parameter when option = SRV_THREADPRIORITY
|
|
#define SRV_PRIORITY_LOW THREAD_PRIORITY_LOWEST
|
|
#define SRV_PRIORITY_NORMAL THREAD_PRIORITY_NORMAL
|
|
#define SRV_PRIORITY_HIGH THREAD_PRIORITY_HIGHEST
|
|
#define SRV_PRIORITY_CRITICAL THREAD_PRIORITY_TIME_CRITICAL
|
|
|
|
// values for srv_sfield field parameter
|
|
#define SRV_SERVERNAME 0
|
|
#define SRV_VERSION 6
|
|
|
|
// Length to indicate string is null terminated
|
|
#define SRV_NULLTERM -1
|
|
|
|
// values of msgtype parameter to srv_sendmsg
|
|
#define SRV_MSG_INFO 1
|
|
#define SRV_MSG_ERROR 2
|
|
|
|
// values of status parameter to srv_senddone
|
|
// Also: values for symbol parameters to srv_symbol when type = SRV_DONE
|
|
#define SRV_DONE_FINAL (USHORT) 0x0000
|
|
#define SRV_DONE_MORE (USHORT) 0x0001
|
|
#define SRV_DONE_ERROR (USHORT) 0x0002
|
|
#define SRV_DONE_COUNT (USHORT) 0x0010
|
|
#define SRV_DONE_RPC_IN_BATCH (USHORT) 0x0080
|
|
|
|
// return values of srv_paramstatus
|
|
#define SRV_PARAMRETURN 0x0001
|
|
#define SRV_PARAMDEFAULT 0x0002
|
|
|
|
// return values of srv_rpcoptions
|
|
#define SRV_RECOMPILE 0x0001
|
|
#define SRV_NOMETADATA 0x0002
|
|
|
|
// values of field parameter to srv_pfield
|
|
//#define SRV_LANGUAGE 1 already defined above
|
|
//#define SRV_EVENT 4 already defined above
|
|
#define SRV_SPID 10
|
|
#define SRV_NETSPID 11
|
|
#define SRV_TYPE 12
|
|
#define SRV_STATUS 13
|
|
#define SRV_RMTSERVER 14
|
|
#define SRV_HOST 15
|
|
#define SRV_USER 16
|
|
#define SRV_PWD 17
|
|
#define SRV_CPID 18
|
|
#define SRV_APPLNAME 19
|
|
#define SRV_TDS 20
|
|
#define SRV_CLIB 21
|
|
#define SRV_LIBVERS 22
|
|
#define SRV_ROWSENT 23
|
|
#define SRV_BCPFLAG 24
|
|
#define SRV_NATLANG 25
|
|
#define SRV_PIPEHANDLE 26
|
|
#define SRV_NETWORK_MODULE 27
|
|
#define SRV_NETWORK_VERSION 28
|
|
#define SRV_NETWORK_CONNECTION 29
|
|
#define SRV_LSECURE 30
|
|
#define SRV_SAXP 31
|
|
#define SRV_UNICODE_USER 33
|
|
#define SRV_UNICODE_PWD 35
|
|
#define SRV_SPROC_CODEPAGE 36
|
|
|
|
// return value of SRV_TDSVERSION macro
|
|
#define SRV_TDS_NONE 0
|
|
#define SRV_TDS_2_0 1
|
|
#define SRV_TDS_3_4 2
|
|
#define SRV_TDS_4_2 3
|
|
#define SRV_TDS_6_0 4
|
|
#define SRV_TDS_7_0 5
|
|
|
|
// Return values from APIs
|
|
typedef int SRVRETCODE; // SUCCEED or FAIL
|
|
#ifndef ODBCVER
|
|
typedef int RETCODE;
|
|
#endif
|
|
|
|
#if !defined( SUCCEED )
|
|
#define SUCCEED 1 // Successful return value
|
|
#endif
|
|
|
|
#if !defined( FAIL )
|
|
#define FAIL 0 // Unsuccessful return value
|
|
#endif
|
|
|
|
#define SRV_DUPLICATE_HANDLER 2 // additional return value for srv_pre/post_handle
|
|
|
|
//------------------------------------------------
|
|
//PreDeclare structures
|
|
//
|
|
struct srv_server;
|
|
typedef struct srv_server SRV_SERVER;
|
|
|
|
struct srv_config;
|
|
typedef struct srv_config SRV_CONFIG;
|
|
|
|
struct srv_proc;
|
|
typedef struct srv_proc SRV_PROC;
|
|
|
|
//------------------------------------------------
|
|
//------------------------------------------------
|
|
// ODS MACROs & APIs
|
|
|
|
// Describing and sending a result set
|
|
int srv_describe(SRV_PROC*,int,char*,int,long int,long int,long int,long int,void*);
|
|
int srv_setutype(SRV_PROC* srvproc,int column,long int usertype);
|
|
int srv_setcoldata(SRV_PROC* srvproc,int column,void* data);
|
|
int srv_setcollen( SRV_PROC* srvproc,int column,int len);
|
|
int srv_sendrow(SRV_PROC* srvproc );
|
|
int srv_senddone(SRV_PROC* srvproc,USHORT status,USHORT curcmd,long int count);
|
|
|
|
// Dealing with Extended Procedure parameters
|
|
int srv_rpcparams(SRV_PROC*);
|
|
int srv_paraminfo(SRV_PROC*,int,BYTE*,ULONG*,ULONG*,BYTE*,BOOL*);
|
|
int srv_paramsetoutput(SRV_PROC*,int,BYTE*,ULONG,BOOL);
|
|
|
|
void* srv_paramdata(SRV_PROC*,int);
|
|
int srv_paramlen(SRV_PROC*,int);
|
|
int srv_parammaxlen(SRV_PROC*,int);
|
|
int srv_paramtype(SRV_PROC*,int);
|
|
int srv_paramset(SRV_PROC*,int,void*,int);
|
|
|
|
char* srv_paramname(SRV_PROC*,int,int*);
|
|
int srv_paramnumber(SRV_PROC*,char*,int);
|
|
|
|
//--------------------------------------------------------------
|
|
//--------------------------------------------------------------
|
|
// The rest of these APIs are still supported, in SQL Server 7.0,
|
|
// but may not be supported after SQL Server 7.0
|
|
|
|
// MACROs
|
|
#define SRV_GETCONFIG(a) srv_getconfig ( a )
|
|
#define SRV_GETSERVER(a) srv_getserver ( a )
|
|
#define SRV_GOT_ATTENTION(a) srv_got_attention ( a )
|
|
#define SRV_EVENTDATA(a) srv_eventdata ( a )
|
|
#define SRV_IODEAD(a) srv_iodead ( a )
|
|
#define SRV_TDSVERSION(a) srv_tdsversion ( a )
|
|
|
|
SRV_CONFIG* srv_getconfig( SRV_SERVER * server );
|
|
SRV_SERVER* srv_getserver( SRV_PROC * srvproc );
|
|
BOOL srv_got_attention( SRV_PROC * srvproc );
|
|
void* srv_eventdata( SRV_PROC * srvproc );
|
|
|
|
// Memory
|
|
void* srv_alloc(long int ulSize);
|
|
int srv_bmove(void* from,void* to,long int count);
|
|
int srv_bzero( void * location,long int count);
|
|
int srv_free( void * ptr );
|
|
|
|
int srv_config( SRV_CONFIG * config,long int option,char* value,int valuelen);
|
|
SRV_CONFIG * srv_config_alloc( void );
|
|
|
|
|
|
int srv_convert(SRV_PROC*,int,void*,long int,int,void*,long int);
|
|
|
|
int (* srv_errhandle(int (* handler)(SRV_SERVER * server,
|
|
SRV_PROC * srvproc,
|
|
int srverror,
|
|
BYTE severity,
|
|
BYTE state,
|
|
int oserrnum,
|
|
char * errtext,
|
|
int errtextlen,
|
|
char * oserrtext,
|
|
int oserrtextlen)))
|
|
( SRV_SERVER * server,
|
|
SRV_PROC * srvproc,
|
|
int srverror,
|
|
BYTE severity,
|
|
BYTE state,
|
|
int oserrnum,
|
|
char * errtext,
|
|
int errtextlen,
|
|
char * oserrtext,
|
|
int oserrtextlen );
|
|
|
|
int srv_event(SRV_PROC * srvproc,int event,BYTE* data);
|
|
|
|
void* srv_getuserdata( SRV_PROC * srvproc );
|
|
|
|
int srv_getbindtoken(SRV_PROC * srvproc,char* token_buf);
|
|
|
|
int srv_getdtcxact(SRV_PROC * srvproc,void ** ppv);
|
|
|
|
typedef int (* EventHandler)(void*);
|
|
EventHandler srv_handle(SRV_SERVER*,long int,EventHandler);
|
|
|
|
int srv_impersonate_client( SRV_PROC * srvproc );
|
|
|
|
SRV_SERVER* srv_init( SRV_CONFIG * config,
|
|
char * connectname,
|
|
int namelen );
|
|
|
|
BOOL srv_iodead( SRV_PROC * srvproc );
|
|
|
|
long srv_langcpy(SRV_PROC * srvproc,long start,long nbytes,char* buffer);
|
|
long srv_langlen( SRV_PROC * srvproc );
|
|
void* srv_langptr( SRV_PROC *srvproc );
|
|
|
|
int
|
|
srv_log( SRV_SERVER * server,
|
|
BOOL datestamp,
|
|
char * msg,
|
|
int msglen );
|
|
|
|
int srv_paramstatus(SRV_PROC*,int);
|
|
|
|
char* srv_pfield( SRV_PROC * srvproc,int field,int * len );
|
|
|
|
int srv_returnval( SRV_PROC * srvproc,
|
|
char * valuename,
|
|
int len,
|
|
BYTE status,
|
|
long int type,
|
|
long int maxlen,
|
|
long int datalen,
|
|
void * value );
|
|
|
|
int srv_revert_to_self( SRV_PROC * srvproc );
|
|
|
|
char* srv_rpcdb(SRV_PROC* srvproc,int* len );
|
|
char* srv_rpcname(SRV_PROC * srvproc,int* len );
|
|
int srv_rpcnumber( SRV_PROC * srvproc );
|
|
USHORT srv_rpcoptions( SRV_PROC * srvproc );
|
|
char* srv_rpcowner( SRV_PROC * srvproc,int * len );
|
|
|
|
int srv_run( SRV_SERVER * server );
|
|
|
|
int
|
|
srv_sendmsg( SRV_PROC * srvproc,
|
|
int msgtype,
|
|
long int msgnum,
|
|
BYTE msgclass,
|
|
BYTE state,
|
|
char * rpcname,
|
|
int rpcnamelen,
|
|
USHORT linenum,
|
|
char * message,
|
|
int msglen );
|
|
|
|
int
|
|
srv_ansi_sendmsg( SRV_PROC * srvproc,
|
|
int msgtype,
|
|
long int msgnum,
|
|
BYTE msgclass,
|
|
BYTE state,
|
|
char * rpcname,
|
|
int rpcnamelen,
|
|
USHORT linenum,
|
|
char * message,
|
|
int msglen );
|
|
|
|
int srv_sendstatus( SRV_PROC * srvproc,long int status );
|
|
|
|
|
|
int srv_setuserdata(SRV_PROC* srvproc,void* ptr);
|
|
|
|
|
|
char* srv_sfield( SRV_SERVER * server,int field,int* len);
|
|
|
|
char* srv_symbol(int type,int symbol,int* len);
|
|
|
|
int srv_tdsversion(SRV_PROC* srvproc);
|
|
|
|
int srv_writebuf(SRV_PROC* srvproc, void* ptr, WORD count);
|
|
|
|
BOOL srv_willconvert(int srctype,int desttype );
|
|
|
|
void srv_ackattention( SRV_PROC * srvproc );
|
|
|
|
int srv_terminatethread( SRV_PROC * srvproc );
|
|
|
|
int srv_sendstatistics( SRV_PROC * srvproc );
|
|
|
|
int srv_clearstatistics( SRV_PROC * srvproc );
|
|
|
|
int srv_setevent( SRV_SERVER * server, int event);
|
|
|
|
int srv_message_handler( SRV_PROC * srvproc,
|
|
int errornum,
|
|
BYTE severity,
|
|
BYTE state,
|
|
int oserrnum,
|
|
char * errtext,
|
|
int errtextlen,
|
|
char * oserrtext,
|
|
int oserrtextlen );
|
|
|
|
int srv_pre_handle( SRV_SERVER * server,
|
|
SRV_PROC * srvproc,
|
|
long int event,
|
|
EventHandler handler,
|
|
BOOL remove );
|
|
int srv_post_handle( SRV_SERVER * server,
|
|
SRV_PROC * srvproc,
|
|
long int event,
|
|
EventHandler handler,
|
|
BOOL remove );
|
|
|
|
int srv_post_completion_queue( SRV_PROC * srvproc,
|
|
char * inbuf,
|
|
int inbuflen );
|
|
|
|
int srv_IgnoreAnsiToOem( SRV_PROC * srvproc,BOOL bTF);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#pragma pack()
|
|
|
|
#define SS_MAJOR_VERSION 7
|
|
#define SS_MINOR_VERSION 00
|
|
#define SS_LEVEL_VERSION 0000
|
|
#define SS_MINIMUM_VERSION "7.00.00.0000"
|
|
#define ODS_VERSION ((SS_MAJOR_VERSION << 24) | (SS_MINOR_VERSION << 16))
|
|
|
|
#pragma option pop /*P_O_Pop*/
|
|
#endif //_ODS_SRV_H_
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
// Suggested implementation of __GetXpVersion
|
|
//
|
|
//__declspec(dllexport) ULONG __GetXpVersion()
|
|
// {
|
|
// return ODS_VERSION;
|
|
// }
|
|
//////////////////////////////////////////////////////////////////
|