2 /// \file m_javaloader.h
3 /// Mode class for the JavaLoader mode
7 Copyright (C) 2005-2010, Net Direct Inc. (http://www.netdirect.ca/)
8 Copyright (C) 2008-2009, Nicolas VIVIEN
10 Some parts are inspired from m_desktop.h
12 This program is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
14 the Free Software Foundation; either version 2 of the License, or
15 (at your option) any later version.
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 See the GNU General Public License in the COPYING file at the
22 root directory of this project for more details.
25 #ifndef __BARRY_M_JAVALOADER_H__
26 #define __BARRY_M_JAVALOADER_H__
29 #include "m_mode_base.h"
37 // forward declarations
43 class JLDirectoryEntry
;
45 class JLEventlogEntry
;
47 class BXEXPORT JLDirectory
: public std::vector
<JLDirectoryEntry
>
50 typedef std::vector
<JLDirectoryEntry
> BaseType
;
51 typedef BaseType::iterator BaseIterator
;
52 typedef std::vector
<uint16_t> TableType
;
53 typedef TableType::iterator TableIterator
;
61 JLDirectory(int level
= 0);
64 int Level() const { return m_level
; }
65 TableIterator
TableBegin() { return m_idTable
.begin(); }
66 TableIterator
TableEnd() { return m_idTable
.end(); }
68 void ParseTable(const Data
&table_packet
);
70 void Dump(std::ostream
&os
) const;
72 BXEXPORT
inline std::ostream
& operator<<(std::ostream
&os
, const JLDirectory
&d
) {
77 class BXEXPORT JLDirectoryEntry
92 explicit JLDirectoryEntry(int level
);
94 void Parse(uint16_t id
, const Data
&entry_packet
);
96 void Dump(std::ostream
&os
) const;
98 BXEXPORT
inline std::ostream
& operator<<(std::ostream
&os
, const JLDirectoryEntry
&e
) {
104 class BXEXPORT JLScreenInfo
{
115 class BXEXPORT JLEventlog
: public std::vector
<JLEventlogEntry
>
118 void Dump(std::ostream
&os
) const;
120 BXEXPORT
inline std::ostream
& operator<<(std::ostream
&os
, const JLEventlog
&log
) {
126 class BXEXPORT JLEventlogEntry
145 uint64_t MSTimestamp
; // time_t in milliseconds
152 static Severity_t
SeverityProto2Rec(unsigned int s
);
153 static unsigned int SeverityRec2Proto(Severity_t s
);
155 static ViewerType_t
ViewerTypeProto2Rec(unsigned int v
);
156 static unsigned int ViewerTypeRec2Proto(ViewerType_t v
);
159 void Parse(uint16_t size
, const char* str
);
161 std::string
GetFormattedTimestamp() const;
163 void Dump(std::ostream
&os
) const;
167 class BXEXPORT JLDeviceInfo
172 VersionQuad(uint32_t v
) {
173 Major
= (v
& 0xff000000) >> 24;
174 Minor
= (v
& 0xff0000) >> 16;
175 SubMinor
= (v
& 0xff00) >> 8;
181 unsigned int SubMinor
;
188 VersionQuad OsVersion
;
189 VersionQuad VmVersion
;
197 void Dump(std::ostream
&os
) const;
199 BXEXPORT
inline std::ostream
& operator<<(std::ostream
&os
, const JLDeviceInfo
&info
) {
210 /// The main interface class to the java program loader protocol
212 /// To use this class, use the following steps:
214 /// - Create a Controller object (see Controller class for more details)
215 /// - Create this Mode::JavaLoader object, passing in the Controller
216 /// object during construction
217 /// - Call Open() to open database socket and finish constructing.
218 /// - Call LoadDatabase() to retrieve and store a database
220 class BXEXPORT JavaLoader
: public Mode
223 bool m_StreamStarted
;
226 void GetDirectoryEntries(JLPacket
&packet
, uint8_t entry_cmd
,
227 JLDirectory
&dir
, bool include_subdirs
);
228 void GetDir(JLPacket
&packet
, uint8_t entry_cmd
, JLDirectory
&dir
,
229 bool include_subdirs
);
230 void ThrowJLError(const std::string
&msg
, uint8_t cmd
);
231 void DoErase(uint8_t cmd
, const std::string
&cod_name
);
232 void SaveData(JLPacket
&packet
, uint16_t, CodFileBuilder
&builder
,
233 std::ostream
&output
);
235 //////////////////////////////////
238 virtual void OnOpen();
241 JavaLoader(Controller
&con
);
244 //////////////////////////////////
249 // mid-stream operations
250 void SendStream(std::istream
&input
, size_t module_size
);
251 void LoadApp(std::istream
&input
);
252 void SetTime(time_t when
);
253 void GetDirectory(JLDirectory
&dir
, bool include_subdirs
);
254 void GetScreenshot(JLScreenInfo
&info
, Data
&image
);
255 void Erase(const std::string
&cod_name
);
256 void ForceErase(const std::string
&cod_name
);
257 void GetEventlog(JLEventlog
&log
);
258 void ClearEventlog();
259 void Save(const std::string
&cod_name
, std::ostream
&output
);
260 void DeviceInfo(JLDeviceInfo
&info
);
261 void Wipe(bool apps
= true, bool fs
= true);
262 void LogStackTraces();
263 void ResetToFactory();
266 }} // namespace Barry::Mode