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