aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Portable/pmp_wifi/InfoDownloader.h
blob: 648d1976ac6ae7d366f43cca84227e74d32bc5c4 (plain) (blame)
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
#pragma once
#include "device.h"
#include "../xml/obj_xml.h"
#include "../Components/wac_downloadManager/DownloadCallbackT.h"
#include "WifiDevice.h"
#include "../xml/ifc_xmlreadercallbackT.h"
#include "main.h"
namespace Wasabi2
{
#include "nx/nxstring.h"
}

class DeviceXML : public ifc_xmlreadercallbackT<DeviceXML>
{
public:	
	DeviceXML();
	void xmlReaderOnStartElementCallback(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params);
	DeviceInfo device_info;
};

class InfoXML : public DeviceXML
{
public:
	InfoXML(obj_xml *parser);
	~InfoXML();
	WifiDevice *CreateDevice(uint64_t device_id_check, const char *root_url);
private:
	obj_xml *parser;
};

class InfoDownloader : public DownloadCallbackT<InfoDownloader>
{
public:
	InfoDownloader(const char *root_url, uint64_t id, Wasabi2::nx_string_t usn);
	~InfoDownloader();
	void OnInit(DownloadToken token);
	void OnData(DownloadToken token, void *data, size_t datalen);
	void OnCancel(DownloadToken token);
	void OnError(DownloadToken token, int error);
	void OnFinish(DownloadToken token);	
	bool Done(WifiDevice **device);

	void Cancel();
	uint64_t id;
	Wasabi2::nx_string_t usn;
private:
	char *root_url;
	obj_xml *parser;
	InfoXML *info;
	volatile int done; // 1 for successfully done, 2 for cancelled/error
};