1e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#ifndef HEADER_CURL_SMB_H
2e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define HEADER_CURL_SMB_H
3e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/***************************************************************************
4e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *                                  _   _ ____  _
5e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *  Project                     ___| | | |  _ \| |
6e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *                             / __| | | | |_) | |
7e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *                            | (__| |_| |  _ <| |___
8e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *                             \___|\___/|_| \_\_____|
9e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *
10e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * Copyright (C) 2014, Bill Nagel <wnagel@tycoint.com>, Exacq Technologies
11e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *
12e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * This software is licensed as described in the file COPYING, which
13e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * you should have received as part of this distribution. The terms
14e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * are also available at http://curl.haxx.se/docs/copyright.html.
15e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *
16e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * copies of the Software, and permit persons to whom the Software is
18e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * furnished to do so, under the terms of the COPYING file.
19e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *
20e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * KIND, either express or implied.
22e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET *
23e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET ***************************************************************************/
24e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
25e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETenum smb_conn_state {
26e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  SMB_NOT_CONNECTED = 0,
27e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  SMB_CONNECTING,
28e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  SMB_NEGOTIATE,
29e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  SMB_SETUP,
30e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  SMB_CONNECTED
31e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET};
32e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
33e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETstruct smb_conn {
34e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  enum smb_conn_state state;
35e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  char *user;
36e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  char *domain;
37e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char challenge[8];
38e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int session_key;
39e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short uid;
40e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  char *recv_buf;
41e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  size_t upload_size;
42e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  size_t send_size;
43e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  size_t sent;
44e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  size_t got;
45e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET};
46e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
47e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET/*
48e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET * Definitions for SMB protocol data structures
49e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET */
50e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#ifdef BUILDING_CURL_SMB_C
51e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
52e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#if defined(_MSC_VER) || defined(__ILEC400__)
53e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#  define PACK
54e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#  pragma pack(push)
55e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#  pragma pack(1)
56e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#elif defined(__GNUC__)
57e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#  define PACK __attribute__((packed))
58e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#else
59e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#  define PACK
60e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#endif
61e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
62e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_COM_CLOSE                 0x04
63e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_COM_READ_ANDX             0x2e
64e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_COM_WRITE_ANDX            0x2f
65e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_COM_TREE_DISCONNECT       0x71
66e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_COM_NEGOTIATE             0x72
67e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_COM_SETUP_ANDX            0x73
68e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_COM_TREE_CONNECT_ANDX     0x75
69e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_COM_NT_CREATE_ANDX        0xa2
70e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_COM_NO_ANDX_COMMAND       0xff
71e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
72e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_WC_CLOSE                  0x03
73e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_WC_READ_ANDX              0x0c
74e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_WC_WRITE_ANDX             0x0e
75e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_WC_SETUP_ANDX             0x0d
76e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_WC_TREE_CONNECT_ANDX      0x04
77e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_WC_NT_CREATE_ANDX         0x18
78e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
79e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_FLAGS_CANONICAL_PATHNAMES 0x10
80e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_FLAGS_CASELESS_PATHNAMES  0x08
81e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_FLAGS2_UNICODE_STRINGS    0x8000
82e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_FLAGS2_IS_LONG_NAME       0x0040
83e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_FLAGS2_KNOWS_LONG_NAME    0x0001
84e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
85e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_CAP_LARGE_FILES           0x08
86e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_GENERIC_WRITE             0x40000000
87e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_GENERIC_READ              0x80000000
88e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_FILE_SHARE_ALL            0x07
89e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_FILE_OPEN                 0x01
90e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_FILE_OVERWRITE_IF         0x05
91e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
92e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#define SMB_ERR_NOACCESS              0x00050001
93e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
94e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETstruct smb_header {
95e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char nbt_type;
96e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char nbt_flags;
97e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short nbt_length;
98e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char magic[4];
99e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char command;
100e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int status;
101e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char flags;
102e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short flags2;
103e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short pid_high;
104e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char signature[8];
105e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short pad;
106e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short tid;
107e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short pid;
108e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short uid;
109e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short mid;
110e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} PACK;
111e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
112e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETstruct smb_negotiate_response {
113e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  struct smb_header h;
114e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char word_count;
115e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short dialect_index;
116e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char security_mode;
117e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short max_mpx_count;
118e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short max_number_vcs;
119e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int max_buffer_size;
120e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int max_raw_size;
121e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int session_key;
122e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int capabilities;
123e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int system_time_low;
124e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int system_time_high;
125e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short server_time_zone;
126e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char encryption_key_length;
127e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short byte_count;
128e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  char bytes[1];
129e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} PACK;
130e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
131e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETstruct andx {
132e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char command;
133e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char pad;
134e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short offset;
135e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} PACK;
136e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
137e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETstruct smb_setup {
138e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char word_count;
139e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  struct andx andx;
140e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short max_buffer_size;
141e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short max_mpx_count;
142e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short vc_number;
143e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int session_key;
144e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short lengths[2];
145e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int pad;
146e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int capabilities;
147e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short byte_count;
148e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  char bytes[1024];
149e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} PACK;
150e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
151e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETstruct smb_tree_connect {
152e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char word_count;
153e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  struct andx andx;
154e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short flags;
155e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short pw_len;
156e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short byte_count;
157e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  char bytes[1024];
158e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} PACK;
159e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
160e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETstruct smb_nt_create {
161e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char word_count;
162e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  struct andx andx;
163e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char pad;
164e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short name_length;
165e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int flags;
166e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int root_fid;
167e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int access;
168e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#ifdef HAVE_LONGLONG
169e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned long long allocation_size;
170e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#else
171e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned __int64 allocation_size;
172e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#endif
173e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int ext_file_attributes;
174e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int share_access;
175e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int create_disposition;
176e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int create_options;
177e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int impersonation_level;
178e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char security_flags;
179e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short byte_count;
180e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  char bytes[1024];
181e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} PACK;
182e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
183e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETstruct smb_nt_create_response {
184e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  struct smb_header h;
185e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char word_count;
186e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  struct andx andx;
187e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char op_lock_level;
188e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short fid;
189e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int create_disposition;
190e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#ifdef HAVE_LONGLONG
191e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned long long create_time;
192e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned long long last_access_time;
193e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned long long last_write_time;
194e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned long long last_change_time;
195e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#else
196e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned __int64 create_time;
197e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned __int64 last_access_time;
198e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned __int64 last_write_time;
199e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned __int64 last_change_time;
200e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#endif
201e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int ext_file_attributes;
202e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#ifdef HAVE_LONGLONG
203e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned long long allocation_size;
204e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned long long end_of_file;
205e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#else
206e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned __int64 allocation_size;
207e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned __int64 end_of_file;
208e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#endif
209e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} PACK;
210e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
211e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETstruct smb_read {
212e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char word_count;
213e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  struct andx andx;
214e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short fid;
215e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int offset;
216e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short max_bytes;
217e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short min_bytes;
218e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int timeout;
219e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short remaining;
220e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int offset_high;
221e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short byte_count;
222e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} PACK;
223e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
224e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETstruct smb_write {
225e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  struct smb_header h;
226e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char word_count;
227e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  struct andx andx;
228e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short fid;
229e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int offset;
230e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int timeout;
231e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short write_mode;
232e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short remaining;
233e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short pad;
234e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short data_length;
235e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short data_offset;
236e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int offset_high;
237e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short byte_count;
238e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char pad2;
239e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} PACK;
240e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
241e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETstruct smb_close {
242e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char word_count;
243e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short fid;
244e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned int last_mtime;
245e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short byte_count;
246e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} PACK;
247e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
248e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETstruct smb_tree_disconnect {
249e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned char word_count;
250e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET  unsigned short byte_count;
251e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET} PACK;
252e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
253e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#if defined(_MSC_VER) || defined(__ILEC400__)
254e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#  pragma pack(pop)
255e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#endif
256e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
257e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#endif /* BUILDING_CURL_SMB_C */
258e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
259e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#if !defined(CURL_DISABLE_SMB) && defined(USE_NTLM) && \
260e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET    (CURL_SIZEOF_CURL_OFF_T > 4)
261e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
262e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#if !defined(USE_WINDOWS_SSPI) || defined(USE_WIN32_CRYPTO)
263e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
264e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETextern const struct Curl_handler Curl_handler_smb;
265e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNETextern const struct Curl_handler Curl_handler_smbs;
266e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
267e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#endif /* !USE_WINDOWS_SSPI || USE_WIN32_CRYPTO */
268e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
269e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#endif /* CURL_DISABLE_SMB && USE_NTLM && CURL_SIZEOF_CURL_OFF_T > 4 */
270e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET
271e6cd738ed3716c02557fb3a47515244e949ade39Bertrand SIMONNET#endif /* HEADER_CURL_SMB_H */
272