add DEBUG switch and fix win build error

This commit is contained in:
zhangzifa
2019-02-21 11:20:28 +08:00
committed by TonyZZF
parent 6a5f788210
commit eb7ab33440
7 changed files with 65 additions and 13 deletions

View File

@@ -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: {

View File

@@ -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);

View File

@@ -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
}

View File

@@ -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_

View File

@@ -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);

View File

@@ -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");

View File

@@ -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
}
}