-add Networkbrowser and Mountmanager to easy browse network for networkdevices and...
[enigma2-plugins.git] / networkbrowser / src / lib / smb.h
1 /*###########################################################################
2 #
3 # http://newnigma2.to
4 #
5 # $Id$ 
6 #
7 # Copyright (C) 2007 - 2008 by
8 # e2board Team <team@newnigma2.to>
9 # License: GPL
10 #
11 # This program is free software; you can redistribute it and/or modify
12 # it under the terms of the GNU General Public License as published by
13 # the Free Software Foundation; either version 2 of the License, or
14 # (at your option) any later version.
15 #
16 # This program is distributed in the hope that it will be useful,
17 # but WITHOUT ANY WARRANTY; without even the implied warranty of
18 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 # GNU General Public License for more details.
20 #
21 # You should have received a copy of the GNU General Public License
22 # along with this program; if not, write to the Free Software
23 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 #
25 ###########################################################################*/
26
27 #ifndef SMB_H
28 #define SMB_H
29
30 typedef int BOOL;
31 typedef short int16;
32 typedef int int32;
33 typedef unsigned short uint16;
34 typedef unsigned int uint32;
35 typedef char pstring[1024];
36 typedef char fstring[128];
37
38 int mid = 0;
39 int pid;
40 int uid;
41 int cnum;
42 int Client = 0;
43 int trans_num = 0;
44 int keepalive = 0;
45 BOOL NeedSwap;
46
47 #define False (0)
48 #define True (1)
49 #define BUFFER_SIZE (0xFFFF)
50 #define SAFETY_MARGIN 1024
51 #define GMT_TO_LOCAL -1
52 #define WORD unsigned short
53 #define DEFAULT_PIPE_TIMEOUT 10000000
54 #define SELECT_CAST
55
56 #define smb_flg 13
57 #define smb_flg2 14
58 #define smb_mid 34
59 #define smb_pid 30
60 #define smb_uid 32
61 #define smb_size 39
62 #define smb_com 8
63 #define smb_tid 28
64 #define smb_rcls 9
65 #define smb_wct 36
66 #define smb_err 11
67 #define smb_vwv 37
68 #define smb_vwv0 37
69 #define smb_vwv1 39
70 #define smb_vwv2 41
71 #define smb_vwv3 43
72 #define smb_vwv4 45
73 #define smb_vwv5 47
74 #define smb_vwv6 49
75 #define smb_vwv7 51
76 #define smb_vwv8 53
77 #define smb_vwv9 55
78 #define smb_vwv10 57
79 #define smb_vwv11 59
80 #define smb_vwv12 61
81 #define smb_vwv13 63
82 #define smb_vwv14 65
83 #define smb_vwv15 67
84 #define smb_vwv16 69
85 #define smb_vwv17 71
86
87 #define SMBtrans         0x25   /* transaction - name, bytes in/out */
88 #define SMBtranss        0x26   /* transaction (secondary request/response) */
89 #define SMBtrans2        0x32   /* TRANS2 protocol set */
90 #define SMBtranss2       0x33   /* TRANS2 protocol set, secondary command */
91 #define SMBnegprot                       0x72   /* negotiate protocol */
92 #define SMBtcon          0x70   /* tree connect */
93 #define SMBsesssetupX    0x73   /* Session Set Up & X (including User Logon) */
94 #define SMBtdis          0x71   /* tree disconnect */
95
96 #define SVAL(buf,pos) sval((char *)buf,pos)
97 #define PVAL(buf,pos,type) (*((type *)(((char *)buf) + pos)))
98 #define SCVAL(buf,pos,x) PVAL(buf,pos,unsigned char) = (x)
99 #define CVAL(buf,pos) PVAL(buf,pos,unsigned char)
100 #define SSVAL(buf,pos,val) ssval((char *)(buf),pos,val)
101 #define SSVALS(buf,pos,val) ssval_s((char *)(buf),pos,val)
102 #define SWP(buf,len) (NeedSwap?BSWP(buf,len):((void *)buf))
103 #define IVAL(buf,pos) ival((char *)(buf),pos)
104 #define BSWP(buf,len) object_byte_swap(buf,len)
105 #define PTR_DIFF(p1,p2) ((ptrdiff_t)(((char *)(p1)) - (char *)(p2)))
106 #define SIVAL(buf,pos,val) sival((char *)(buf),pos,val)
107 #define MIN(a,b) ((a)<(b)?(a):(b))
108
109 enum protocol_types {PROTOCOL_NONE,PROTOCOL_CORE,PROTOCOL_COREPLUS,PROTOCOL_LANMAN1,PROTOCOL_LANMAN2,PROTOCOL_NT1};
110
111
112 /* error code stuff - put together by Merik Karman
113    merik@blackadder.dsh.oz.au */
114
115 typedef struct
116 {
117   char *name;
118   int code;
119   char *message;
120 } err_code_struct;
121
122 /* Dos Error Messages */
123 err_code_struct dos_msgs[] = {
124   {"ERRbadfunc",1,"Invalid function."},
125   {"ERRbadfile",2,"File not found."},
126   {"ERRbadpath",3,"Directory invalid."},
127   {"ERRnofids",4,"No file descriptors available"},
128   {"ERRnoaccess",5,"Access denied."},
129   {"ERRbadfid",6,"Invalid file handle."},
130   {"ERRbadmcb",7,"Memory control blocks destroyed."},
131   {"ERRnomem",8,"Insufficient server memory to perform the requested function."},
132   {"ERRbadmem",9,"Invalid memory block address."},
133   {"ERRbadenv",10,"Invalid environment."},
134   {"ERRbadformat",11,"Invalid format."},
135   {"ERRbadaccess",12,"Invalid open mode."},
136   {"ERRbaddata",13,"Invalid data."},
137   {"ERR",14,"reserved."},
138   {"ERRbaddrive",15,"Invalid drive specified."},
139   {"ERRremcd",16,"A Delete Directory request attempted  to  remove  the  server's  current directory."},
140   {"ERRdiffdevice",17,"Not same device."},
141   {"ERRnofiles",18,"A File Search command can find no more files matching the specified criteria."},
142   {"ERRbadshare",32,"The sharing mode specified for an Open conflicts with existing  FIDs  on the file."},
143   {"ERRlock",33,"A Lock request conflicted with an existing lock or specified an  invalid mode,  or an Unlock requested attempted to remove a lock held by another process."},
144   {"ERRfilexists",80,"The file named in a Create Directory, Make  New  File  or  Link  request already exists."},
145   {"ERRbadpipe",230,"Pipe invalid."},
146   {"ERRpipebusy",231,"All instances of the requested pipe are busy."},
147   {"ERRpipeclosing",232,"Pipe close in progress."},
148   {"ERRnotconnected",233,"No process on other end of pipe."},
149   {"ERRmoredata",234,"There is more data to be returned."},
150   {NULL,-1,NULL}};
151
152 /* Server Error Messages */
153 err_code_struct server_msgs[] = {
154   {"ERRerror",1,"Non-specific error code."},
155   {"ERRbadpw",2,"Bad password - name/password pair in a Tree Connect or Session Setup are invalid."},
156   {"ERRbadtype",3,"reserved."},
157   {"ERRaccess",4,"The requester does not have  the  necessary  access  rights  within  the specified  context for the requested function. The context is defined by the TID or the UID."},
158   {"ERRinvnid",5,"The tree ID (TID) specified in a command was invalid."},
159   {"ERRinvnetname",6,"Invalid network name in tree connect."},
160   {"ERRinvdevice",7,"Invalid device - printer request made to non-printer connection or  non-printer request made to printer connection."},
161   {"ERRqfull",49,"Print queue full (files) -- returned by open print file."},
162   {"ERRqtoobig",50,"Print queue full -- no space."},
163   {"ERRqeof",51,"EOF on print queue dump."},
164   {"ERRinvpfid",52,"Invalid print file FID."},
165   {"ERRsmbcmd",64,"The server did not recognize the command received."},
166   {"ERRsrverror",65,"The server encountered an internal error, e.g., system file unavailable."},
167   {"ERRfilespecs",67,"The file handle (FID) and pathname parameters contained an invalid  combination of values."},
168   {"ERRreserved",68,"reserved."},
169   {"ERRbadpermits",69,"The access permissions specified for a file or directory are not a valid combination.  The server cannot set the requested attribute."},
170   {"ERRreserved",70,"reserved."},
171   {"ERRsetattrmode",71,"The attribute mode in the Set File Attribute request is invalid."},
172   {"ERRpaused",81,"Server is paused. (reserved for messaging)"},
173   {"ERRmsgoff",82,"Not receiving messages. (reserved for messaging)."},
174   {"ERRnoroom",83,"No room to buffer message. (reserved for messaging)."},
175   {"ERRrmuns",87,"Too many remote user names. (reserved for messaging)."},
176   {"ERRtimeout",88,"Operation timed out."},
177   {"ERRnoresource",89,"No resources currently available for request."},
178   {"ERRtoomanyuids",90,"Too many UIDs active on this session."},
179   {"ERRbaduid",91,"The UID is not known as a valid ID on this session."},
180   {"ERRusempx",250,"Temp unable to support Raw, use MPX mode."},
181   {"ERRusestd",251,"Temp unable to support Raw, use standard read/write."},
182   {"ERRcontmpx",252,"Continue in MPX mode."},
183   {"ERRreserved",253,"reserved."},
184   {"ERRreserved",254,"reserved."},
185   {"ERRnosupport",0xFFFF,"Function not supported."},
186   {NULL,-1,NULL}};
187 /* Hard Error Messages */
188 err_code_struct hard_msgs[] = {
189   {"ERRnowrite",19,"Attempt to write on write-protected diskette."},
190   {"ERRbadunit",20,"Unknown unit."},
191   {"ERRnotready",21,"Drive not ready."},
192   {"ERRbadcmd",22,"Unknown command."},
193   {"ERRdata",23,"Data error (CRC)."},
194   {"ERRbadreq",24,"Bad request structure length."},
195   {"ERRseek",25 ,"Seek error."},
196   {"ERRbadmedia",26,"Unknown media type."},
197   {"ERRbadsector",27,"Sector not found."},
198   {"ERRnopaper",28,"Printer out of paper."},
199   {"ERRwrite",29,"Write fault."},
200   {"ERRread",30,"Read fault."},
201   {"ERRgeneral",31,"General failure."},
202   {"ERRbadshare",32,"A open conflicts with an existing open."},
203   {"ERRlock",33,"A Lock request conflicted with an existing lock or specified an invalid mode, or an Unlock requested attempted to remove a lock held by another process."},
204   {"ERRwrongdisk",34,"The wrong disk was found in a drive."},
205   {"ERRFCBUnavail",35,"No FCBs are available to process request."},
206   {"ERRsharebufexc",36,"A sharing buffer has been exceeded."},
207   {NULL,-1,NULL}};
208
209 struct
210 {
211   int code;
212   char *class;
213   err_code_struct *err_msgs;
214 } err_classes[] = { 
215   {0,"SUCCESS",NULL},
216   {0x01,"ERRDOS",dos_msgs},
217   {0x02,"ERRSRV",server_msgs},
218   {0x03,"ERRHRD",hard_msgs},
219   {0x04,"ERRXOS",NULL},
220   {0xE1,"ERRRMX1",NULL},
221   {0xE2,"ERRRMX2",NULL},
222   {0xE3,"ERRRMX3",NULL},
223   {0xFF,"ERRCMD",NULL},
224   {-1,NULL,NULL}};
225
226
227 #endif
228