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