forked from KolibriOS/kolibrios
451e903f9a
git-svn-id: svn://kolibrios.org@6005 a494cfbc-eb01-0410-851d-a64ba20cac60
67 lines
1.5 KiB
C
67 lines
1.5 KiB
C
|
|
enum {
|
|
STATE_NOT_STARTED,
|
|
STATE_IN_PROGRESS,
|
|
STATE_COMPLETED
|
|
};
|
|
|
|
struct DOWNLOADER {
|
|
int data_downloaded_size, data_full_size;
|
|
dword bufpointer, bufsize;
|
|
byte state;
|
|
dword http_transfer;
|
|
dword Start();
|
|
void Stop();
|
|
void Completed();
|
|
int MonitorProgress();
|
|
} downloader;
|
|
|
|
dword DOWNLOADER::Start(dword _url)
|
|
{
|
|
state = STATE_IN_PROGRESS;
|
|
http_get stdcall (_url, 0, 0, #accept_language);
|
|
http_transfer = EAX;
|
|
return http_transfer;
|
|
}
|
|
|
|
void DOWNLOADER::Stop()
|
|
{
|
|
state = STATE_NOT_STARTED;
|
|
if (http_transfer!=0)
|
|
{
|
|
EAX = http_transfer;
|
|
EAX = EAX.http_msg.content_ptr; // get pointer to data
|
|
$push EAX // save it on the stack
|
|
http_free stdcall (http_transfer); // abort connection
|
|
$pop EAX
|
|
mem_Free(EAX); // free data
|
|
http_transfer=0;
|
|
bufsize = 0;
|
|
bufpointer = mem_Free(bufpointer);
|
|
}
|
|
data_downloaded_size = data_full_size = 0;
|
|
}
|
|
|
|
void DOWNLOADER::Completed()
|
|
{
|
|
state = STATE_COMPLETED;
|
|
ESI = http_transfer;
|
|
bufpointer = ESI.http_msg.content_ptr;
|
|
bufsize = ESI.http_msg.content_received;
|
|
http_free stdcall (http_transfer);
|
|
http_transfer=0;
|
|
}
|
|
|
|
int DOWNLOADER::MonitorProgress()
|
|
{
|
|
dword receive_result;
|
|
if (http_transfer <= 0) return false;
|
|
http_receive stdcall (http_transfer);
|
|
receive_result = EAX;
|
|
EDI = http_transfer;
|
|
data_full_size = EDI.http_msg.content_length;
|
|
data_downloaded_size = EDI.http_msg.content_received;
|
|
if (receive_result == 0) Completed();
|
|
return true;
|
|
}
|