add log4cplus

This commit is contained in:
lnk
2025-05-09 16:53:07 +08:00
parent 92117de97e
commit 8a2e6ea537
109 changed files with 18240 additions and 4034 deletions

View File

@@ -19,7 +19,7 @@ using namespace std;
#include <string>
#include "../mms/db_interface.h"
#include "../json/cjson.h"//WW 2023-08-27<EFBFBD><EFBFBD><EFBFBD><EFBFBD>json<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#include "../json/cjson.h"//WW 2023-08-27新增json解析函数
#include "../include/curl/curl.h"
#ifdef __cplusplus
@@ -27,15 +27,15 @@ extern "C" {
#endif /* __cplusplus */
// Base64 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Base64 编码表
const char base64_chars[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
//base64 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//base64 解码表
static const unsigned char base64_decode_table[] = {
//ÿ<EFBFBD><EFBFBD>16<EFBFBD><EFBFBD>
//每行16个
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //1 - 16
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //17 - 32
0,0,0,0,0,0,0,0,0,0,0,62,0,0,0,63, //33 - 48
@@ -47,26 +47,26 @@ extern "C" {
};
/**
* @brief base64_decode base64<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param indata <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param inlen <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С
* @param outdata <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param outlen <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD>С
* @return int 0<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD> -1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĴ<EFBFBD>С<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD>
* @brief base64_decode base64解码
* @param indata 需解码的数据
* @param inlen 需解码的数据大小
* @param outdata 解码后输出的数据
* @param outlen 解码后输出的数据大小
* @return int 0:成功 -1:无效参数
* 注意解码的数据的大小必须大于4且是4的倍数
*/
int base64_decode(const char* indata, int inlen, char* outdata, long* outlen)
{
if (indata == NULL || inlen <= 0 || (outdata == NULL && outlen == NULL)) {
return -1;
}
if (inlen < 4 || inlen % 4 != 0) { //<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD>Ȳ<EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD> //inlen < 4 ||
if (inlen < 4 || inlen % 4 != 0) { //需要解码的数据长度不是4的倍数 //inlen < 4 ||
return -1;
}
int i, j;
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//计算解码后的字符串长度
int len = inlen / 4 * 3;
if (indata[inlen - 1] == '=') {
len--;
@@ -88,10 +88,10 @@ extern "C" {
return 0;
}
// Base64 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// Base64 编码函数
char* base64_encode_char(const unsigned char* data, size_t input_length, size_t* output_length) {
*output_length = 4 * ((input_length + 2) / 3); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD>
char* encoded_data = (char*)malloc(*output_length + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬+1 Ϊ '\0'
*output_length = 4 * ((input_length + 2) / 3); // 输出长度计算
char* encoded_data = (char*)malloc(*output_length + 1); // 分配内存,+1 '\0'
if (encoded_data == NULL) return NULL;
for (int i = 0, j = 0; i < input_length;) {
@@ -107,47 +107,47 @@ extern "C" {
encoded_data[j++] = (i * 2 + 1 / 3) < *output_length ? base64_chars[triple & 0x3F] : '=';
}
encoded_data[*output_length] = '\0'; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
encoded_data[*output_length] = '\0'; // 添加字符串结束符
return encoded_data;
}
/// <summary>
/// <EFBFBD>ж<EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD>Ϊpower{}<EFBFBD><EFBFBD>ʽ
/// 判断字符串是否为power{}格式
/// </summary>
/// <param name="str"><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="output"><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD></param>
/// <param name="output_size"><EFBFBD>ֶγ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="extracted_length"><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="str">待提取字符串</param>
/// <param name="output">结果字段</param>
/// <param name="output_size">字段长度限制</param>
/// <param name="extracted_length">提取出的内容长度</param>
/// <returns></returns>
bool extract_if_power(const char* str, char* output, size_t output_size, size_t* extracted_length) {
const char* prefix = "power{";
size_t prefix_length = strlen(prefix);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ׺
// 检查前缀
if (strncmp(str, prefix, prefix_length) != 0) {
return false; // ǰ׺<EFBFBD><EFBFBD>ƥ<EFBFBD><EFBFBD>
return false; // 前缀不匹配
}
// <EFBFBD><EFBFBD><EFBFBD>ұպϵĻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 查找闭合的花括号
const char* close_brace = strchr(str + prefix_length, '}');
if (close_brace == NULL) {
return false; // û<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD>պϵĻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return false; // 没有找到闭合的花括号
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
// 计算要提取的内容长度
size_t content_length = close_brace - (str + prefix_length);
if (content_length >= output_size) {
return false; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
return false; // 内容太长,无法放入输出缓冲区
}
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 复制内容到输出缓冲区
strncpy(output, str + prefix_length, content_length);
output[content_length] = '\0'; // <EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD>
printf("text: %s,length:%d\n", output, content_length); // ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫȷ<EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>null<EFBFBD><EFBFBD>ֹ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><EFBFBD><EFBFBD>
output[content_length] = '\0'; // 添加空终止符
printf("text: %s,length:%d\n", output, content_length); // 注意这里需要确保文本是以null终止的字符串
// 设置提取出的内容长度
*extracted_length = content_length;
return true; // <EFBFBD><EFBFBD>ȡ<EFBFBD>ɹ<EFBFBD>
return true; // 提取成功
}
#ifdef __cplusplus