summaryrefslogtreecommitdiff
path: root/src/nu_header.h
blob: 0afdbafa43edf2f74fce30cd42dec68ab64af60a (plain)
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
typedef unsigned char  BYTE;
typedef unsigned short WORD;
typedef unsigned long  DWORD;

typedef struct {
  BYTE       netbios_command;
  BYTE       netbios_flags;
  WORD       netbios_size;
/*BYTE       Protocol[4];     Protocol identifier 0xFF,"SMB" */
  DWORD      Protocol;     /* For faster compare */
  BYTE       Command;      /* Command Code, look below */
  union {
    struct {
      BYTE   ErrorClass;
      BYTE   Reserved;
      WORD   Error;
    }      DosError;
    DWORD    Status;
  }        Status;
  BYTE       Flags;
  WORD       Flags2;
  union {
    WORD     Pad[6];       /* Ensure 12 bytes len */
    struct {
      WORD   PidHigh;
      BYTE   SecuritySignature[8];
    }      Extra;
  };
  WORD       TreeID;
  WORD       ProcessID;
  WORD       UserID;
  WORD       MultiplexID;
  BYTE       WordCount;
  WORD       ParameterWords[0];
} SMB_HEADER;

typedef struct {
  WORD       ByteCount;
  BYTE       Buffer[0];
} SMB_HEADER2;

/* This is the protocol identifier, each smb
   request must begin with this double word
*/
#define SMB_HEADER_PROTOCOL_MAGIC 0xff534d42

/* These are all valid SMB requests known from the document
   http://www.snia.org/tech_activities/CIFS/CIFS_TR-1p00_FINAL.pdf

   However, we only intend to implement the core smb command set,
   also known as dialect "PC NETWORK PROGRAM 1.0" and still only
   a read-only subset of this.
*/

enum {
  SMB_COM_CREATE_DIRECTORY                 = 0x00,
  SMB_COM_DELETE_DIRECTORY                 = 0x01,
  SMB_COM_OPEN                             = 0x02,
  SMB_COM_CREATE                           = 0x03,
  SMB_COM_CLOSE                            = 0x04,
  SMB_COM_FLUSH                            = 0x05,
  SMB_COM_DELETE                           = 0x06,
  SMB_COM_RENAME                           = 0x07,
  SMB_COM_QUERY_INFORMATION                = 0x08,
  SMB_COM_SET_INFORMATION                  = 0x09,
  SMB_COM_READ                             = 0x0A,
  SMB_COM_WRITE                            = 0x0B,
  SMB_COM_LOCK_BYTE_RANGE                  = 0x0C,
  SMB_COM_UNLOCK_BYTE_RANGE                = 0x0D,
  SMB_COM_CREATE_TEMPORARY                 = 0x0E,
  SMB_COM_CREATE_NEW                       = 0x0F,
  
  SMB_COM_CHECK_DIRECTORY                  = 0x10,
  SMB_COM_PROCESS_EXIT                     = 0x11,
  SMB_COM_SEEK                             = 0x12,
  SMB_COM_LOCK_AND_READ                    = 0x13,
  SMB_COM_WRITE_AND_UNLOCK                 = 0x14,
  /* ... */
  SMB_COM_READ_RAW                         = 0x1A,
  SMB_COM_READ_MPX                         = 0x1B,
  SMB_COM_READ_MPX_SECONDARY               = 0x1C,
  SMB_COM_WRITE_RAW                        = 0x1D,
  SMB_COM_WRITE_MPX                        = 0x1E,
  SMB_COM_WRITE_MPX_SECONDARY              = 0x1F,

  SMB_COM_WRITE_COMPLETE                   = 0x20,
  SMB_COM_QUERY_SERVER                     = 0x21,
  SMB_COM_SET_INFORMATION2                 = 0x22,
  SMB_COM_QUERY_INFORMATION2               = 0x23,
  SMB_COM_LOCKING_ANDX                     = 0x24,
  SMB_COM_TRANSACTION                      = 0x25,
  SMB_COM_TRANSACTION_SECONDARY            = 0x26,
  SMB_COM_IOCTL                            = 0x27,
  SMB_COM_IOCTL_SECONDARY                  = 0x28,
  SMB_COM_COPY                             = 0x29,
  SMB_COM_MOVE                             = 0x2A,
  SMB_COM_ECHO                             = 0x2B,
  SMB_COM_WRITE_AND_CLOSE                  = 0x2C,
  SMB_COM_OPEN_ANDX                        = 0x2D,
  SMB_COM_READ_ANDX                        = 0x2E,
  SMB_COM_WRITE_ANDX                       = 0x2F,

  SMB_COM_NEW_FILE_SIZE                    = 0x30,
  SMB_COM_CLOSE_AND_TREE_DISC              = 0x31,
  SMB_COM_TRANSACTION2                     = 0x32,
  SMB_COM_TRANSACTION2_SECONDARY           = 0x33,
  SMB_COM_FIND_CLOSE2                      = 0x34,
  SMB_COM_FIND_NOTIFY_CLOSE                = 0x35,
  /* ... */

  SMB_COM_TREE_CONNECT                     = 0x70,
  SMB_COM_TREE_DISCONNECT                  = 0x71,
  SMB_COM_NEGOTIATE                        = 0x72,
  SMB_COM_SESSION_SETUP_ANDX               = 0x73,
  SMB_COM_LOGOFF_ANDX                      = 0x74,
  SMB_COM_TREE_CONNECT_ANDX                = 0x75,
  /* ... */

  SMB_COM_QUERY_INFORMATION_DISK           = 0x80,
  SMB_COM_SEARCH                           = 0x81,
  SMB_COM_FIND                             = 0x82,
  SMB_COM_FIND_UNIQUE                      = 0x83,
  SMB_COM_FIND_CLOSE                       = 0x84,
  /* ... */

  SMB_COM_NT_TRANSACT                      = 0xA0,
  SMB_COM_NT_TRANSACT_SECONDARY            = 0xA1,
  SMB_COM_NT_CREATE_ANDX                   = 0xA2,
  /* ... */
  SMB_COM_NT_CANCEL                        = 0xA4,
  SMB_COM_NT_RENAME                        = 0xA5,
  /* ... */

  SMB_COM_OPEN_PRINT_FILE                  = 0xC0,
  SMB_COM_WRITE_PRINT_FILE                 = 0xC1,
  SMB_COM_CLOSE_PRINT_FILE                 = 0xC2,
  SMB_COM_GET_PRINT_QUEUE                  = 0xC3,
  /* ... */

  SMB_COM_READ_BULK                        = 0xD8,
  SMB_COM_WRITE_BULK                       = 0xD9,
  SMB_COM_WRITE_BULK_DATA                  = 0xDA
} SMB_COMMAND;