Rev 6001 | Go to most recent revision | Details | Compare with Previous | 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 |