plptools
Loading...
Searching...
No Matches
rfsv32.h
Go to the documentation of this file.
1/*
2 * This file is part of plptools.
3 *
4 * Copyright (C) 1999 Philip Proudman <philip.proudman@btinternet.com>
5 * Copyright (C) 1999-2001 Fritz Elfert <felfert@to.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along
18 * along with this program; if not, see <https://www.gnu.org/licenses/>.
19 *
20 */
21#pragma once
22
23#include "rfsv.h"
24
25#include "drive.h"
26#include "plpdirent.h"
27
28class RFSVFactory;
29
37class RFSV32 : public RFSV {
38public:
39 RFSV32(std::unique_ptr<TCPSocket> socket);
40
41 Enum<RFSV::errs> dir(const char * const, PlpDir &);
42 Enum<RFSV::errs> dircount(const char * const, uint32_t &);
43 Enum<RFSV::errs> copyFromPsion(const char * const, const char * const, void *, cpCallback_t);
44 Enum<RFSV::errs> copyFromPsion(const char *from, int fd, cpCallback_t cb);
45 Enum<RFSV::errs> copyToPsion(const char * const, const char * const, void *, cpCallback_t);
46 Enum<RFSV::errs> copyOnPsion(const char * const, const char * const, void *, cpCallback_t);
47 Enum<RFSV::errs> pathtest(const char * const);
48 Enum<RFSV::errs> mkdir(const char * const);
49 Enum<RFSV::errs> rmdir(const char * const);
50 Enum<RFSV::errs> remove(const char * const);
51 Enum<RFSV::errs> rename(const char * const, const char * const);
52 Enum<RFSV::errs> mktemp(uint32_t &, std::string &);
53 Enum<RFSV::errs> fgeteattr(const char * const, PlpDirent &);
54 Enum<RFSV::errs> fgetattr(const char * const, uint32_t &);
55 Enum<RFSV::errs> fsetattr(const char * const, const uint32_t, const uint32_t);
56 Enum<RFSV::errs> fgetmtime(const char * const, PsiTime &);
57 Enum<RFSV::errs> fsetmtime(const char * const, PsiTime const);
58 Enum<RFSV::errs> fopen(const uint32_t, const char * const, uint32_t &);
59 Enum<RFSV::errs> fcreatefile(const uint32_t, const char * const, uint32_t &);
60 Enum<RFSV::errs> freplacefile(const uint32_t, const char * const, uint32_t &);
61 Enum<RFSV::errs> fseek(const uint32_t, const int32_t, const uint32_t, uint32_t &);
62 Enum<RFSV::errs> fread(const uint32_t, unsigned char * const, const uint32_t, uint32_t &);
63 Enum<RFSV::errs> fwrite(const uint32_t, const unsigned char * const, const uint32_t, uint32_t &);
64 Enum<RFSV::errs> fsetsize(uint32_t, uint32_t);
65 Enum<RFSV::errs> fclose(const uint32_t);
66 Enum<RFSV::errs> devlist(uint32_t &);
67 Enum<RFSV::errs> devinfo(const char, Drive&);
68 Enum<RFSV::errs> opendir(const uint32_t, const char * const, RFSVDirHandle &);
71 Enum<RFSV::errs> setVolumeName(const char, const char * const);
72 uint32_t opMode(const uint32_t);
73 int getProtocolVersion() { return 5; }
74 char defaultInternalDriveLetter() { return 'C'; };
75
76private:
77
88 EPOC_ATTR_MASK = 0x09f7, /* All of the above */
89 EPOC_ATTR_GETUID = 0x10000000 /* Deliver UIDs on dir listing */
90 };
91
92 enum open_mode {
99 };
100
145 E_EPOC_DIR_FULL = -43
146 };
147
148 enum commands {
150 OPEN_DIR = 0x10,
151 READ_DIR = 0x12,
155 OPEN_FILE = 0x16,
156 TEMP_FILE = 0x17,
157 READ_FILE = 0x18,
159 SEEK_FILE = 0x1a,
160 DELETE = 0x1b,
162 FLUSH = 0x1d,
163 SET_SIZE = 0x1e,
164 RENAME = 0x1f,
166 RM_DIR = 0x21,
167 SET_ATT = 0x22,
168 ATT = 0x23,
170 MODIFIED = 0x25,
176 PATH_TEST = 0x2b,
177 LOCK = 0x2d,
178 UNLOCK = 0x2e,
182 REPLACE = 0x32
183 };
184
186 Enum<RFSV::errs> fopendir(const uint32_t, const char *, uint32_t &);
187 uint32_t attr2std(const uint32_t);
188 uint32_t std2attr(const uint32_t);
189
190 // Communication
191 bool sendCommand(enum commands, BufferStore &);
193};
A generic container for an array of bytes.
Definition: bufferstore.h:36
A class representing information about a Disk drive on the psion.
Definition: drive.h:51
Wrapper class featuring range-checking and string representation of enumerated values.
Definition: Enum.h:135
A class, representing a directory entry of the Psion.
Definition: plpdirent.h:79
Psion time related utility class.
Definition: psitime.h:124
This is the implementation of the RFSV protocol for Psion series 5 (EPOC) variant.
Definition: rfsv32.h:37
char defaultInternalDriveLetter()
Definition: rfsv32.h:74
Enum< RFSV::errs > pathtest(const char *const)
Checks to see if the directory component of a path or file name exists and is valid.
Definition: rfsv32.cc:621
commands
Definition: rfsv32.h:148
@ CREATE_FILE
Definition: rfsv32.h:174
@ SET_ATT
Definition: rfsv32.h:167
@ DELETE
Definition: rfsv32.h:160
@ MK_DIR_ALL
Definition: rfsv32.h:165
@ DRIVE_NAME
Definition: rfsv32.h:180
@ SEEK_FILE
Definition: rfsv32.h:159
@ UNLOCK
Definition: rfsv32.h:178
@ REMOTE_ENTRY
Definition: rfsv32.h:161
@ CLOSE_HANDLE
Definition: rfsv32.h:149
@ FLUSH
Definition: rfsv32.h:162
@ PATH_TEST
Definition: rfsv32.h:176
@ DRIVE_INFO
Definition: rfsv32.h:153
@ OPEN_FILE
Definition: rfsv32.h:155
@ SESSION_PATH
Definition: rfsv32.h:172
@ READ_DIR
Definition: rfsv32.h:151
@ RM_DIR
Definition: rfsv32.h:166
@ WRITE_FILE
Definition: rfsv32.h:158
@ OPEN_DIR
Definition: rfsv32.h:150
@ REPLACE
Definition: rfsv32.h:182
@ READ_FILE
Definition: rfsv32.h:157
@ RENAME
Definition: rfsv32.h:164
@ REPLACE_FILE
Definition: rfsv32.h:175
@ LOCK
Definition: rfsv32.h:177
@ SET_MODIFIED
Definition: rfsv32.h:169
@ SET_VOLUME_LABEL
Definition: rfsv32.h:154
@ ATT
Definition: rfsv32.h:168
@ SET_SIZE
Definition: rfsv32.h:163
@ READ_WRITE_FILE
Definition: rfsv32.h:173
@ MODIFIED
Definition: rfsv32.h:170
@ GET_DRIVE_LIST
Definition: rfsv32.h:152
@ SET_DRIVE_NAME
Definition: rfsv32.h:181
@ TEMP_FILE
Definition: rfsv32.h:156
@ OPEN_DIR_UID
Definition: rfsv32.h:179
@ SET_SESSION_PATH
Definition: rfsv32.h:171
Enum< RFSV::errs > getResponse(BufferStore &)
Definition: rfsv32.cc:411
Enum< RFSV::errs > fcreatefile(const uint32_t, const char *const, uint32_t &)
Creates a named file.
Definition: rfsv32.cc:76
Enum< RFSV::errs > mktemp(uint32_t &, std::string &)
Creates a unique temporary file.
Definition: rfsv32.cc:63
Enum< RFSV::errs > devinfo(const char, Drive &)
Retrieves details about a drive.
Definition: rfsv32.cc:362
Enum< RFSV::errs > fseek(const uint32_t, const int32_t, const uint32_t, uint32_t &)
Sets the current file position of a file on the Psion.
Definition: rfsv32.cc:647
Enum< RFSV::errs > devlist(uint32_t &)
Retrieves available drives on the Psion.
Definition: rfsv32.cc:342
Enum< RFSV::errs > fgetattr(const char *const, uint32_t &)
Retrieves attributes of a file on the Psion.
Definition: rfsv32.cc:245
uint32_t attr2std(const uint32_t)
Definition: rfsv32.cc:892
Enum< RFSV::errs > mkdir(const char *const)
Creates a directory on the Psion.
Definition: rfsv32.cc:768
Enum< RFSV::errs > fread(const uint32_t, unsigned char *const, const uint32_t, uint32_t &)
Reads from a file on the Psion.
Definition: rfsv32.cc:423
int getProtocolVersion()
Retrieves the protocol version.
Definition: rfsv32.h:73
Enum< RFSV::errs > fwrite(const uint32_t, const unsigned char *const, const uint32_t, uint32_t &)
Write to a file on the Psion.
Definition: rfsv32.cc:449
Enum< RFSV::errs > setVolumeName(const char, const char *const)
Set the name of a Psion Volume (Drive).
Definition: rfsv32.cc:821
uint32_t opMode(const uint32_t)
Converts an open-mode (A combination of the PSI_O_ constants.) from generic representation to the mac...
Definition: rfsv32.cc:203
bool sendCommand(enum commands, BufferStore &)
Definition: rfsv32.cc:383
Enum< RFSV::errs > rmdir(const char *const)
Removes a directory on the Psion.
Definition: rfsv32.cc:782
epoc_errs
Definition: rfsv32.h:101
@ E_EPOC_COMMS_PARITY
Definition: rfsv32.h:134
@ E_EPOC_DISMOUNTED
Definition: rfsv32.h:126
@ E_EPOC_NONE
Definition: rfsv32.h:102
@ E_EPOC_OVERFLOW
Definition: rfsv32.h:111
@ E_EPOC_GENERAL
Definition: rfsv32.h:104
@ E_EPOC_BAD_NAME
Definition: rfsv32.h:130
@ E_EPOC_CORRUPT
Definition: rfsv32.h:122
@ E_EPOC_ALREADY_EXISTS
Definition: rfsv32.h:113
@ E_EPOC_UNDERFLOW
Definition: rfsv32.h:112
@ E_EPOC_NOT_READY
Definition: rfsv32.h:120
@ E_EPOC_DIVIDE_BY_ZERO
Definition: rfsv32.h:143
@ E_EPOC_COULD_NOT_DISCONNECT
Definition: rfsv32.h:137
@ E_EPOC_COMMS_OVERRUN
Definition: rfsv32.h:133
@ E_EPOC_DIED
Definition: rfsv32.h:115
@ E_EPOC_SERVER_BUSY
Definition: rfsv32.h:118
@ E_EPOC_BAD_LIBRARY_ENTRY_POINT
Definition: rfsv32.h:139
@ E_EPOC_ACCESS_DENIED
Definition: rfsv32.h:123
@ E_EPOC_UNKNOWN
Definition: rfsv32.h:121
@ E_EPOC_COMPLETION
Definition: rfsv32.h:119
@ E_EPOC_LOCKED
Definition: rfsv32.h:124
@ E_EPOC_WRITE
Definition: rfsv32.h:125
@ E_EPOC_BAD_HANDLE
Definition: rfsv32.h:110
@ E_EPOC_NOT_FOUND
Definition: rfsv32.h:103
@ E_EPOC_COULD_NOT_CONNECT
Definition: rfsv32.h:136
@ E_EPOC_COMMS_FRAME
Definition: rfsv32.h:132
@ E_EPOC_BAD_POWER
Definition: rfsv32.h:144
@ E_EPOC_TIMEOUT
Definition: rfsv32.h:135
@ E_EPOC_BAD_DRIVER
Definition: rfsv32.h:129
@ E_EPOC_DIR_FULL
Definition: rfsv32.h:145
@ E_EPOC_SERVER_TERMINATED
Definition: rfsv32.h:117
@ E_EPOC_TOO_BIG
Definition: rfsv32.h:142
@ E_EPOC_ABORT
Definition: rfsv32.h:141
@ E_EPOC_DISK_FULL
Definition: rfsv32.h:128
@ E_EPOC_PATH_NOT_FOUND
Definition: rfsv32.h:114
@ E_EPOC_ARGUMENT
Definition: rfsv32.h:108
@ E_EPOC_DISCONNECTED
Definition: rfsv32.h:138
@ E_EPOC_EoF
Definition: rfsv32.h:127
@ E_EPOC_COMMS_LINE_FAIL
Definition: rfsv32.h:131
@ E_EPOC_IN_USE
Definition: rfsv32.h:116
@ E_EPOC_TOTAL_LOSS_OF_PRECISION
Definition: rfsv32.h:109
@ E_EPOC_NO_MEMORY
Definition: rfsv32.h:106
@ E_EPOC_BAD_DESCRIPTOR
Definition: rfsv32.h:140
@ E_EPOC_NOT_SUPPORTED
Definition: rfsv32.h:107
@ E_EPOC_CANCEL
Definition: rfsv32.h:105
Enum< RFSV::errs > err2psierr(int32_t)
Definition: rfsv32.cc:879
Enum< RFSV::errs > fopen(const uint32_t, const char *const, uint32_t &)
Opens a file.
Definition: rfsv32.cc:46
Enum< RFSV::errs > closedir(RFSVDirHandle &)
Close a directory, previously opened with opendir.
Definition: rfsv32.cc:142
Enum< RFSV::errs > fclose(const uint32_t)
Close a file on the Psion whih was previously opened/created by using fopen , fcreatefile ,...
Definition: rfsv32.cc:124
Enum< RFSV::errs > fopendir(const uint32_t, const char *, uint32_t &)
Definition: rfsv32.cc:108
Enum< RFSV::errs > fsetsize(uint32_t, uint32_t)
Resizes an open file on the Psion.
Definition: rfsv32.cc:632
Enum< RFSV::errs > remove(const char *const)
Removes a file on the Psion.
Definition: rfsv32.cc:810
Enum< RFSV::errs > opendir(const uint32_t, const char *const, RFSVDirHandle &)
Open a directory for reading with readdir.
Definition: rfsv32.cc:133
Enum< RFSV::errs > fsetmtime(const char *const, PsiTime const)
Sets the modification time of a file on the Psion.
Definition: rfsv32.cc:232
Enum< RFSV::errs > fgeteattr(const char *const, PlpDirent &)
Retrieves attributes, size and modification time of a file on the Psion.
Definition: rfsv32.cc:261
Enum< RFSV::errs > readdir(RFSVDirHandle &, PlpDirent &)
Read directory entries.
Definition: rfsv32.cc:146
Enum< RFSV::errs > freplacefile(const uint32_t, const char *const, uint32_t &)
Creates an named file, overwriting an existing file.
Definition: rfsv32.cc:92
Enum< RFSV::errs > rename(const char *const, const char *const)
Renames a file on the Psion.
Definition: rfsv32.cc:796
Enum< RFSV::errs > copyFromPsion(const char *const, const char *const, void *, cpCallback_t)
Copies a file from the Psion to the local machine.
Definition: rfsv32.cc:478
Enum< RFSV::errs > dircount(const char *const, uint32_t &)
Counts number of entries in a directory.
Definition: rfsv32.cc:304
uint32_t std2attr(const uint32_t)
Definition: rfsv32.cc:935
Enum< RFSV::errs > copyToPsion(const char *const, const char *const, void *, cpCallback_t)
Copies a file from local machine to the Psion.
Definition: rfsv32.cc:533
Enum< RFSV::errs > dir(const char *const, PlpDir &)
Reads a directory on the Psion.
Definition: rfsv32.cc:185
file_attrib
Definition: rfsv32.h:78
@ EPOC_ATTR_RONLY
Definition: rfsv32.h:79
@ EPOC_ATTR_DIRECTORY
Definition: rfsv32.h:82
@ EPOC_ATTR_COMPRESSED
Definition: rfsv32.h:87
@ EPOC_ATTR_MASK
Definition: rfsv32.h:88
@ EPOC_ATTR_ARCHIVE
Definition: rfsv32.h:83
@ EPOC_ATTR_NORMAL
Definition: rfsv32.h:85
@ EPOC_ATTR_VOLUME
Definition: rfsv32.h:84
@ EPOC_ATTR_GETUID
Definition: rfsv32.h:89
@ EPOC_ATTR_HIDDEN
Definition: rfsv32.h:80
@ EPOC_ATTR_SYSTEM
Definition: rfsv32.h:81
@ EPOC_ATTR_TEMPORARY
Definition: rfsv32.h:86
Enum< RFSV::errs > fgetmtime(const char *const, PsiTime &)
Retrieves the modification time of a file on the Psion.
Definition: rfsv32.cc:216
Enum< RFSV::errs > fsetattr(const char *const, const uint32_t, const uint32_t)
Definition: rfsv32.cc:291
open_mode
Definition: rfsv32.h:92
@ EPOC_OMODE_SHARE_EXCLUSIVE
Definition: rfsv32.h:93
@ EPOC_OMODE_BINARY
Definition: rfsv32.h:96
@ EPOC_OMODE_TEXT
Definition: rfsv32.h:97
@ EPOC_OMODE_READ_WRITE
Definition: rfsv32.h:98
@ EPOC_OMODE_SHARE_ANY
Definition: rfsv32.h:95
@ EPOC_OMODE_SHARE_READERS
Definition: rfsv32.h:94
Enum< RFSV::errs > copyOnPsion(const char *const, const char *const, void *, cpCallback_t)
Copies a file from the Psion to the Psion.
Definition: rfsv32.cc:566
A helper class for storing intermediate internal information in RFSV16 and RFSV32 .
Definition: rfsv.h:56
A factory for automatically instantiating the correct RFSV protocol variant depending on the connecte...
Definition: rfsvfactory.h:36
Access remote file services of a Psion.
Definition: rfsv.h:79
int(* cpCallback_t)(void *, uint32_t)
Defines the callback procedure for progress indication of copy operations.
Definition: rfsv.h:45
std::deque< class PlpDirent > PlpDir
Definition: rfsv.h:34