LCOV - code coverage report
Current view: top level - src - httpfetch.h (source / functions) Hit Total Coverage
Test: report Lines: 1 20 5.0 %
Date: 2015-07-11 18:23:49 Functions: 2 8 25.0 %

          Line data    Source code
       1             : /*
       2             : Minetest
       3             : Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
       4             : 
       5             : This program is free software; you can redistribute it and/or modify
       6             : it under the terms of the GNU Lesser General Public License as published by
       7             : the Free Software Foundation; either version 2.1 of the License, or
       8             : (at your option) any later version.
       9             : 
      10             : This program is distributed in the hope that it will be useful,
      11             : but WITHOUT ANY WARRANTY; without even the implied warranty of
      12             : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      13             : GNU Lesser General Public License for more details.
      14             : 
      15             : You should have received a copy of the GNU Lesser General Public License along
      16             : with this program; if not, write to the Free Software Foundation, Inc.,
      17             : 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
      18             : */
      19             : 
      20             : #ifndef HTTPFETCH_HEADER
      21             : #define HTTPFETCH_HEADER
      22             : 
      23             : #include <vector>
      24             : #include "util/string.h"
      25             : #include "config.h"
      26             : 
      27             : // Can be used in place of "caller" in asynchronous transfers to discard result
      28             : // (used as default value of "caller")
      29             : #define HTTPFETCH_DISCARD 0
      30             : #define HTTPFETCH_SYNC 1
      31             : 
      32           5 : struct HTTPFetchRequest
      33             : {
      34             :         std::string url;
      35             : 
      36             :         // Identifies the caller (for asynchronous requests)
      37             :         // Ignored by httpfetch_sync
      38             :         unsigned long caller;
      39             : 
      40             :         // Some number that identifies the request
      41             :         // (when the same caller issues multiple httpfetch_async calls)
      42             :         unsigned long request_id;
      43             : 
      44             :         // Timeout for the whole transfer, in milliseconds
      45             :         long timeout;
      46             : 
      47             :         // Timeout for the connection phase, in milliseconds
      48             :         long connect_timeout;
      49             : 
      50             :         // Indicates if this is multipart/form-data or
      51             :         // application/x-www-form-urlencoded.  POST-only.
      52             :         bool multipart;
      53             : 
      54             :         // POST fields.  Fields are escaped properly.
      55             :         // If this is empty a GET request is done instead.
      56             :         StringMap post_fields;
      57             : 
      58             :         // Raw POST data, overrides post_fields.
      59             :         std::string post_data;
      60             : 
      61             :         // If not empty, should contain entries such as "Accept: text/html"
      62             :         std::vector<std::string> extra_headers;
      63             : 
      64             :         //useragent to use
      65             :         std::string useragent;
      66             : 
      67             :         HTTPFetchRequest();
      68             : };
      69             : 
      70           0 : struct HTTPFetchResult
      71             : {
      72             :         bool succeeded;
      73             :         bool timeout;
      74             :         long response_code;
      75             :         std::string data;
      76             :         // The caller and request_id from the corresponding HTTPFetchRequest.
      77             :         unsigned long caller;
      78             :         unsigned long request_id;
      79             : 
      80           0 :         HTTPFetchResult()
      81           0 :         {
      82           0 :                 succeeded = false;
      83           0 :                 timeout = false;
      84           0 :                 response_code = 0;
      85           0 :                 data = "";
      86           0 :                 caller = HTTPFETCH_DISCARD;
      87           0 :                 request_id = 0;
      88           0 :         }
      89             : 
      90           0 :         HTTPFetchResult(const HTTPFetchRequest &fetch_request)
      91           0 :         {
      92           0 :                 succeeded = false;
      93           0 :                 timeout = false;
      94           0 :                 response_code = 0;
      95           0 :                 data = "";
      96           0 :                 caller = fetch_request.caller;
      97           0 :                 request_id = fetch_request.request_id;
      98           0 :         }
      99             : 
     100             : };
     101             : 
     102             : // Initializes the httpfetch module
     103             : void httpfetch_init(int parallel_limit);
     104             : 
     105             : // Stops the httpfetch thread and cleans up resources
     106             : void httpfetch_cleanup();
     107             : 
     108             : // Starts an asynchronous HTTP fetch request
     109             : void httpfetch_async(const HTTPFetchRequest &fetch_request);
     110             : 
     111             : // If any fetch for the given caller ID is complete, removes it from the
     112             : // result queue, sets the fetch result and returns true. Otherwise returns false.
     113             : bool httpfetch_async_get(unsigned long caller, HTTPFetchResult &fetch_result);
     114             : 
     115             : // Allocates a caller ID for httpfetch_async
     116             : // Not required if you want to set caller = HTTPFETCH_DISCARD
     117             : unsigned long httpfetch_caller_alloc();
     118             : 
     119             : // Frees a caller ID allocated with httpfetch_caller_alloc
     120             : // Note: This can be expensive, because the httpfetch thread is told
     121             : // to stop any ongoing fetches for the given caller.
     122             : void httpfetch_caller_free(unsigned long caller);
     123             : 
     124             : // Performs a synchronous HTTP request. This blocks and therefore should
     125             : // only be used from background threads.
     126             : void httpfetch_sync(const HTTPFetchRequest &fetch_request,
     127             :                 HTTPFetchResult &fetch_result);
     128             : 
     129             : 
     130             : #endif // !HTTPFETCH_HEADER

Generated by: LCOV version 1.11