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#define BT_REQ_PRINTER_PROBE 6 78 79#define BT_SHARED_NULL 0 80#define BT_SHARED_FOLDER 1 81#define BT_SHARED_PRINTER 2 82 83#define BT_PRINTER_PCL3 0 84#define BT_PRINTER_POSTSCRIPT 1 85#define BT_PRINTER_INKJET 2 86 87#define BT_AUTH_REQ_CONNECT 1 88#define BT_AUTH_REQ_USERS 2 89 90#define BT_AUTH_NONE 0 91#define BT_AUTH_BESURE 1 92 93#define BT_RIGHTS_READ 0x00000001 94#define BT_RIGHTS_WRITE 0x00000002 95#define BT_RIGHTS_PRINT 0x00000004 96 97#define BT_RPC_SIGNATURE "btRPC" 98#define BT_RPC_VERSION_HI 0 99#define BT_RPC_VERSION_LO 1 100 101#define BT_MAX_IO_BUFFER 32768 102#define BT_MAX_ATTR_BUFFER 256 103#define BT_RPC_MIN_PACKET_SIZE 64 104#define BT_RPC_MAX_PACKET_SIZE (BT_MAX_IO_BUFFER + 1024) 105 106#define BT_TOKEN_SHARE 1 107#define BT_TOKEN_AS 2 108#define BT_TOKEN_SET 3 109#define BT_TOKEN_READ 4 110#define BT_TOKEN_WRITE 5 111#define BT_TOKEN_READWRITE 6 112#define BT_TOKEN_PROMISCUOUS 7 113#define BT_TOKEN_ON 8 114#define BT_TOKEN_TO 9 115#define BT_TOKEN_AUTHENTICATE 10 116#define BT_TOKEN_WITH 11 117#define BT_TOKEN_GROUP 12 118#define BT_TOKEN_PRINTER 13 119#define BT_TOKEN_PRINT 14 120#define BT_TOKEN_IS 15 121#define BT_TOKEN_SPOOLED 16 122#define BT_TOKEN_DEVICE 17 123#define BT_TOKEN_TYPE 18 124#define BT_TOKEN_PRELOAD 19 125#define BT_TOKEN_COMMA 200 126#define BT_TOKEN_QUOTE 201 127#define BT_TOKEN_STRING 202 128#define BT_TOKEN_NUMBER 203 129#define BT_TOKEN_ERROR 255 130 131#define isValid(c) ((c)=='.' || (c)=='_' || (c)=='-' || (c)=='/' || (c)=='\\' || (c)==':' || (c)=='&' || (c)=='\'' || (c)=='\\') 132 133#define MAX_COMMAND_ARGS 10 134#define MAX_NAME_LENGTH 32 135#define MAX_KEY_LENGTH MAX_NAME_LENGTH 136#define MAX_USERNAME_LENGTH MAX_NAME_LENGTH 137#define MAX_GROUPNAME_LENGTH MAX_NAME_LENGTH 138#define BT_AUTH_TOKEN_LENGTH (B_FILE_NAME_LENGTH + MAX_USERNAME_LENGTH) 139#define MAX_DESC_LENGTH 64 140#define MAX_GROUPS_PER_USER 80 141 142typedef struct 143{ 144 char signature[6]; 145 uint8 command; 146 char share[MAX_NAME_LENGTH + 1]; 147} bt_request; 148 149typedef struct 150{ 151 uint32 type; 152 uint32 subType; 153 char name[B_FILE_NAME_LENGTH + 1]; 154} bt_resource; 155 156typedef struct 157{ 158 char system[B_FILE_NAME_LENGTH]; 159 char beServed[B_FILE_NAME_LENGTH]; 160 char platform[B_FILE_NAME_LENGTH]; 161 int cpus; 162 int connections; 163 int maxConnections; 164} bt_hostinfo; 165 166typedef struct userRights 167{ 168 char *user; 169 int rights; 170 bool isGroup; 171 struct userRights *next; 172} bt_user_rights; 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 xid; 198 sem_id sem; 199 bt_inPacket *inPacket; 200 bool finished; 201 struct rpcCall *next; 202 struct rpcCall *prev; 203} bt_rpccall; 204 205#define BT_COOKIE_SIZE 4 206 207typedef struct btCookie 208{ 209 char opaque[BT_COOKIE_SIZE]; 210 bt_inPacket packet; 211 bool lpbCache; 212 bool eof; 213} btCookie; 214 215typedef struct btQueryCookie 216{ 217 char opaque[BT_COOKIE_SIZE]; 218 char *query; 219} btQueryCookie; 220 221// RPC Operations 222unsigned char btRPCGetChar(bt_inPacket *packet); 223unsigned int btRPCGetInt32(bt_inPacket *packet); 224int64 btRPCGetInt64(bt_inPacket *packet); 225char * btRPCGetNewString(bt_inPacket *packet); 226int btRPCGetString(bt_inPacket *packet, char *buffer, int length); 227void btRPCGetStat(bt_inPacket *packet, beos_stat *st); 228bt_outPacket * btRPCPutHeader(unsigned char command, unsigned char argc, int32 length); 229void btRPCPutArg(bt_outPacket *packet, unsigned int type, void *data, int length); 230void btRPCPutChar(bt_outPacket *packet, char value); 231void btRPCPutInt32(bt_outPacket *packet, int32 value); 232void btRPCPutInt64(bt_outPacket *packet, int64 value); 233void btRPCPutString(bt_outPacket *packet, char *buffer, int length); 234void btRPCPutBinary(bt_outPacket *packet, void *buffer, int length); 235void btRPCPutStat(bt_outPacket *packet, beos_stat *st); 236 237bt_rpccall * btRPCInvoke(int session, bt_outPacket *packet); 238void btRPCCreateAck(bt_outPacket *packet, unsigned int xid, int error); 239void btRPCSendAck(int client, bt_outPacket *packet); 240 241int btRecv(int sock, void *data, int dataLen, int flags); 242int btSend(int sock, void *data, int dataLen, int flags); 243int btRecvMsg(int sock, void *data, int dataLen, int flags); 244int btSendMsg(int sock, void *data, int dataLen, int flags); 245 246#endif 247