diff --git a/CHANGELOG b/CHANGELOG index 38bca1ade..ab52d4f32 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +2018-11-08 Version: 1.2.10 +1, Fix the http response receive bug + + 2018-03-14 Version: 1.2.9 1, Support predefine endpoints parse diff --git a/VERSION b/VERSION index 434dcac4f..732aa7d7d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.9 \ No newline at end of file +1.2.10 \ No newline at end of file diff --git a/core/src/CurlHttpClient.cc b/core/src/CurlHttpClient.cc index cafd7ae6b..109523bbd 100644 --- a/core/src/CurlHttpClient.cc +++ b/core/src/CurlHttpClient.cc @@ -25,8 +25,8 @@ namespace { size_t recvBody(char *ptr, size_t size, size_t nmemb, void *userdata) { - HttpResponse *response = static_cast(userdata); - response->setBody(ptr, nmemb); + std::ostringstream &out = *static_cast(userdata); + out << std::string(ptr, nmemb*size); return nmemb * size; } @@ -118,17 +118,24 @@ HttpClient::HttpResponseOutcome CurlHttpClient::makeRequest(const HttpRequest &r list = curl_slist_append(list, str.c_str()); } curl_easy_setopt(curlHandle_, CURLOPT_HTTPHEADER, list); - curl_easy_setopt(curlHandle_, CURLOPT_WRITEDATA, &response); + std::ostringstream out; + curl_easy_setopt(curlHandle_, CURLOPT_WRITEDATA, &out); curl_easy_setopt(curlHandle_, CURLOPT_WRITEFUNCTION, recvBody); setCUrlProxy(curlHandle_, proxy()); CURLcode res = curl_easy_perform(curlHandle_); - if (res == CURLE_OK) { + switch (res) + { + case CURLE_OK: { long response_code; curl_easy_getinfo(curlHandle_, CURLINFO_RESPONSE_CODE, &response_code); response.setStatusCode(response_code); + response.setBody(out.str().c_str(), out.str().length()); return HttpResponseOutcome(response); } - - return HttpResponseOutcome(Error("NetworkError", "")); + case CURLE_SSL_CONNECT_ERROR: + return HttpResponseOutcome(Error("SSLConnectError", "A problem occurred somewhere in the SSL/TLS handshake.")); + default: + return HttpResponseOutcome(Error("NetworkError", "Failed to connect to host or proxy.")); + } } diff --git a/core/src/EndpointProvider.cc b/core/src/EndpointProvider.cc index 22bb01610..d03ea32d9 100644 --- a/core/src/EndpointProvider.cc +++ b/core/src/EndpointProvider.cc @@ -31,7 +31,7 @@ namespace # include #endif - const std::string jsondata = "{\"products\":[" + const std::string INTERNAL_ENDPOINTS_DATA = "{\"products\":[" "{\"code\":\"aegis\",\"document_id\":\"28449\",\"location_service_code\":\"vipaegis\",\"regional_endpoints\":[],\"global_endpoint\":\"aegis.cn-hangzhou.aliyuncs.com\",\"regional_endpoint_pattern\":\"\"}," "{\"code\":\"alidns\",\"document_id\":\"29739\",\"location_service_code\":\"alidns\",\"regional_endpoints\":[],\"global_endpoint\":\"alidns.aliyuncs.com\",\"regional_endpoint_pattern\":\"\"}," "{\"code\":\"arms\",\"document_id\":\"42924\",\"location_service_code\":\"\",\"regional_endpoints\":[{\"region\":\"ap-southeast-1\",\"endpoint\":\"arms.ap-southeast-1.aliyuncs.com\"},{\"region\":\"cn-beijing\",\"endpoint\":\"arms.cn-beijing.aliyuncs.com\"},{\"region\":\"cn-hangzhou\",\"endpoint\":\"arms.cn-hangzhou.aliyuncs.com\"},{\"region\":\"cn-hongkong\",\"endpoint\":\"arms.cn-hongkong.aliyuncs.com\"},{\"region\":\"cn-qingdao\",\"endpoint\":\"arms.cn-qingdao.aliyuncs.com\"},{\"region\":\"cn-shanghai\",\"endpoint\":\"arms.cn-shanghai.aliyuncs.com\"},{\"region\":\"cn-shenzhen\",\"endpoint\":\"arms.cn-shenzhen.aliyuncs.com\"}],\"global_endpoint\":\"\",\"regional_endpoint_pattern\":\"arms.[RegionId].aliyuncs.com\"}," @@ -104,7 +104,7 @@ bool EndpointProvider::loadInternalProductsInfo() { Json::Reader reader; Json::Value value; - if (!reader.parse(jsondata, value)) + if (!reader.parse(INTERNAL_ENDPOINTS_DATA, value)) return false; auto productsNode = value["products"]; @@ -157,6 +157,9 @@ std::string EndpointProvider::internalEndpoint(const std::string regionId, const EndpointProvider::EndpointOutcome EndpointProvider::getEndpoint() { + if (!locationClient_->configuration().endpoint().empty()) + return EndpointOutcome(locationClient_->configuration().endpoint()); + if (!serviceCode_.empty()) { EndpointOutcome outcome = loadRemoteEndpoint();