Subversion Repositories Kolibri OS

Rev

Rev 5685 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

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