-
Notifications
You must be signed in to change notification settings - Fork 30
/
dsn.h
117 lines (101 loc) · 3.81 KB
/
dsn.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
#ifndef __DSN_H__
#define __DSN_H__
#include "EsOdbcDsnBinding.h"
#include "util.h"
#include "defs.h"
#define SUBKEY_ODBCINST "ODBCINST.INI"
#define SUBKEY_ODBC "ODBC.INI"
/* attribute keywords used in connection strings */
#define ESODBC_DSN_DRIVER "Driver"
#define ESODBC_DSN_DESCRIPTION "Description"
#define ESODBC_DSN_DSN "DSN"
#define ESODBC_DSN_PWD "PWD"
#define ESODBC_DSN_UID "UID"
#define ESODBC_DSN_SAVEFILE "SAVEFILE"
#define ESODBC_DSN_FILEDSN "FILEDSN"
#define ESODBC_DSN_SERVER "Server"
#define ESODBC_DSN_PORT "Port"
#define ESODBC_DSN_SECURE "Secure"
#define ESODBC_DSN_CA_PATH "CAPath"
#define ESODBC_DSN_TIMEOUT "Timeout"
#define ESODBC_DSN_FOLLOW "Follow"
#define ESODBC_DSN_CATALOG "Catalog"
#define ESODBC_DSN_PACKING "Packing"
#define ESODBC_DSN_MAX_FETCH_SIZE "MaxFetchSize"
#define ESODBC_DSN_MAX_BODY_SIZE_MB "MaxBodySizeMB"
#define ESODBC_DSN_VERSION_CHECKING "VersionChecking"
#define ESODBC_DSN_TRACE_ENABLED "TraceEnabled"
#define ESODBC_DSN_TRACE_FILE "TraceFile"
#define ESODBC_DSN_TRACE_LEVEL "TraceLevel"
/* Packing values */
#define ESODBC_DSN_PACK_JSON "JSON"
#define ESODBC_DSN_PACK_CBOR "CBOR"
/* VersionChecking values */
#define ESODBC_DSN_VC_STRICT "strict"
#define ESODBC_DSN_VC_MAJOR "major"
#define ESODBC_DSN_VC_NONE "none"
/* stucture to collect all attributes in a connection string */
typedef struct {
wstr_st driver;
wstr_st description;
wstr_st dsn;
wstr_st pwd;
wstr_st uid;
wstr_st savefile;
wstr_st filedsn;
wstr_st server;
wstr_st port;
wstr_st secure;
wstr_st ca_path;
wstr_st timeout;
wstr_st follow;
wstr_st catalog;
wstr_st packing;
wstr_st max_fetch_size;
wstr_st max_body_size;
wstr_st version_checking;
wstr_st trace_enabled;
wstr_st trace_file;
wstr_st trace_level;
#define ESODBC_DSN_ATTRS_COUNT 21
SQLWCHAR buff[ESODBC_DSN_ATTRS_COUNT * ESODBC_DSN_MAX_ATTR_LEN];
} esodbc_dsn_attrs_st;
/* assign_dsn_attr() success codes. */
#define DSN_NOT_MATCHED 0
#define DSN_NOT_OVERWRITTEN 1
#define DSN_ASSIGNED 2
#define DSN_OVERWRITTEN 3
void TEST_API init_dsn_attrs(esodbc_dsn_attrs_st *attrs);
void assign_dsn_defaults(esodbc_dsn_attrs_st *attrs);
BOOL assign_dsn_attr(esodbc_dsn_attrs_st *attrs,
wstr_st *keyword, wstr_st *value, BOOL overwrite);
BOOL TEST_API parse_00_list(esodbc_dsn_attrs_st *attrs, SQLWCHAR *list00);
long TEST_API write_00_list(esodbc_dsn_attrs_st *attrs,
SQLWCHAR *list00, size_t cnt00);
/* "system" from "system information" (cf. SQLDriverConnect), not as
* in User/System DSN */
BOOL read_system_info(esodbc_dsn_attrs_st *attrs);
int system_dsn_exists(wstr_st *dsn);
BOOL load_system_dsn(esodbc_dsn_attrs_st *attrs, SQLWCHAR *list00);
BOOL write_system_dsn(esodbc_dsn_attrs_st *crr, esodbc_dsn_attrs_st *old);
BOOL TEST_API parse_connection_string(esodbc_dsn_attrs_st *attrs,
SQLWCHAR *szConnStrIn, SQLSMALLINT cchConnStrIn);
long TEST_API write_connection_string(esodbc_dsn_attrs_st *attrs,
SQLWCHAR *szConnStrOut, SQLSMALLINT cchConnStrOutMax);
size_t copy_installer_errors(wchar_t *err_buff, size_t eb_max);
int validate_dsn(esodbc_dsn_attrs_st *attrs, const wchar_t *dsn_str,
wchar_t *err_out, size_t eo_max, BOOL try_connect);
int prompt_user_config(HWND hwnd, BOOL on_conn, esodbc_dsn_attrs_st *attrs,
driver_callback_ft save_cb);
/* Uncomment to enable 00-list format (vs. connection string,
* `;`/`|`-separated) at the interface with the GUI API.
* The .NET framework has an ODBC connection string parser, so the that format
* will be used on Windows. */
//#define ESODBC_DSN_API_WITH_00_LIST
#endif /* __DSN_H__ */
/* vim: set noet fenc=utf-8 ff=dos sts=0 sw=4 ts=4 : */