1 /***********************************************************************\
2 *                                 nb30.d                                *
3 *                                                                       *
4 *                       Windows API header module                       *
5 *                                                                       *
6 *                 Translated from MinGW Windows headers                 *
7 *                           by Stewart Gordon                           *
8 *                                                                       *
9 *                       Placed into public domain                       *
10 \***********************************************************************/
11 module win32.nb30;
12 
13 private import win32.windef;
14 
15 const size_t
16 	NCBNAMSZ =  16,
17 	MAX_LANA = 254;
18 
19 // FIXME: are these really two sets of constants?
20 enum : UCHAR {
21 	REGISTERING     = 0,
22 	REGISTERED      = 4,
23 	DEREGISTERED,
24 	DUPLICATE,
25 	DUPLICATE_DEREG, // = 7
26 	UNIQUE_NAME     = 0,
27 	GROUP_NAME      = 0x80,
28 	NAME_FLAGS_MASK = 0x87
29 }
30 
31 enum : UCHAR {
32 	LISTEN_OUTSTANDING = 1,
33 	CALL_PENDING,
34 	SESSION_ESTABLISHED,
35 	HANGUP_PENDING,
36 	HANGUP_COMPLETE,
37 	SESSION_ABORTED // = 6
38 }
39 
40 const char[4]
41 	ALL_TRANSPORTS = "M\0\0\0",
42 	MS_NBF         = "MNBF";
43 
44 enum : UCHAR {
45 	NCBCALL        = 0x10,
46 	NCBLISTEN,
47 	NCBHANGUP,  // = 0x12
48 	NCBSEND        = 0x14,
49 	NCBRECV,
50 	NCBRECVANY,
51 	NCBCHAINSEND, // = 0x17
52 	NCBDGSEND      = 0x20,
53 	NCBDGRECV,
54 	NCBDGSENDBC,
55 	NCBDGRECVBC, // = 0x23,
56 	NCBADDNAME     = 0x30,
57 	NCBDELNAME,
58 	NCBRESET,
59 	NCBASTAT,
60 	NCBSSTAT,
61 	NCBCANCEL,
62 	NCBADDGRNAME,
63 	NCBENUM,    // = 0x37
64 	NCBUNLINK      = 0x70,
65 	NCBSENDNA,
66 	NCBCHAINSENDNA,
67 	NCBLANSTALERT, // = 0x73
68 	NCBACTION      = 0x77,
69 	NCBFINDNAME,
70 	NCBTRACE    // = 0x79
71 }
72 
73 const UCHAR ASYNCH = 0x80;
74 
75 enum : UCHAR {
76 	NRC_GOODRET     = 0x00,
77 	NRC_BUFLEN      = 0x01,
78 	NRC_ILLCMD      = 0x03,
79 	NRC_CMDTMO      = 0x05,
80 	NRC_INCOMP,
81 	NRC_BADDR,
82 	NRC_SNUMOUT,
83 	NRC_NORES,
84 	NRC_SCLOSED,
85 	NRC_CMDCAN,  // = 0x0b
86 	NRC_DUPNAME     = 0x0d,
87 	NRC_NAMTFUL,
88 	NRC_ACTSES,  // = 0x0f,
89 	NRC_LOCTFUL     = 0x11,
90 	NRC_REMTFUL,
91 	NRC_ILLNN,
92 	NRC_NOCALL,
93 	NRC_NOWILD,
94 	NRC_INUSE,
95 	NRC_NAMERR,
96 	NRC_SABORT,
97 	NRC_NAMCONF, // = 0x19
98 	NRC_IFBUSY      = 0x21,
99 	NRC_TOOMANY,
100 	NRC_BRIDGE,
101 	NRC_CANOCCR, // = 0x24
102 	NRC_CANCEL      = 0x26,
103 	NRC_DUPENV      = 0x30,
104 	NRC_ENVNOTDEF   = 0x34,
105 	NRC_OSRESNOTAV,
106 	NRC_MAXAPPS,
107 	NRC_NOSAPS,
108 	NRC_NORESOURCES,
109 	NRC_INVADDRESS, // = 0x39
110 	NRC_INVDDID     = 0x3B,
111 	NRC_LOCKFAIL    = 0x3C,
112 	NRC_OPENERR     = 0x3f,
113 	NRC_SYSTEM      = 0x40,
114 	NRC_PENDING     = 0xff
115 }
116 
117 struct ACTION_HEADER {
118 	union {
119 		/*	transport_id is defined as a ULONG, but both the above constants
120 		 *	and the documented description suggest it should be a char[4]
121 		 */
122 		ULONG   transport_id;
123 		char[4] c_transport_id;
124 	}
125 	USHORT action_code;
126 	USHORT reserved;
127 }
128 alias ACTION_HEADER* PACTION_HEADER;
129 
130 struct ADAPTER_STATUS {
131 	UCHAR[6] adapter_address;
132 	UCHAR    rev_major;
133 	UCHAR    reserved0;
134 	UCHAR    adapter_type;
135 	UCHAR    rev_minor;
136 	WORD     duration;
137 	WORD     frmr_recv;
138 	WORD     frmr_xmit;
139 	WORD     iframe_recv_err;
140 	WORD     xmit_aborts;
141 	DWORD    xmit_success;
142 	DWORD    recv_success;
143 	WORD     iframe_xmit_err;
144 	WORD     recv_buff_unavail;
145 	WORD     t1_timeouts;
146 	WORD     ti_timeouts;
147 	DWORD    reserved1;
148 	WORD     free_ncbs;
149 	WORD     max_cfg_ncbs;
150 	WORD     max_ncbs;
151 	WORD     xmit_buf_unavail;
152 	WORD     max_dgram_size;
153 	WORD     pending_sess;
154 	WORD     max_cfg_sess;
155 	WORD     max_sess;
156 	WORD     max_sess_pkt_size;
157 	WORD     name_count;
158 }
159 alias ADAPTER_STATUS* PADAPTER_STATUS;
160 
161 struct FIND_NAME_BUFFER {
162 	/*	From Win32 API docs
163 	 *
164 	 *	length
165 	 *		Specifies the length, in bytes, of the FIND_NAME_BUFFER
166 	 *		structure. Although this structure always occupies 33 bytes,
167 	 *		not all of the structure is necessarily valid.
168 	 *
169 	 *	On this basis, should length be initialised?
170 	 */
171 	UCHAR     length;
172 	UCHAR     access_control;
173 	UCHAR     frame_control;
174 	UCHAR[6]  destination_addr;
175 	UCHAR[6]  source_addr;
176 	UCHAR[18] routing_info;
177 }
178 alias FIND_NAME_BUFFER* PFIND_NAME_BUFFER;
179 
180 struct FIND_NAME_HEADER {
181 	WORD  node_count;
182 	UCHAR reserved;
183 	UCHAR unique_group;
184 }
185 alias FIND_NAME_HEADER* PFIND_NAME_HEADER;
186 
187 struct LANA_ENUM {
188 	UCHAR             length;
189 	UCHAR[MAX_LANA+1] lana;
190 }
191 alias LANA_ENUM* PLANA_ENUM;
192 
193 struct NAME_BUFFER {
194 	UCHAR[NCBNAMSZ] name;
195 	UCHAR           name_num;
196 	UCHAR           name_flags;
197 }
198 alias NAME_BUFFER* PNAME_BUFFER;
199 
200 struct NCB {
201 	UCHAR           ncb_command;
202 	UCHAR           ncb_retcode;
203 	UCHAR           ncb_lsn;
204 	UCHAR           ncb_num;
205 	PUCHAR          ncb_buffer;
206 	WORD            ncb_length;
207 	UCHAR[NCBNAMSZ] ncb_callname;
208 	UCHAR[NCBNAMSZ] ncb_name;
209 	UCHAR           ncb_rto;
210 	UCHAR           ncb_sto;
211 	extern (Windows) void function(NCB*) ncb_post;
212 	UCHAR           ncb_lana_num;
213 	UCHAR           ncb_cmd_cplt;
214 	UCHAR           ncb_reserve[10];
215 	HANDLE          ncb_event;
216 }
217 alias NCB* PNCB;
218 
219 struct SESSION_BUFFER {
220 	UCHAR           lsn;
221 	UCHAR           state;
222 	UCHAR[NCBNAMSZ] local_name;
223 	UCHAR[NCBNAMSZ] remote_name;
224 	UCHAR           rcvs_outstanding;
225 	UCHAR           sends_outstanding;
226 }
227 alias SESSION_BUFFER* PSESSION_BUFFER;
228 
229 struct SESSION_HEADER {
230 	UCHAR sess_name;
231 	UCHAR num_sess;
232 	UCHAR rcv_dg_outstanding;
233 	UCHAR rcv_any_outstanding;
234 }
235 alias SESSION_HEADER* PSESSION_HEADER;
236 
237 extern (Windows) UCHAR Netbios(PNCB);