1#ifndef _BETALK_H_
2#define _BETALK_H_
3
4// BeOS-specific includes
5#include "TypeConstants.h"
6#include "Errors.h"
7#include "OS.h"
8#include "fs_attr.h"
9#include "fs_query.h"
10#include "fs_index.h"
11#include "Mime.h"
12#include "netdb.h"
13
14// POSIX includes
15#include "stdio.h"
16#include "dirent.h"
17#include "malloc.h"
18#include "string.h"
19#include "sys/stat.h"
20#include "fcntl.h"
21#include "errno.h"
22#ifdef __BEOS__
23#include <bone/sys/socket.h>
24#else
25#include "socket.h"
26#endif
27#include "ctype.h"
28
29#ifndef NULL
30#define NULL			0L
31#endif
32
33#ifndef INVALID_SOCKET
34#define INVALID_SOCKET		(int)(~0)
35#endif
36
37#define BT_TCPIP_PORT		9092
38#define BT_QUERYHOST_PORT	9093
39#define BT_BESURE_PORT		9094
40
41#define BT_CMD_TERMINATOR			13
42#define BT_CMD_PREMOUNT				0
43#define BT_CMD_MOUNT				1
44#define BT_CMD_FSINFO				2
45#define BT_CMD_LOOKUP				3
46#define BT_CMD_STAT					4
47#define BT_CMD_READDIR				5
48#define BT_CMD_READ					6
49#define BT_CMD_WRITE				7
50#define BT_CMD_CREATE				8
51#define BT_CMD_TRUNCATE				9
52#define BT_CMD_MKDIR				10
53#define BT_CMD_RMDIR				11
54#define BT_CMD_RENAME				12
55#define BT_CMD_UNLINK				13
56#define BT_CMD_READLINK				14
57#define BT_CMD_SYMLINK				15
58#define BT_CMD_WSTAT				16
59#define BT_CMD_READATTRIB			50
60#define BT_CMD_WRITEATTRIB			51
61#define BT_CMD_READATTRIBDIR		52
62#define BT_CMD_REMOVEATTRIB			53
63#define BT_CMD_STATATTRIB			54
64#define BT_CMD_READINDEXDIR			60
65#define BT_CMD_CREATEINDEX			61
66#define BT_CMD_REMOVEINDEX			62
67#define BT_CMD_STATINDEX			63
68#define BT_CMD_READQUERY			70
69#define BT_CMD_COMMIT				80
70#define BT_CMD_PRINTJOB_NEW			200
71#define BT_CMD_PRINTJOB_DATA		201
72#define BT_CMD_PRINTJOB_COMMIT		202
73#define BT_CMD_AUTHENTICATE			210
74#define BT_CMD_QUIT					255
75
76#define BT_CMD_AUTH					1
77#define BT_CMD_READUSERS			2
78#define BT_CMD_READGROUPS			3
79#define BT_CMD_WHICHGROUPS			4
80
81#define BT_REQ_HOST_PROBE			1
82#define BT_REQ_SHARE_PROBE			2
83#define BT_REQ_HOST_INFO			3
84#define BT_REQ_HOST_USERS			4
85#define BT_REQ_AUTH_TYPES			5
86
87// The different types of network resources supported by BeServed.
88#define BT_SHARED_NULL				0
89#define BT_SHARED_FOLDER			1
90#define BT_SHARED_PRINTER			2
91
92#define BT_PRINTER_PCL3				0
93#define BT_PRINTER_POSTSCRIPT		1
94#define BT_PRITNER_INKJET			2
95
96#define BT_AUTH_REQ_CONNECT			1
97#define BT_AUTH_REQ_USERS			2
98
99#define BT_AUTH_NONE				0
100#define BT_AUTH_BESURE				1
101
102#define BT_RIGHTS_READ				0x00000001
103#define BT_RIGHTS_WRITE				0x00000002
104#define BT_RIGHTS_PRINT				0x00000004
105
106#define BT_RPC_SIGNATURE		"btRPC"
107#define BT_RPC_VERSION_HI		0
108#define BT_RPC_VERSION_LO		1
109
110#define BT_MAX_IO_BUFFER		32768
111#define BT_MAX_ATTR_BUFFER		256
112#define BT_RPC_MIN_PACKET_SIZE	128
113#define BT_RPC_MAX_PACKET_SIZE	(BT_MAX_IO_BUFFER + 1024)
114
115#define BT_TOKEN_SHARE			1
116#define BT_TOKEN_AS				2
117#define BT_TOKEN_SET			3
118#define BT_TOKEN_READ			4
119#define BT_TOKEN_WRITE			5
120#define BT_TOKEN_READWRITE		6
121#define BT_TOKEN_PROMISCUOUS	7
122#define BT_TOKEN_ON				8
123#define BT_TOKEN_TO				9
124#define BT_TOKEN_AUTHENTICATE	10
125#define BT_TOKEN_WITH			11
126#define BT_TOKEN_GROUP			12
127#define BT_TOKEN_PRINTER		13
128#define BT_TOKEN_PRINT			14
129#define BT_TOKEN_IS				15
130#define BT_TOKEN_SPOOLED		16
131#define BT_TOKEN_DEVICE			17
132#define BT_TOKEN_TYPE			18
133#define BT_TOKEN_COMMA			200
134#define BT_TOKEN_QUOTE			201
135#define BT_TOKEN_STRING			202
136#define BT_TOKEN_NUMBER			203
137#define BT_TOKEN_ERROR			255
138
139#define isValid(c)				((c)=='.' || (c)=='_' || (c)=='-' || (c)=='/' || (c)=='\\' || (c)==':' || (c)=='&' || (c)=='\'')
140
141#define MAX_COMMAND_ARGS		10
142#define MAX_NAME_LENGTH			32
143#define MAX_KEY_LENGTH			MAX_NAME_LENGTH
144#define MAX_USERNAME_LENGTH		MAX_NAME_LENGTH
145#define MAX_GROUPNAME_LENGTH	MAX_NAME_LENGTH
146#define BT_AUTH_TOKEN_LENGTH	(B_FILE_NAME_LENGTH + MAX_USERNAME_LENGTH)
147#define MAX_DESC_LENGTH			64
148#define MAX_GROUPS_PER_USER		80
149
150typedef struct
151{
152	char signature[6];
153	uint8 command;
154	char share[MAX_NAME_LENGTH + 1];
155} bt_request;
156
157typedef struct
158{
159	uint32 type;
160	uint32 subType;
161	char name[B_FILE_NAME_LENGTH + 1];
162} bt_resource;
163
164typedef struct
165{
166	char system[B_FILE_NAME_LENGTH];
167	char beServed[B_FILE_NAME_LENGTH];
168	char platform[B_FILE_NAME_LENGTH];
169	int cpus;
170	int connections;
171	int maxConnections;
172} bt_hostinfo;
173
174typedef struct
175{
176	unsigned int blockSize;
177	unsigned int totalBlocks;
178	unsigned int freeBlocks;
179} bt_fsinfo;
180
181typedef struct
182{
183	unsigned int size;
184	unsigned int length;
185	char *buffer;
186} bt_outPacket;
187
188typedef struct
189{
190	unsigned int length;
191	unsigned int offset;
192	char *buffer;
193} bt_inPacket;
194
195typedef struct rpcCall
196{
197	unsigned int nsid;
198	unsigned int xid;
199	sem_id sem;
200	bt_inPacket *inPacket;
201	bool finished;
202	struct rpcCall *next;
203	struct rpcCall *prev;
204} bt_rpccall;
205
206typedef struct rpcInfo
207{
208	thread_id rpcThread;
209	int32 quitXID;
210
211	uint32 serverIP;
212	int32 serverPort;
213	int s;
214} bt_rpcinfo;
215
216#define BT_COOKIE_SIZE			4
217
218typedef struct btCookie
219{
220	char opaque[BT_COOKIE_SIZE];
221	bt_inPacket inPacket;
222	bool lpbCache;
223	bool eof;
224} btCookie;
225
226typedef struct btQueryCookie
227{
228	char opaque[BT_COOKIE_SIZE];
229	char *query;
230} btQueryCookie;
231
232// RPC Operations
233unsigned char	btRPCGetChar(bt_inPacket *packet);
234unsigned int	btRPCGetInt32(bt_inPacket *packet);
235int64			btRPCGetInt64(bt_inPacket *packet);
236char *			btRPCGetNewString(bt_inPacket *packet);
237int				btRPCGetString(bt_inPacket *packet, char *buffer, int length);
238int				btRPCGetStat(bt_inPacket *packet, struct stat *st);
239bt_outPacket *	btRPCPutHeader(unsigned char command, unsigned char argc, int32 length);
240void			btRPCPutArg(bt_outPacket *packet, unsigned int type, void *data, int length);
241void			btRPCPutChar(bt_outPacket *packet, char value);
242void			btRPCPutInt32(bt_outPacket *packet, int32 value);
243void			btRPCPutInt64(bt_outPacket *packet, int64 value);
244void			btRPCPutString(bt_outPacket *packet, char *buffer, int length);
245void			btRPCPutBinary(bt_outPacket *packet, void *buffer, int length);
246void			btRPCPutStat(bt_outPacket *packet, struct stat *st);
247
248void btRPCCreateAck(bt_outPacket *packet, unsigned int xid, int error);
249void btRPCSendAck(int client, bt_outPacket *packet);
250
251int btRecv(int sock, void *data, int dataLen, int flags);
252int btSend(int sock, void *data, int dataLen, int flags);
253int btRecvMsg(int sock, void *data, int dataLen, int flags);
254int btSendMsg(int sock, void *data, int dataLen, int flags);
255
256#endif
257