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