1 //------------------------------------------------------------
2 // Open Data Services header file: srv.h
3 // Copyright (c) Microsoft Corporation. All rights reserved.
4 //
5
6 // Avoid double inclusion
7 #ifndef _ODS_SRV_H_
8 #define _ODS_SRV_H_
9
10 #ifndef COMPILE_FOR_CLR
11 #include "windows.h"
12 #endif
13
14 // ODS uses pack(4) on all CPU types
15 #pragma pack(4)
16
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20
21 // define model
22 #if !defined( FAR )
23 #define FAR far
24 #endif
25
26 //------------------------------------------------------------
27 // Formats of data types
28 #if !defined(DBTYPEDEFS) // Do not conflict with DBLIB definitions
29 #if !defined(MAXNUMERICLEN) // Do not conflict with ODBC definitions
30
31 #define DBTYPEDEFS
32
33 typedef unsigned char DBBOOL;
34 typedef unsigned char DBBYTE;
35 typedef unsigned char DBTINYINT;
36 typedef short DBSMALLINT;
37 typedef unsigned short DBUSMALLINT;
38 typedef long DBINT;
39 typedef char DBCHAR;
40 typedef unsigned char DBBINARY;
41 typedef unsigned char DBBIT;
42 typedef double DBFLT8;
43
44 typedef struct srv_datetime 
45 {    // Format for SRVDATETIME
46       long dtdays;                    // number of days since 1/1/1900
47       unsigned long dttime;     // number 300th second since mid
48 } DBDATETIME;                
49
50 typedef struct srv_money 
51 {        // Format for SRVMONEY
52       long mnyhigh;
53       unsigned long mnylow;
54 } DBMONEY;
55
56 typedef float DBFLT4;
57 typedef long DBMONEY4;
58
59 typedef struct dbdatetime4 
60 {    // Format for SRVDATETIM4
61       unsigned short numdays; // number of days since 1/1/1900
62       unsigned short nummins; // number of minutes sicne midnight
63 } DBDATETIM4;
64
65 #define MAXNUMERICLEN    16
66 typedef struct dbnumeric    
67 {    // Format for SRVNUMERIC,SRVNUMERICN,SRVDECIMAL,SRVDECIMALN
68     BYTE precision;
69     BYTE scale;
70     BYTE sign;
71     BYTE val[MAXNUMERICLEN];
72 } DBNUMERIC;
73 typedef DBNUMERIC DBDECIMAL;
74
75 #endif  // #if !defined(MAXNUMERICLEN)
76 #endif  // #if !defined( DBTYPEDEFS )
77
78 //------------------------------------------------------------
79 // Constants used by APIs
80
81 // Type Tokens
82 #define SRV_TDS_NULL                  (BYTE) 0x1f
83 #define SRV_TDS_TEXT                  (BYTE) 0x23
84 #define SRV_TDS_GUID                  (BYTE) 0x24
85 #define SRV_TDS_VARBINARY          (BYTE) 0x25
86 #define SRV_TDS_INTN                  (BYTE) 0x26
87 #define SRV_TDS_VARCHAR             (BYTE) 0x27
88 #define SRV_TDS_BINARY               (BYTE) 0x2d
89 #define SRV_TDS_IMAGE                (BYTE) 0x22
90 #define SRV_TDS_CHAR                  (BYTE) 0x2f
91 #define SRV_TDS_INT1                  (BYTE) 0x30
92 #define SRV_TDS_BIT                    (BYTE) 0x32
93 #define SRV_TDS_INT2                  (BYTE) 0x34
94 #define SRV_TDS_DECIMAL             (BYTE) 0x37
95 #define SRV_TDS_INT4                  (BYTE) 0x38
96 #define SRV_TDS_DATETIM4           (BYTE) 0x3a
97 #define SRV_TDS_FLT4                  (BYTE) 0x3b
98 #define SRV_TDS_MONEY                (BYTE) 0x3c
99 #define SRV_TDS_DATETIME           (BYTE) 0x3d
100 #define SRV_TDS_FLT8                  (BYTE) 0x3e
101 #define SRV_TDS_NUMERIC             (BYTE) 0x3f
102 #define SRV_TDS_SSVARIANT          (BYTE) 0x62
103 #define SRV_TDS_NTEXT             (BYTE) 0x63
104 #define SRV_TDS_BITN             (BYTE) 0x68
105 #define SRV_TDS_DECIMALN           (BYTE) 0x6a
106 #define SRV_TDS_NUMERICN           (BYTE) 0x6c
107 #define SRV_TDS_FLTN                  (BYTE) 0x6d
108 #define SRV_TDS_MONEYN               (BYTE) 0x6e
109 #define SRV_TDS_DATETIMN           (BYTE) 0x6f
110 #define SRV_TDS_MONEY4               (BYTE) 0x7a
111 #define SRV_TDS_INT8                  (BYTE) 0x7f
112 #define SRV_TDS_BIGVARBINARY     (BYTE) 0xA5
113 #define SRV_TDS_BIGVARCHAR        (BYTE) 0xA7
114 #define SRV_TDS_BIGBINARY          (BYTE) 0xAD
115 #define SRV_TDS_BIGCHAR             (BYTE) 0xAF
116 #define SRV_TDS_NVARCHAR         (BYTE) 0xe7
117 #define SRV_TDS_NCHAR             (BYTE) 0xef
118
119 // Datatypes
120 // Also: values of symbol parameter to srv_symbol when type = SRV_DATATYPE
121 #define SRVNULL             SRV_TDS_NULL
122 #define SRVTEXT             SRV_TDS_TEXT
123 #define SRVGUID             SRV_TDS_GUID
124 #define SRVVARBINARY     SRV_TDS_VARBINARY
125 #define SRVINTN             SRV_TDS_INTN
126 #define SRVVARCHAR        SRV_TDS_VARCHAR
127 #define SRVBINARY          SRV_TDS_BINARY
128 #define SRVIMAGE           SRV_TDS_IMAGE
129 #define SRVCHAR             SRV_TDS_CHAR
130 #define SRVINT1             SRV_TDS_INT1
131 #define SRVBIT               SRV_TDS_BIT
132 #define SRVINT2             SRV_TDS_INT2
133 #define SRVDECIMAL         SRV_TDS_DECIMAL
134 #define SRVINT4             SRV_TDS_INT4
135 #define SRVDATETIM4      SRV_TDS_DATETIM4
136 #define SRVFLT4             SRV_TDS_FLT4      
137 #define SRVMONEY           SRV_TDS_MONEY
138 #define SRVDATETIME      SRV_TDS_DATETIME
139 #define SRVFLT8             SRV_TDS_FLT8
140 #define SRVNUMERIC         SRV_TDS_NUMERIC
141 #define SRVSSVARIANT     SRV_TDS_SSVARIANT
142 #define SRVNTEXT         SRV_TDS_NTEXT
143 #define SRVBITN             SRV_TDS_BITN
144 #define SRVDECIMALN         SRV_TDS_DECIMALN
145 #define SRVNUMERICN         SRV_TDS_NUMERICN
146 #define SRVFLTN             SRV_TDS_FLTN
147 #define SRVMONEYN          SRV_TDS_MONEYN
148 #define SRVDATETIMN      SRV_TDS_DATETIMN
149 #define SRVMONEY4          SRV_TDS_MONEY4
150 #define SRVINT8             SRV_TDS_INT8  
151 #define SRVBIGVARBINARY SRV_TDS_BIGVARBINARY
152 #define SRVBIGVARCHAR  SRV_TDS_BIGVARCHAR
153 #define SRVBIGBINARY     SRV_TDS_BIGBINARY
154 #define SRVBIGCHAR        SRV_TDS_BIGCHAR
155 #define SRVNVARCHAR         SRV_TDS_NVARCHAR
156 #define SRVNCHAR         SRV_TDS_NCHAR
157
158 // values for srv_symbol type parameter
159 #define SRV_ERROR          0
160 #define SRV_DONE           1
161 #define SRV_DATATYPE     2
Lines 162 ... 171 are skipped.
172 #define SRV_CONTINUE           0
173 #define SRV_LANGUAGE           1
174 #define SRV_CONNECT             2
175 #define SRV_RPC                    3
176 #define SRV_RESTART             4
177 #define SRV_DISCONNECT        5
178 #define SRV_ATTENTION          6
179 #define SRV_SLEEP                7
180 #define SRV_START                8
181 #define SRV_STOP                  9
182 #define SRV_EXIT                  10
183 #define SRV_CANCEL               11
184 #define SRV_SETUP                12
185 #define SRV_CLOSE                13
186 #define SRV_PRACK                14
187 #define SRV_PRERROR             15
188 #define SRV_ATTENTION_ACK  16
189 #define SRV_CONNECT_V7         16    // TDS type for TDS 7 clients.  Overloaded with SRV_ATTENTION_ACK
190 #define SRV_SKIP             17
191 #define SRV_TRANSMGR         18
192 #define SRV_PRELOGIN         19
193 #define SRV_OLEDB               20
194 #define SRV_INTERNAL_HANDLER 99
195 #define SRV_PROGRAMMER_DEFINED  100
196
197 // values for srv_sfield field parameter
198 #define SRV_SERVERNAME                0
199 #define SRV_VERSION                     6
200
201 // Length to indicate string is null terminated
202 #define SRV_NULLTERM     -1
203
204 // values of msgtype parameter to srv_sendmsg
205 #define SRV_MSG_INFO      1
206 #define SRV_MSG_ERROR     2
207
208 // values of status parameter to srv_senddone
209 // Also: values for symbol parameters to srv_symbol when type = SRV_DONE
210 #define SRV_DONE_FINAL            (USHORT) 0x0000
211 #define SRV_DONE_MORE            (USHORT) 0x0001
212 #define SRV_DONE_ERROR            (USHORT) 0x0002
213 #define SRV_DONE_COUNT            (USHORT) 0x0010
214 #define SRV_DONE_RPC_IN_BATCH     (USHORT) 0x0080
215
216 // return values of srv_paramstatus
217 #define SRV_PARAMRETURN        0x0001
218 #define SRV_PARAMDEFAULT      0x0002
219 #define SRV_PARAMSORTORDER    0x0004
220
221 // return values of srv_rpcoptions
222 #define SRV_RECOMPILE        0x0001
223 #define SRV_NOMETADATA        0x0002
224
225 // values of field parameter to srv_pfield
226 //#define SRV_LANGUAGE 1     already defined above
227 //#define SRV_EVENT      4     already defined above
228 #define SRV_SPID                10
229 #define SRV_NETSPID                11
230 #define SRV_TYPE                12
231 #define SRV_STATUS                13
232 #define SRV_RMTSERVER            14
233 #define SRV_HOST                15
234 #define SRV_USER                16
235 #define SRV_PWD                    17
236 #define SRV_CPID                18
237 #define SRV_APPLNAME            19
238 #define SRV_TDS                    20
239 #define SRV_CLIB                21
240 #define SRV_LIBVERS                22
241 #define SRV_ROWSENT                23
242 #define SRV_BCPFLAG                24
243 #define SRV_NATLANG                25
244 #define SRV_PIPEHANDLE            26
245 #define SRV_NETWORK_MODULE          27
246 #define SRV_NETWORK_VERSION        28
247 #define SRV_NETWORK_CONNECTION    29
248 #define SRV_LSECURE                30
249 #define SRV_SAXP                31
250 #define SRV_UNICODE_USER        33
251 #define SRV_UNICODE_PWD            35
252 #define SRV_SPROC_CODEPAGE          36
253 #define SRV_MSGLCID                37
254 #define SRV_INSTANCENAME        38
255 #define SRV_HASHPWD                39
256 #define SRV_UNICODE_CURRENTLOGIN 40
257
258 // return value of SRV_TDSVERSION macro
259 #define SRV_TDS_NONE     0
260 #define SRV_TDS_2_0      1
261 #define SRV_TDS_3_4      2
262 #define SRV_TDS_4_2      3
263 #define SRV_TDS_6_0      4
264 #define SRV_TDS_7_0      5
265
266 // Return values from APIs
267 typedef int SRVRETCODE;             // SUCCEED or FAIL
268 #ifndef ODBCVER
269 typedef int RETCODE;
270 #endif
271
272 #if !defined( SUCCEED )
273 #define SUCCEED        1     // Successful return value
274 #endif
275
276 #if !defined( FAIL )
277 #define FAIL             0     // Unsuccessful return value
278 #endif
279
280 #define SRV_DUPLICATE_HANDLER    2    // additional return value for srv_pre/post_handle
281
282 #ifndef COMPILE_FOR_CLR
283 //------------------------------------------------
284 //PreDeclare structures
285 //
286 struct srv_server;
287 typedef struct srv_server SRV_SERVER;
288
289 struct srv_config;
290 typedef struct srv_config SRV_CONFIG;
291
292 struct CXPData;
293 typedef struct CXPData SRV_PROC;
294
295
296 //------------------------------------------------
297 //------------------------------------------------
298 // ODS MACROs & APIs
299
300 // Describing and sending a result set
301 int __cdecl srv_describe(SRV_PROC*,int,char*,int,long int,long int,long int,long int,void*);
302 int __cdecl srv_setutype(SRV_PROC* srvproc,int column,long int usertype);
303 int __cdecl srv_setcoldata(SRV_PROC* srvproc,int column,void* data);
304 int __cdecl srv_setcollen( SRV_PROC* srvproc,int column,int len);
305 int __cdecl srv_sendrow(SRV_PROC* srvproc );
306 int __cdecl srv_senddone(SRV_PROC* srvproc,USHORT status,USHORT curcmd,long int count);
307
308 // Dealing with Extended Procedure parameters
309 int __cdecl srv_rpcparams(SRV_PROC*);
310 int __cdecl srv_paraminfo(SRV_PROC*,int,BYTE*,ULONG*,ULONG*,BYTE*,BOOL*);
311 int __cdecl srv_paramsetoutput(SRV_PROC*,int,BYTE*,ULONG,BOOL);
312
313 void* __cdecl srv_paramdata(SRV_PROC*,int);
314 int __cdecl srv_paramlen(SRV_PROC*,int);
315 int __cdecl srv_parammaxlen(SRV_PROC*,int);
316 int __cdecl srv_paramtype(SRV_PROC*,int);
317 int __cdecl srv_paramset(SRV_PROC*,int,void*,int);
318
319 char* __cdecl srv_paramname(SRV_PROC*,int,int*);
320 int __cdecl srv_paramnumber(SRV_PROC*,char*,int);
321
322 //--------------------------------------------------------------
323 //--------------------------------------------------------------
324 // The rest of these APIs are still supported, in SQL Server 7.0,
325 // but may not be supported after SQL Server 7.0
326
327 // MACROs
328 #define SRV_GETSERVER(a)        srv_getserver      ( a )
329 #define SRV_GOT_ATTENTION(a)    srv_got_attention ( a )
330 #define    SRV_TDSVERSION(a)        srv_tdsversion      ( a )
331
332 SRV_SERVER* __cdecl srv_getserver( SRV_PROC     * srvproc );
333 BOOL __cdecl srv_got_attention( SRV_PROC * srvproc );
334
335 // Memory
336 void* __cdecl srv_alloc(long int ulSize);
337 int __cdecl srv_bmove(void* from,void* to,long int count);
338 int __cdecl srv_bzero( void  * location,long int count);
339 int __cdecl srv_free( void * ptr );
340
341
342 int __cdecl srv_convert(SRV_PROC*,int,void*,long int,int,void*,long int);
343
344 void* __cdecl srv_getuserdata( SRV_PROC * srvproc );
345
346 int __cdecl srv_getbindtoken(SRV_PROC * srvproc,char* token_buf);
347
348 int __cdecl srv_getdtcxact(SRV_PROC * srvproc,void ** ppv);
349
350 typedef int (* EventHandler)(void *);
351
352 int __cdecl srv_impersonate_client( SRV_PROC * srvproc );
353
354 long __cdecl srv_langcpy(SRV_PROC *    srvproc,long start,long nbytes,char* buffer);
355 long __cdecl srv_langlen( SRV_PROC * srvproc );
356 void* __cdecl srv_langptr( SRV_PROC *srvproc );
357
358 int
359         __cdecl srv_log( SRV_SERVER * server,
360                     BOOL            datestamp,
361                     char        * msg,
362                     int             msglen );
363
364 int __cdecl srv_paramstatus(SRV_PROC*,int);
365
366 void* __cdecl srv_pfieldex( SRV_PROC * srvproc,int    field,int    * len );
367
368 char* __cdecl srv_pfield( SRV_PROC * srvproc,int              field,int          * len );
369
370 int __cdecl srv_returnval( SRV_PROC * srvproc,
371                           char     * valuename,
372                           int         len,
373                           BYTE         status,
374                           long int      type,
375                           long int      maxlen,
376                           long int      datalen,
377                           void         * value );
378
379 int __cdecl srv_revert_to_self( SRV_PROC * srvproc );
380
381 char* __cdecl srv_rpcdb(SRV_PROC* srvproc,int* len );
382 char* __cdecl srv_rpcname(SRV_PROC * srvproc,int* len );
383 int __cdecl srv_rpcnumber( SRV_PROC * srvproc );
384 USHORT __cdecl srv_rpcoptions( SRV_PROC * srvproc );
385 char* __cdecl srv_rpcowner( SRV_PROC * srvproc,int      * len );
386
387 int __cdecl srv_wsendmsg(    SRV_PROC    * srvproc,
388                         long int    msgnum, 
389                         BYTE        msgclass, 
390                         WCHAR        * message,      // message text 
391                         int            msglen);         // length of message text
392
393 int
394         __cdecl srv_sendmsg( SRV_PROC  * srvproc,
395                         int                 msgtype,
396                         long int          msgnum,
397                         BYTE     msgclass,
398                         BYTE     state,
399                         char      * rpcname,
400                         int                 rpcnamelen,
401                         USHORT linenum,
402                         char      * message,
403                         int                 msglen );
404
405 int __cdecl srv_sendstatus( SRV_PROC * srvproc,long int      status );
406
407
408 int __cdecl srv_setuserdata(SRV_PROC* srvproc,void* ptr);
409
410
411 char* __cdecl srv_sfield( SRV_SERVER * server,int field,int* len);
412
413 char* __cdecl srv_symbol(int    type,int symbol,int* len);
414
415 int __cdecl srv_tdsversion(SRV_PROC* srvproc);
416
417 BOOL __cdecl srv_willconvert(int srctype,int desttype );
418
419 int __cdecl srv_terminatethread( SRV_PROC * srvproc );
420
421 int __cdecl srv_sendstatistics( SRV_PROC * srvproc );
422
423 int __cdecl srv_clearstatistics( SRV_PROC * srvproc );
424
425 int __cdecl srv_message_handler( SRV_PROC * srvproc, 
426                                 int             errornum, 
427                                 BYTE           severity,
428                                 BYTE           state, 
429                                 int             oserrnum, 
430                                 char        * errtext, 
431                                 int             errtextlen, 
432                                 char        * oserrtext, 
433                                 int             oserrtextlen );
434
435 int __cdecl srv_pre_handle( SRV_SERVER * server,
436                               SRV_PROC     * srvproc,
437                               long int event,
438                               EventHandler handler,
439                               BOOL               remove );
440 int __cdecl srv_post_handle( SRV_SERVER * server,
441                              SRV_PROC     * srvproc,
442                              long int             event,
443                              EventHandler handler,
444                              BOOL               remove );
445
446 int __cdecl srv_IgnoreAnsiToOem( SRV_PROC * srvproc,BOOL bTF);
447
448 #endif // #ifndef COMPILE_FOR_CLR
449
450 #ifdef __cplusplus
451 }
452 #endif
453
454 #pragma pack()
455
456 #define SS_MAJOR_VERSION      7
457 #define SS_MINOR_VERSION      00
458 #define SS_LEVEL_VERSION      0000
459 #define SS_MINIMUM_VERSION  "7.00.00.0000"
460 #define ODS_VERSION            ((SS_MAJOR_VERSION << 24)  | (SS_MINOR_VERSION << 16))
461
462 #endif //_ODS_SRV_H_
463
464 //////////////////////////////////////////////////////////////////
465 // Suggested implementation of __GetXpVersion
466 //
467 //__declspec(dllexport) ULONG __GetXpVersion() 
468 //    {
469 //    return ODS_VERSION;
470 //    }
471 //////////////////////////////////////////////////////////////////
472