Ver Fonte

add DEBUG switch and fix win build error

zhangzifa há 7 anos atrás
pai
commit
eb7ab33440

+ 5 - 0
core/src/CurlHttpClient.cc

@@ -15,6 +15,7 @@
  */
 
 #include "CurlHttpClient.h"
+#include "Utils.h"
 #include <cassert>
 #include <sstream>
 #include <string>
@@ -124,6 +125,10 @@ CurlHttpClient::makeRequest(const HttpRequest &request) {
   curl_easy_setopt(curlHandle_, CURLOPT_WRITEFUNCTION, recvBody);
   setCUrlProxy(curlHandle_, proxy());
 
+  if (GetEnv("DEBUG") == "sdk") {
+    curl_easy_setopt(curlHandle_, CURLOPT_VERBOSE, 1L);
+  }
+
   CURLcode res = curl_easy_perform(curlHandle_);
   switch (res) {
   case CURLE_OK: {

+ 4 - 6
core/src/HmacSha1Signer.cc

@@ -44,7 +44,7 @@ std::string HmacSha1Signer::generate(const std::string & src,
   }my_blob;
 
   DWORD kbLen = sizeof(my_blob) + secret.size();
-  my_blob * kb = reinterpret_cast<my_blob *>LocalAlloc(LPTR, kbLen);
+  my_blob * kb = (my_blob *)LocalAlloc(LPTR, kbLen);
   kb->hdr.bType = PLAINTEXTKEYBLOB;
   kb->hdr.bVersion = CUR_BLOB_VERSION;
   kb->hdr.reserved = 0;
@@ -63,12 +63,10 @@ std::string HmacSha1Signer::generate(const std::string & src,
 
   CryptAcquireContext(&hProv, NULL,
     MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_NEWKEYSET);
-  CryptImportKey(hProv,
-    reinterpret_cast<BYTE*>(kb), kbLen, 0, CRYPT_IPSEC_HMAC_KEY, &hKey);
+  CryptImportKey(hProv, (BYTE*)kb, kbLen, 0, CRYPT_IPSEC_HMAC_KEY, &hKey);
   CryptCreateHash(hProv, CALG_HMAC, hKey, 0, &hHmacHash);
-  CryptSetHashParam(hHmacHash,
-    HP_HMAC_INFO, reinterpret_cast<BYTE*>&HmacInfo, 0);
-  CryptHashData(hHmacHash, reinterpret_cast<BYTE*>(src.c_str()), src.size(), 0);
+  CryptSetHashParam(hHmacHash, HP_HMAC_INFO, (BYTE*)&HmacInfo, 0);
+  CryptHashData(hHmacHash, (BYTE*)(src.c_str()), src.size(), 0);
   CryptGetHashParam(hHmacHash, HP_HASHVAL, pbHash, &dwDataLen, 0);
 
   LocalFree(kb);

+ 27 - 3
core/src/Utils.cc

@@ -17,6 +17,7 @@
 #include "Utils.h"
 #include <sstream>
 #include <algorithm>
+#include <stdlib.h>
 #ifdef _WIN32
 #include <Windows.h>
 #else
@@ -31,9 +32,9 @@ std::string AlibabaCloud::GenerateUuid() {
   char *data;
   UUID uuidhandle;
   UuidCreate(&uuidhandle);
-  UuidToString(&uuidhandle, reinterpret_cast<RPC_CSTR*>&data);
+  UuidToString(&uuidhandle, reinterpret_cast<RPC_CSTR*>(&data));
   std::string uuid(data);
-  RpcStringFree(reinterpret_cast<RPC_CSTR*>&data);
+  RpcStringFree(reinterpret_cast<RPC_CSTR*>(&data));
   return uuid;
 #else
   uuid_t uu;
@@ -72,7 +73,7 @@ std::string AlibabaCloud::ComputeContentMD5(const char * data, size_t size) {
 
   CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
   CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash);
-  CryptHashData(hHash, reinterpret_cast<BYTE*>(data), size, 0);
+  CryptHashData(hHash, (BYTE*)(data), size, 0);
   CryptGetHashParam(hHash, HP_HASHVAL, pbHash, &dwDataLen, 0);
 
   CryptDestroyHash(hHash);
@@ -186,3 +187,26 @@ std::string AlibabaCloud::canonicalizedHeaders(
 
   return ss.str();
 }
+
+std::string AlibabaCloud::GetEnv(const std::string env) {
+#ifdef _WIN32
+  char* buf = nullptr;
+  size_t sz = 0;
+  if (_dupenv_s(&buf, &sz, env.c_str()) == 0 && buf != nullptr) {
+    std::string var(buf);
+    free(buf);
+    return var;
+  } else {
+    if (buf) {
+      free(buf);
+    }
+    return std::string();
+  }
+#else
+  char* var = getenv(env.c_str());
+  if (var) {
+    return std::string(var);
+  }
+  return std::string();
+#endif
+}

+ 1 - 0
core/src/Utils.h

@@ -33,5 +33,6 @@ std::string UrlDecode(const std::string &src);
 std::string canonicalizedQuery(const std::map <std::string,
   std::string> &params);
 std::string canonicalizedHeaders(const HttpMessage::HeaderCollection &headers);
+std::string GetEnv(const std::string env);
 }  // namespace AlibabaCloud
 #endif  // CORE_SRC_UTILS_H_

+ 12 - 1
examples/imagesearch/imagesearch.cc

@@ -76,7 +76,12 @@ string base64_encode(const unsigned char *src, size_t len) {
 
 string imageBase64(string file) {
 
-  FILE* img = fopen(file.c_str(), "rb");
+  FILE* img = nullptr;
+#ifdef _WIN32
+  fopen_s(&img, file.c_str(), "rb");
+#else
+  img = fopen(file.c_str(), "rb");
+#endif
   if (!img) {
     perror("open file error");
     return "";
@@ -166,8 +171,14 @@ int main(int argc, char** argv) {
 
   char dir[1024];
   utils.get_dir_exec(dir, nullptr);
+#ifdef _WIN32
+  // windows binary has an extra Release/Debug/... dir
+  string image1_path = string(dir) + "\\..\\1.jpg";
+  string image2_path = string(dir) + "\\..\\2.jpg";
+#else
   string image1_path = string(dir) + "1.jpg";
   string image2_path = string(dir) + "2.jpg";
+#endif
   picList[base64_encode((u8_t*)jpg1.c_str(), jpg1.size())] = imageBase64(image1_path);
   picList[base64_encode((u8_t*)jpg2.c_str(), jpg2.size())] = imageBase64(image2_path);
 

+ 4 - 2
examples/nlp/nlp.cc

@@ -23,9 +23,11 @@ int main(int argc, char** argv) {
   request.setDomain("nlp.cn-shanghai.aliyuncs.com");
   request.setResourcePath("/nlp/api/wordsegment/general");
   request.setHttpMethod(HttpRequest::Post);
-  const char * data = "{\"lang\":\"ZH\",\"text\":\"Iphone is a bad choice 专用数据线\"}";
 
-  request.setContent(data, strlen(data));
+  // if windows, Chinese character will result in build error.
+  const std::string data = "{\"lang\":\"ZH\",\"text\":\"Iphone is a good choice.\"}";
+
+  request.setContent(data.c_str(), data.size());
   request.setHeaderParameter("Content-Type", "application/json;chrset=utf-8");
   request.setHeaderParameter("Accept", "application/json");
   request.setVersion("2018-04-08");

+ 12 - 1
test/core/utils_ut.cc

@@ -1,6 +1,6 @@
 #include "gtest/gtest.h"
 #include "../../core/src/Utils.h"
-
+#include <stdlib.h>
 
 using namespace std;
 using namespace AlibabaCloud;
@@ -60,4 +60,15 @@ namespace {
     const std::string decoded = UrlDecode(encoded);
     EXPECT_TRUE(decoded == url);
   }
+
+  TEST(Utils, GetEnv) {
+    const std::string var1 = GetEnv("PATH");
+    EXPECT_FALSE(var1.empty());
+    const std::string var2 = GetEnv("NOT_EXISTS_PATH");
+    EXPECT_TRUE(var2.empty());
+#ifndef _WIN32
+    setenv("SDK", "ttt", 1);
+    EXPECT_TRUE(GetEnv("SDK") == "ttt");
+#endif
+  }
 }