| LEFT | RIGHT | 
| (no file at all) |  | 
|    1 #include <AdblockPlus/WebRequest.h> |  | 
|    2  |  | 
|    3 AdblockPlus::WebRequest::~WebRequest() |  | 
|    4 { |  | 
|    5 } |  | 
|    6  |  | 
|    7 #if defined(HAVE_CURL) |  | 
|    8  |  | 
|    9 #include <sstream> |    1 #include <sstream> | 
|   10 #include <cctype> |    2 #include <cctype> | 
|   11 #include <algorithm> |    3 #include <algorithm> | 
|   12 #include <curl/curl.h> |    4 #include <curl/curl.h> | 
 |    5 #include <AdblockPlus/WebRequest.h> | 
|   13  |    6  | 
|   14 namespace |    7 namespace | 
|   15 { |    8 { | 
|   16   struct HeaderData |    9   struct HeaderData | 
|   17   { |   10   { | 
|   18     int status; |   11     int status; | 
|   19     bool expectingStatus; |   12     bool expectingStatus; | 
|   20     std::vector<std::string> headers; |   13     std::vector<std::string> headers; | 
|   21  |   14  | 
|   22     HeaderData() |   15     HeaderData() | 
|   23     { |   16     { | 
|   24       status = 0; |   17       status = 0; | 
|   25       expectingStatus = true; |   18       expectingStatus = true; | 
|   26     } |   19     } | 
|   27   }; |   20   }; | 
|   28  |   21  | 
|   29   unsigned int ConvertErrorCode(CURLcode code) |   22   unsigned int ConvertErrorCode(CURLcode code) | 
|   30   { |   23   { | 
|   31     switch (code) |   24     switch (code) | 
|   32     { |   25     { | 
|   33       case CURLE_OK: |   26       case CURLE_OK: | 
|   34         return NS_OK; |   27         return AdblockPlus::WebRequest::NS_OK; | 
|   35       case CURLE_FAILED_INIT: |   28       case CURLE_FAILED_INIT: | 
|   36         return NS_ERROR_NOT_INITIALIZED; |   29         return AdblockPlus::WebRequest::NS_ERROR_NOT_INITIALIZED; | 
|   37       case CURLE_UNSUPPORTED_PROTOCOL: |   30       case CURLE_UNSUPPORTED_PROTOCOL: | 
|   38         return NS_ERROR_UNKNOWN_PROTOCOL; |   31         return AdblockPlus::WebRequest::NS_ERROR_UNKNOWN_PROTOCOL; | 
|   39       case CURLE_URL_MALFORMAT: |   32       case CURLE_URL_MALFORMAT: | 
|   40         return NS_ERROR_MALFORMED_URI; |   33         return AdblockPlus::WebRequest::NS_ERROR_MALFORMED_URI; | 
|   41       case CURLE_COULDNT_RESOLVE_PROXY: |   34       case CURLE_COULDNT_RESOLVE_PROXY: | 
|   42         return NS_ERROR_UNKNOWN_PROXY_HOST; |   35         return AdblockPlus::WebRequest::NS_ERROR_UNKNOWN_PROXY_HOST; | 
|   43       case CURLE_COULDNT_RESOLVE_HOST: |   36       case CURLE_COULDNT_RESOLVE_HOST: | 
|   44         return NS_ERROR_UNKNOWN_HOST; |   37         return AdblockPlus::WebRequest::NS_ERROR_UNKNOWN_HOST; | 
|   45       case CURLE_COULDNT_CONNECT: |   38       case CURLE_COULDNT_CONNECT: | 
|   46         return NS_ERROR_CONNECTION_REFUSED; |   39         return AdblockPlus::WebRequest::NS_ERROR_CONNECTION_REFUSED; | 
|   47       case CURLE_OUT_OF_MEMORY: |   40       case CURLE_OUT_OF_MEMORY: | 
|   48         return NS_ERROR_OUT_OF_MEMORY; |   41         return AdblockPlus::WebRequest::NS_ERROR_OUT_OF_MEMORY; | 
|   49       case CURLE_OPERATION_TIMEDOUT: |   42       case CURLE_OPERATION_TIMEDOUT: | 
|   50         return NS_ERROR_NET_TIMEOUT; |   43         return AdblockPlus::WebRequest::NS_ERROR_NET_TIMEOUT; | 
|   51       case CURLE_TOO_MANY_REDIRECTS: |   44       case CURLE_TOO_MANY_REDIRECTS: | 
|   52         return NS_ERROR_REDIRECT_LOOP; |   45         return AdblockPlus::WebRequest::NS_ERROR_REDIRECT_LOOP; | 
|   53       case CURLE_GOT_NOTHING: |   46       case CURLE_GOT_NOTHING: | 
|   54         return NS_ERROR_NO_CONTENT; |   47         return AdblockPlus::WebRequest::NS_ERROR_NO_CONTENT; | 
|   55       case CURLE_SEND_ERROR: |   48       case CURLE_SEND_ERROR: | 
|   56         return NS_ERROR_NET_RESET; |   49         return AdblockPlus::WebRequest::NS_ERROR_NET_RESET; | 
|   57       case CURLE_RECV_ERROR: |   50       case CURLE_RECV_ERROR: | 
|   58         return NS_ERROR_NET_RESET; |   51         return AdblockPlus::WebRequest::NS_ERROR_NET_RESET; | 
|   59       default: |   52       default: | 
|   60         return NS_CUSTOM_ERROR_BASE + code; |   53         return AdblockPlus::WebRequest::NS_CUSTOM_ERROR_BASE + code; | 
|   61     } |   54     } | 
|   62   } |   55   } | 
|   63  |   56  | 
|   64   size_t ReceiveData(char* ptr, size_t size, size_t nmemb, void* userdata) |   57   size_t ReceiveData(char* ptr, size_t size, size_t nmemb, void* userdata) | 
|   65   { |   58   { | 
|   66     std::stringstream* stream = static_cast<std::stringstream*>(userdata); |   59     std::stringstream* stream = static_cast<std::stringstream*>(userdata); | 
|   67     stream->write(ptr, size * nmemb); |   60     stream->write(ptr, size * nmemb); | 
|   68     return nmemb; |   61     return nmemb; | 
|   69   } |   62   } | 
|   70  |   63  | 
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  128     curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); |  121     curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); | 
|  129     curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ReceiveData); |  122     curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ReceiveData); | 
|  130     curl_easy_setopt(curl, CURLOPT_WRITEDATA, &responseText); |  123     curl_easy_setopt(curl, CURLOPT_WRITEDATA, &responseText); | 
|  131     curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, ReceiveHeader); |  124     curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, ReceiveHeader); | 
|  132     curl_easy_setopt(curl, CURLOPT_HEADERDATA, &headerData); |  125     curl_easy_setopt(curl, CURLOPT_HEADERDATA, &headerData); | 
|  133  |  126  | 
|  134     struct curl_slist* headerList = 0; |  127     struct curl_slist* headerList = 0; | 
|  135     for (HeaderList::const_iterator it = requestHeaders.begin(); |  128     for (HeaderList::const_iterator it = requestHeaders.begin(); | 
|  136       it != requestHeaders.end(); ++it) |  129       it != requestHeaders.end(); ++it) | 
|  137     { |  130     { | 
|  138       curl_slist_append(headerList, (it->first + ": " + it->second).c_str()); |  131       headerList = curl_slist_append(headerList, (it->first + ": " + it->second)
     .c_str()); | 
|  139     } |  132     } | 
|  140     if (headerList) |  133     if (headerList) | 
|  141       curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerList); |  134       curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerList); | 
|  142  |  135  | 
|  143     result.status = ConvertErrorCode(curl_easy_perform(curl)); |  136     result.status = ConvertErrorCode(curl_easy_perform(curl)); | 
|  144     result.responseStatus = headerData.status; |  137     result.responseStatus = headerData.status; | 
|  145     result.responseText = responseText.str(); |  138     result.responseText = responseText.str(); | 
|  146     for (std::vector<std::string>::iterator it = headerData.headers.begin(); |  139     for (std::vector<std::string>::iterator it = headerData.headers.begin(); | 
|  147         it != headerData.headers.end(); ++it) |  140         it != headerData.headers.end(); ++it) | 
|  148     { |  141     { | 
| (...skipping 22 matching lines...) Expand all  Loading... | 
|  171         } |  164         } | 
|  172       } |  165       } | 
|  173     } |  166     } | 
|  174  |  167  | 
|  175     if (headerList) |  168     if (headerList) | 
|  176       curl_slist_free_all(headerList); |  169       curl_slist_free_all(headerList); | 
|  177     curl_easy_cleanup(curl); |  170     curl_easy_cleanup(curl); | 
|  178   } |  171   } | 
|  179   return result; |  172   return result; | 
|  180 } |  173 } | 
|  181 #else |  | 
|  182 AdblockPlus::ServerResponse AdblockPlus::DefaultWebRequest::GET( |  | 
|  183     const std::string& url, const HeaderList& requestHeaders) const |  | 
|  184 { |  | 
|  185   AdblockPlus::ServerResponse result; |  | 
|  186   result.status = NS_ERROR_FAILURE; |  | 
|  187   result.responseStatus = 0; |  | 
|  188   return result; |  | 
|  189 } |  | 
|  190 #endif |  | 
| LEFT | RIGHT |