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