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