aboutsummaryrefslogtreecommitdiffstats
path: root/lib/rpcs.h
blob: cb71c88351c67f31c53a3e83b1bb0b3fcbb1c402 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#ifndef _rpcs_h_
#define _rpcs_h_

class ppsocket;
class bufferStore;
class bufferArray;

class rpcs {
	public:
		virtual ~rpcs() {};
		void reset();
		void reconnect();
		long getStatus();

		// API idendical on SIBO and EPOC
		int getNCPversion(int &, int &);
		int execProgram(const char *, const char *);
		int stopProgram(const char *);
		int queryProgram(const char *);
		int formatOpen(const char *, int &, int &);
		int formatRead(int);
		int getUniqueID(const char *, long &);
		int getOwnerInfo(bufferArray &);
		int getMachineType(int &);
		int fuser(const char *, char *, int);
		int quitServer(void);

		// API different on SIBO and EPOC
		virtual int queryDrive(const char, bufferArray &) = 0;
		virtual int getCmdLine(const char *, char *, int) = 0; 

		// API only existent on EPOC
		// default-methods for SIBO here.
		virtual int getMachineInfo(void) { return E_PSI_NOT_SIBO;}
		virtual int closeHandle(int) { return E_PSI_NOT_SIBO;}
		virtual int regOpenIter(void) { return E_PSI_NOT_SIBO;}
		virtual int regReadIter(void) { return E_PSI_NOT_SIBO;}
		virtual int regWrite(void) { return E_PSI_NOT_SIBO;}
		virtual int regRead(void) { return E_PSI_NOT_SIBO;}
		virtual int regDelete(void) { return E_PSI_NOT_SIBO;}
		virtual int setTime(void) { return E_PSI_NOT_SIBO;}
		virtual int configOpen(void) { return E_PSI_NOT_SIBO;}
		virtual int configRead(void) { return E_PSI_NOT_SIBO;}
		virtual int configWrite(void) { return E_PSI_NOT_SIBO;}
		virtual int queryOpen(void) { return E_PSI_NOT_SIBO;}
		virtual int queryRead(void) { return E_PSI_NOT_SIBO;}

		enum errs {
            E_PSI_GEN_NONE = 0,
			E_PSI_GEN_FAIL = -1,
            E_PSI_FILE_DISC = -50,
			// Special error code for "Operation not permitted in RPCS16"
            E_PSI_NOT_SIBO = -200
		};

		enum machs {
			PSI_MACH_UNKNOWN = 0,
			PSI_MACH_PC = 1,
			PSI_MACH_MC = 2,
			PSI_MACH_HC = 3,
			PSI_MACH_S3 = 4,
			PSI_MACH_S3A = 5,
			PSI_MACH_WORKABOUT = 6,
			PSI_MACH_SIENNA = 7,
			PSI_MACH_S3C = 8,
			PSI_MACH_S5 = 32,
			PSI_MACH_WINC = 33,
//TODO: Code for 5mx
		};

	protected:

		// Vars
		ppsocket *skt;
		long status;

		enum commands {
			QUERY_NCP        = 0x00,
			EXEC_PROG        = 0x01,
			QUERY_DRIVE      = 0x02,
			STOP_PROG        = 0x03,
			QUERY_PROG       = 0x04,
			FORMAT_OPEN      = 0x05,
			FORMAT_READ      = 0x06,
			GET_UNIQUEID     = 0x07,
			GET_OWNERINFO    = 0x08,
			GET_MACHINETYPE  = 0x09,
			GET_CMDLINE      = 0x0a,
			FUSER            = 0x0b,
			CONFIG_OPEN      = 0x66,
			CONFIG_READ      = 0x6d,
			QUIT_SERVER      = 0xff
		};

		// Communication
		bool sendCommand(enum commands, bufferStore &);
		long getResponse(bufferStore &);
		const char *getConnectName();

		char *convertSlash(const char *);
};

#endif