Skip to content

Commit 9f65f56

Browse files
committed
modify util
1 parent 7ab7aa5 commit 9f65f56

File tree

12 files changed

+291
-385
lines changed

12 files changed

+291
-385
lines changed

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ endif()
6464

6565
# Project construction ...
6666
# src files ...
67-
add_library(${PROJECT_NAME} SHARED
67+
add_library(${PROJECT_NAME}
6868
src/tiger_client.cpp include/tigerapi/tiger_client.h include/tigerapi/constants.h
6969
include/tigerapi/utils.h src/utils.cpp include/tigerapi/service_types.h include/tigerapi/quote_client.h
7070
src/quote_client.cpp src/trade_client.cpp include/tigerapi/model.h src/order_util.cpp

demo/openapi_cpp_test/openapi_cpp_test.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include "tigerapi/trade_client.h"
55
#include "tigerapi/contract_util.h"
66
#include "tigerapi/order_util.h"
7+
#include "tigerapi/utils.h"
78
#include <cpprest/details/basic_types.h>
89

910
using namespace std;

include/tigerapi/client_config.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include <utility>
1010
#include "constants.h"
1111
#include "easylogging++.h"
12-
12+
#include "utils.h"
1313
#include "win32.h"
1414

1515
using namespace std;
@@ -45,7 +45,7 @@ namespace TIGER_API {
4545
utility::string_t charset = U("UTF-8");
4646
utility::string_t sign_type = U("RSA");
4747
utility::string_t lang;
48-
utility::string_t device_id = get_device_id();
48+
utility::string_t device_id = Utils::get_device_id();
4949

5050
void set_server_url(const utility::string_t &url) {
5151
this->server_url = url;

include/tigerapi/constants.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ static utility::string_t P_PERIOD = U("period");
3232
static utility::string_t P_BEGIN_TIME = U("begin_time");
3333
static utility::string_t P_START_TIME = U("start_time");
3434
static utility::string_t P_END_TIME = U("end_time");
35+
static utility::string_t P_START_DATE = U("start_date");
3536
static utility::string_t P_BEGIN_DATE = U("begin_date");
3637
static utility::string_t P_END_DATE = U("end_date");
3738
static utility::string_t P_BEGIN_INDEX = U("begin_index");

include/tigerapi/sign_util.h

Lines changed: 62 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -14,89 +14,88 @@
1414

1515
using namespace std;
1616
#pragma warning (disable: 4996)
17+
namespace TIGER_API {
1718

18-
std::vector<unsigned char> hmac_sha1(const utility::string_t& key, const utility::string_t& data)
19-
{
20-
unsigned char digest[EVP_MAX_MD_SIZE];
21-
unsigned int digest_len = 0;
19+
std::vector<unsigned char> hmac_sha1(const utility::string_t &key, const utility::string_t &data) {
20+
unsigned char digest[EVP_MAX_MD_SIZE];
21+
unsigned int digest_len = 0;
2222

23-
HMAC(EVP_sha1(),
24-
key.c_str(),
25-
static_cast<int>(key.length()),
26-
(const unsigned char*)data.c_str(),
27-
data.length(),
28-
digest,
29-
&digest_len);
23+
HMAC(EVP_sha1(),
24+
key.c_str(),
25+
static_cast<int>(key.length()),
26+
(const unsigned char *) data.c_str(),
27+
data.length(),
28+
digest,
29+
&digest_len);
3030

31-
return std::vector<unsigned char>(digest, digest + digest_len);
32-
}
31+
return std::vector<unsigned char>(digest, digest + digest_len);
32+
}
3333

3434

35-
RSA * create_rsa(utility::char_t *key, bool is_private) {
36-
RSA* rsa = nullptr;
35+
RSA *create_rsa(utility::char_t *key, bool is_private) {
36+
RSA *rsa = nullptr;
3737
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(__NT__)
38-
auto str1 = utility::conversions::utf16_to_utf8(key);
39-
BIO* keybio = BIO_new_mem_buf(str1.c_str(), -1);
38+
auto str1 = utility::conversions::utf16_to_utf8(key);
39+
BIO* keybio = BIO_new_mem_buf(str1.c_str(), -1);
4040
#else
41-
auto str1 = key;
42-
BIO* keybio = BIO_new_mem_buf(str1, -1);
41+
auto str1 = key;
42+
BIO *keybio = BIO_new_mem_buf(str1, -1);
4343
#endif
44-
if (keybio != nullptr) {
45-
if (is_private) {
46-
rsa = PEM_read_bio_RSAPrivateKey(keybio, nullptr, 0, 0);
44+
if (keybio != nullptr) {
45+
if (is_private) {
46+
rsa = PEM_read_bio_RSAPrivateKey(keybio, nullptr, 0, 0);
47+
} else {
48+
rsa = PEM_read_bio_RSA_PUBKEY(keybio, nullptr, 0, 0);
49+
}
50+
BIO_free_all(keybio);
4751
} else {
48-
rsa = PEM_read_bio_RSA_PUBKEY(keybio, nullptr, 0, 0);
52+
ucout << U("Failed to create key BIO");
4953
}
50-
BIO_free_all(keybio);
51-
} else {
52-
ucout << U("Failed to create key BIO");
53-
}
5454

55-
if (rsa == nullptr) {
56-
ucout << U("Failed to create RSA");
57-
}
55+
if (rsa == nullptr) {
56+
ucout << U("Failed to create RSA");
57+
}
5858

59-
return rsa;
60-
}
59+
return rsa;
60+
}
6161

62-
utility::string_t sha1_sign(const utility::string_t& context, const utility::string_t& key) {
63-
unsigned char encrypted[8196 * 16] = {};
64-
unsigned int encrypted_length;
65-
unsigned char hash[SHA_DIGEST_LENGTH] = { 0 };
66-
67-
auto str_transfer_content = str16to8(context);
68-
int context_size = str_transfer_content.size();
69-
SHA1((const unsigned char*)str_transfer_content.c_str(), context_size, hash);
70-
RSA *rsa = create_rsa((utility::char_t *)key.c_str(), true);
71-
int ret = RSA_sign(NID_sha1, hash, SHA_DIGEST_LENGTH,
72-
encrypted, &encrypted_length, rsa);
73-
if (ret == 1) {
74-
utility::string_t s(encrypted, encrypted + encrypted_length);
75-
return s;
62+
utility::string_t sha1_sign(const utility::string_t &context, const utility::string_t &key) {
63+
unsigned char encrypted[8196 * 16] = {};
64+
unsigned int encrypted_length;
65+
unsigned char hash[SHA_DIGEST_LENGTH] = {0};
66+
67+
auto str_transfer_content = Utils::str16to8(context);
68+
int context_size = str_transfer_content.size();
69+
SHA1((const unsigned char *) str_transfer_content.c_str(), context_size, hash);
70+
RSA *rsa = create_rsa((utility::char_t *) key.c_str(), true);
71+
int ret = RSA_sign(NID_sha1, hash, SHA_DIGEST_LENGTH,
72+
encrypted, &encrypted_length, rsa);
73+
if (ret == 1) {
74+
utility::string_t s(encrypted, encrypted + encrypted_length);
75+
return s;
76+
}
77+
return U("");
7678
}
77-
return U("");
78-
}
7979

80-
int sha1_verify(const utility::string_t& context, const utility::string_t& sign, const utility::string_t& key) {
80+
int sha1_verify(const utility::string_t &context, const utility::string_t &sign, const utility::string_t &key) {
8181

82-
auto context_s = str16to8(context);
83-
unsigned char sigbuf[8196 * 16] = {};
84-
unsigned int siglen = 0;
82+
auto context_s = Utils::str16to8(context);
83+
unsigned char sigbuf[8196 * 16] = {};
84+
unsigned int siglen = 0;
8585

86-
auto vec_base64_decode = utility::conversions::from_base64(sign);
86+
auto vec_base64_decode = utility::conversions::from_base64(sign);
8787

88-
unsigned char hash[SHA_DIGEST_LENGTH] = { 0 };
88+
unsigned char hash[SHA_DIGEST_LENGTH] = {0};
8989

90-
SHA1((const unsigned char*)context_s.c_str(), context_s.size(), hash);
90+
SHA1((const unsigned char *) context_s.c_str(), context_s.size(), hash);
9191

92-
RSA *rsa = create_rsa((utility::char_t *)key.c_str(), false);
93-
int ret = -1;
94-
if (vec_base64_decode.size() > 0)
95-
{
96-
ret = RSA_verify(NID_sha1, hash, SHA_DIGEST_LENGTH,
97-
&vec_base64_decode[0], vec_base64_decode.size(), rsa);
92+
RSA *rsa = create_rsa((utility::char_t *) key.c_str(), false);
93+
int ret = -1;
94+
if (vec_base64_decode.size() > 0) {
95+
ret = RSA_verify(NID_sha1, hash, SHA_DIGEST_LENGTH,
96+
&vec_base64_decode[0], vec_base64_decode.size(), rsa);
97+
}
98+
return ret;
9899
}
99-
return ret;
100100
}
101-
102101
#endif //TIGERAPI_SIGN_UTIL_H

include/tigerapi/trade_client.h

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ namespace TIGER_API {
6969
* @param sec_type
7070
* @param market
7171
* @param symbol
72-
* @param start_time
73-
* @param end_time
72+
* @param start_date
73+
* @param end_date
7474
* @param limit
7575
* @param is_brief
7676
* @param states
@@ -80,55 +80,55 @@ namespace TIGER_API {
8080
*/
8181
value get_orders(const utility::string_t &account = U(""), const utility::string_t &sec_type = U(""),
8282
const utility::string_t &market = U("ALL"),
83-
const utility::string_t &symbol = U(""), time_t start_time = -1, time_t end_time = -1, int limit = 100,
83+
const utility::string_t &symbol = U(""), time_t start_date = -1, time_t end_date = -1, int limit = 100,
8484
bool is_brief = false, const value &states = value::array(), const utility::string_t &sort_by = U(""),
8585
const utility::string_t &seg_type = U(""));
8686

8787
value get_orders(utility::string_t account, SecType sec_type = SecType::ALL,
8888
Market market = Market::ALL,
89-
utility::string_t symbol = U(""), time_t start_time = -1, time_t end_time = -1, int limit = 100,
89+
utility::string_t symbol = U(""), time_t start_date = -1, time_t end_date = -1, int limit = 100,
9090
bool is_brief = false, const value &states = value::array(),
9191
OrderSortBy sort_by = OrderSortBy::LATEST_STATUS_UPDATED,
9292
SegmentType seg_type = SegmentType::SEC);
9393

9494
/** 获取未成交订单 **/
9595
value get_active_orders(utility::string_t account = U(""), utility::string_t sec_type = U(""),
9696
utility::string_t market = U("ALL"),
97-
utility::string_t symbol = U(""), time_t start_time = -1, time_t end_time = -1, long parent_id = 0,
97+
utility::string_t symbol = U(""), time_t start_date = -1, time_t end_date = -1, long parent_id = 0,
9898
utility::string_t sort_by = U(""),
9999
utility::string_t seg_type = U(""));
100100

101101
value get_active_orders(utility::string_t account, SecType sec_type = SecType::ALL,
102102
Market market = Market::ALL,
103-
utility::string_t symbol = U(""), time_t start_time = -1, time_t end_time = -1, long parent_id = 0,
103+
utility::string_t symbol = U(""), time_t start_date = -1, time_t end_date = -1, long parent_id = 0,
104104
OrderSortBy sort_by = OrderSortBy::LATEST_STATUS_UPDATED,
105105
SegmentType seg_type = SegmentType::SEC);
106106

107107
/** 获取已成交订单 **/
108108
value get_filled_orders(utility::string_t account = U(""), utility::string_t sec_type = U(""),
109109
utility::string_t market = U("ALL"),
110-
utility::string_t symbol = U(""), time_t start_time = -1, time_t end_time = -1, long parent_id = 0,
110+
utility::string_t symbol = U(""), time_t start_date = -1, time_t end_date = -1, long parent_id = 0,
111111
utility::string_t sort_by = U(""),
112112
utility::string_t seg_type = U(""));
113113

114114
value get_filled_orders(utility::string_t account, SecType sec_type = SecType::ALL,
115115
Market market = Market::ALL,
116-
utility::string_t symbol = U(""), time_t start_time = -1, time_t end_time = -1, long parent_id = 0,
116+
utility::string_t symbol = U(""), time_t start_date = -1, time_t end_date = -1, long parent_id = 0,
117117
OrderSortBy sort_by = OrderSortBy::LATEST_STATUS_UPDATED,
118118
SegmentType seg_type = SegmentType::SEC);
119119

120120
/** 获取已取消订单 **/
121121
value get_inactive_orders(utility::string_t account = U(""), utility::string_t sec_type = U(""),
122-
utility::string_t market = U("ALL"),
123-
utility::string_t symbol = U(""), time_t start_time = -1, time_t end_time = -1, long parent_id = 0,
124-
utility::string_t sort_by = U(""),
125-
utility::string_t seg_type = U(""));
122+
utility::string_t market = U("ALL"),
123+
utility::string_t symbol = U(""), time_t start_date = -1, time_t end_date = -1, long parent_id = 0,
124+
utility::string_t sort_by = U(""),
125+
utility::string_t seg_type = U(""));
126126

127127
value get_inactive_orders(utility::string_t account, SecType sec_type = SecType::ALL,
128-
Market market = Market::ALL,
129-
utility::string_t symbol = U(""), time_t start_time = -1, time_t end_time = -1, long parent_id = 0,
130-
OrderSortBy sort_by = OrderSortBy::LATEST_STATUS_UPDATED,
131-
SegmentType seg_type = SegmentType::SEC);
128+
Market market = Market::ALL,
129+
utility::string_t symbol = U(""), time_t start_date = -1, time_t end_date = -1, long parent_id = 0,
130+
OrderSortBy sort_by = OrderSortBy::LATEST_STATUS_UPDATED,
131+
SegmentType seg_type = SegmentType::SEC);
132132

133133
Order get_order(long id, bool is_brief=false);
134134
Order get_transactions(utility::string_t account = U(""), long order_id = 0, utility::string_t sec_type = U(""),

include/tigerapi/utils.h

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,35 +11,40 @@
1111
#include <cpprest/details/basic_types.h>
1212
#include "win32.h"
1313

14-
OPENAPI_EXPORT utility::string_t str8to16(std::string s);
14+
namespace TIGER_API {
15+
class OPENAPI_EXPORT Utils {
16+
public:
17+
static utility::string_t str8to16(std::string s);
1518

16-
OPENAPI_EXPORT std::string str16to8(utility::string_t s);
19+
static std::string str16to8(utility::string_t s);
1720

18-
OPENAPI_EXPORT utility::string_t get_timestamp();
21+
static utility::string_t get_timestamp();
1922

20-
OPENAPI_EXPORT time_t date_string_to_timestamp(const utility::string_t &date_string);
23+
static time_t date_string_to_timestamp(const utility::string_t &date_string);
2124

22-
OPENAPI_EXPORT utility::string_t get_device_id();
25+
static utility::string_t get_device_id();
2326

24-
OPENAPI_EXPORT void camel_to_snake(web::json::value &obj);
27+
static void camel_to_snake(web::json::value &obj);
2528

26-
OPENAPI_EXPORT utility::string_t json_format(utility::string_t json_str);
29+
static utility::string_t json_format(utility::string_t json_str);
2730

28-
OPENAPI_EXPORT utility::string_t get_sign(utility::string_t &key, const utility::string_t &content);
31+
static utility::string_t get_level_str(int level);
2932

30-
OPENAPI_EXPORT bool
31-
verify_sign(utility::string_t public_key, const utility::string_t &content, const utility::string_t &encoded_signature);
33+
static utility::string_t get_sign(utility::string_t &key, const utility::string_t &content);
3234

33-
OPENAPI_EXPORT utility::string_t
34-
add_start_end(utility::string_t &key, const utility::string_t &start_marker, const utility::string_t end_marker);
35+
static bool
36+
verify_sign(utility::string_t public_key, const utility::string_t &content,
37+
const utility::string_t &encoded_signature);
3538

36-
OPENAPI_EXPORT utility::string_t fill_private_key_marker(utility::string_t &private_key);
39+
static utility::string_t
40+
add_start_end(utility::string_t &key, const utility::string_t &start_marker,
41+
const utility::string_t end_marker);
3742

38-
OPENAPI_EXPORT utility::string_t fill_public_key_marker(utility::string_t &public_key);
43+
static utility::string_t fill_private_key_marker(utility::string_t &private_key);
3944

40-
OPENAPI_EXPORT unsigned int str_hex(unsigned char *str, unsigned char *hex);
45+
static utility::string_t fill_public_key_marker(utility::string_t &public_key);
4146

42-
OPENAPI_EXPORT void hex_str(unsigned char *inchar, unsigned int len, utility::char_t *outtxt);
43-
44-
OPENAPI_EXPORT utility::string_t double_to_string(double num, int precision=1);
47+
static utility::string_t double_to_string(double num, int precision = 1);
48+
};
49+
}
4550
#endif //CPPSDK_UTILS_H

src/contract_util.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ namespace TIGER_API {
4141

4242
std::tuple<utility::string_t, utility::string_t, utility::string_t, utility::string_t>
4343
ContractUtil::extract_option_info(const utility::string_t identifier) {
44-
auto trans_identifier = str16to8(identifier);
44+
auto trans_identifier = Utils::str16to8(identifier);
4545

4646
if (!trans_identifier.empty()) {
4747
std::regex pattern(R"((\w+(?:\.\w+)?)\s*(\d{6})([CP])(\d+))");
@@ -50,12 +50,12 @@ namespace TIGER_API {
5050
std::string underlying_symbol = matches[1].str();
5151
std::string expiry = "20" + matches[2].str();
5252
std::string right = matches[3];
53-
utility::string_t strike = double_to_string(std::stod(matches[4]) / 1000);
53+
utility::string_t strike = Utils::double_to_string(std::stod(matches[4]) / 1000);
5454
if (expiry.size() == 8) {
5555
expiry = expiry.substr(0, 4) + "-" + expiry.substr(4, 2) + "-" + expiry.substr(6);
5656
}
5757
right = (right == "C") ? "CALL" : "PUT";
58-
return std::make_tuple(str8to16(underlying_symbol), str8to16(expiry), str8to16(right),
58+
return std::make_tuple(Utils::str8to16(underlying_symbol), Utils::str8to16(expiry), Utils::str8to16(right),
5959
strike);
6060
}
6161
}

src/quote_client.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ namespace TIGER_API {
201201
}
202202

203203
value QuoteClient::get_option_chain(const utility::string_t symbol, utility::string_t expiry, value option_filter) {
204-
time_t expiry_ts = date_string_to_timestamp(expiry);
204+
time_t expiry_ts = Utils::date_string_to_timestamp(expiry);
205205
return get_option_chain(symbol, expiry_ts, option_filter);
206206
}
207207

@@ -228,7 +228,7 @@ namespace TIGER_API {
228228
value obj = value::object(true);
229229
obj[P_BEGIN_TIME] = begin_time;
230230
obj[P_END_TIME] = end_time;
231-
obj[P_EXPIRY] = date_string_to_timestamp(expiry);
231+
obj[P_EXPIRY] = Utils::date_string_to_timestamp(expiry);
232232
obj[P_PERIOD] = value::string(U("day"));
233233
obj[P_RIGHT] = value::string(right);
234234
obj[P_STRIKE] = value::string(strike);

0 commit comments

Comments
 (0)