Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5685 leency 1
 
6001 leency 2
	STATE_NOT_STARTED,
3
	STATE_IN_PROGRESS,
4
	STATE_COMPLETED
5
};
6
5685 leency 7
 
6001 leency 8
	int data_downloaded_size, data_full_size;
9
	dword bufpointer, bufsize;
10
	byte state;
11
	dword http_transfer;
12
	dword Start();
13
	void Stop();
14
	void Completed();
15
	int MonitorProgress();
16
} downloader;
17
5685 leency 18
 
6001 leency 19
{
5685 leency 20
	state = STATE_IN_PROGRESS;
6001 leency 21
	http_get stdcall (_url, 0, 0, #accept_language);
6005 leency 22
	http_transfer = EAX;
6001 leency 23
	return http_transfer;
24
}
5685 leency 25
26
 
6001 leency 27
{
5685 leency 28
	state = STATE_NOT_STARTED;
6001 leency 29
	if (http_transfer!=0)
30
	{
5685 leency 31
		EAX = http_transfer;
6001 leency 32
		EAX = EAX.http_msg.content_ptr;		// get pointer to data
5685 leency 33
		$push EAX							// save it on the stack
6001 leency 34
		http_free stdcall (http_transfer);	// abort connection
35
		$pop  EAX
36
		mem_Free(EAX);						// free data
5685 leency 37
		http_transfer=0;
6001 leency 38
		bufsize = 0;
39
		bufpointer = mem_Free(bufpointer);
40
	}
5685 leency 41
	data_downloaded_size = data_full_size = 0;
6001 leency 42
}
5685 leency 43
44
 
6001 leency 45
{
5685 leency 46
	state = STATE_COMPLETED;
6001 leency 47
	ESI = http_transfer;
48
	bufpointer = ESI.http_msg.content_ptr;
49
	bufsize = ESI.http_msg.content_received;
50
	http_free stdcall (http_transfer);
51
	http_transfer=0;
52
}
5685 leency 53
54
 
6001 leency 55
{
5685 leency 56
	dword receive_result;
6001 leency 57
	if (http_transfer <= 0) return false;
58
	http_receive stdcall (http_transfer);
59
	receive_result = EAX;
60
	EDI = http_transfer;
61
	data_full_size = EDI.http_msg.content_length;
62
	data_downloaded_size = EDI.http_msg.content_received;
63
	if (receive_result == 0) Completed();
64
	return true;
65
}
66