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

@@ -6,18 +6,18 @@
#include <string>
#include "../mms/db_interface.h"
#include "../include/rocketmq/CProducer.h"
#include "../include/rocketmq/CMessage.h"
#include "../include/rocketmq/CSendResult.h"
#include "../include/rocketmq/SimpleProducer.h"
#include "../rocketmq/CProducer.h"
#include "../rocketmq/CMessage.h"
#include "../rocketmq/CSendResult.h"
#include "../rocketmq/SimpleProducer.h"
//测试300数据用lnk20241202
#include <ctime>
#include <QThread>
//测试300数据用
//lnk20241209添加队列选择
#include "../include/rocketmq/MQSelector.h"
#include "../include/rocketmq/MQMessageQueue.h"
#include "../rocketmq/MQSelector.h"
#include "../rocketmq/MQMessageQueue.h"
//#include <atomic>
#include <vector>
#include <stdexcept>
@@ -25,13 +25,13 @@
#include <cstring>
//引入消费起点
#include "../include/rocketmq/DefaultMQPushConsumer.h"
#include "../include/rocketmq/ConsumeType.h"
#include "../rocketmq/DefaultMQPushConsumer.h"
#include "../rocketmq/ConsumeType.h"
// 引入提供的消费者接口头文件
#include "../include/rocketmq/CPushConsumer.h"
#include "../include/rocketmq/CCommon.h"
#include "../include/rocketmq/CMessageExt.h"
#include "../rocketmq/CPushConsumer.h"
#include "../rocketmq/CCommon.h"
#include "../rocketmq/CMessageExt.h"
#include <map>
#include <pthread.h> // 用于互斥锁(在 C++98 中没有 std::mutex
#include <utility> // for std::pair

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

File diff suppressed because it is too large Load Diff

View File

@@ -17,7 +17,7 @@ using namespace std;
#include <stdlib.h>
#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
@@ -35,29 +35,29 @@ size_t req_reply_datahub(void* ptr, size_t size, size_t nmemb, void* stream)
void SendWebAPI_Datahub(const string strUrl,char* topic,char* data)
{
// curl<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
// curl初始化
CURL* curl = curl_easy_init();
// curl<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
// curl返回值
CURLcode res;
if (curl)
{
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>curl<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
//设置curl的请求头
struct curl_slist* header_list = NULL;
header_list = curl_slist_append(header_list, "Content-Type:application/json;");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header_list);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//不接收响应头数据0代表不接收 1代表接收
curl_easy_setopt(curl, CURLOPT_HEADER, 0);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊpost<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//设置请求为post请求
curl_easy_setopt(curl, CURLOPT_POST, 1);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>URL<EFBFBD><EFBFBD>ַ
//设置请求的URL地址
curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>post<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>
//设置post请求的参数
cJSON* json_root = cJSON_CreateObject();
cJSON_AddItemToObject(json_root, "topic", cJSON_CreateString(topic));
@@ -67,16 +67,16 @@ void SendWebAPI_Datahub(const string strUrl,char* topic,char* data)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, szjson);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ssl<EFBFBD><EFBFBD>֤
//设置ssl验证
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
//CURLOPT_VERBOSE<EFBFBD><EFBFBD>ֵΪ1ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ϸ<EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//CURLOPT_VERBOSE的值为1时会显示详细的调试信息
curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>պ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
//设置数据接收和写入函数
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply_datahub);
string resPost0;
@@ -84,22 +84,22 @@ void SendWebAPI_Datahub(const string strUrl,char* topic,char* data)
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
//<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʱʱ<EFBFBD><EFBFBD>
//设置超时时间
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
printf(">>>Testaliyun datahub Post in curl post\n");
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>post<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 开启post请求
res = curl_easy_perform(curl);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>ɹ<EFBFBD>
// 检查请求是否成功
if (res != CURLE_OK) {
printf("aliyun datahub failed res code: ");
}
else {
printf("aliyun datahub success,string %s", resPost0.c_str());
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>webapi<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ж<EFBFBD>
//后期添加webapi返回值判断
}
curl_slist_free_all(header_list);

478
cfg_parse/log4.cpp Normal file
View File

@@ -0,0 +1,478 @@
#include "../log4cplus/logger.h"
#include "../log4cplus/configurator.h"
#include "../log4cplus/fileappender.h"
#include "../log4cplus/layout.h"
#include "../log4cplus/ndc.h"
#include "../log4cplus/log4.h"
#include "../log4cplus/spi/loggingevent.h"
#include <iostream>
#include <map>
#include <set>
#include <string>
#include <ctime>
#include <sstream>
#include <pthread.h>
#include <unistd.h>
#include <cstring>
//目录创建
#include <sys/stat.h>
#include <sys/types.h>
//kafka结构定义
#include "../json/mms_json_inter.h"
#include "../mms/rdb_client.h"
#include "../include/node.h"//lnk20241223
extern unsigned int g_node_id;
extern int g_front_seg_index;
extern char subdir[128];
extern node_t* g_node;
//mq
extern QMutex kafka_data_list_mutex; //Kafka发送数据锁
extern QList<Ckafka_data_t> kafka_data_list; //kafka发送数据链表
//辅助函数
extern std::string intToString(int number);
//日志主题
extern std::string G_LOG_TOPIC;
//log4命名空间
using namespace log4cplus;
using namespace log4cplus::helpers;
////////////////////////////////////////////////////////辅助函数
std::string get_front_type_from_subdir() {
if (std::strstr(subdir, "cfg_3s_data") != NULL)
return "realTime";
else if (std::strstr(subdir, "cfg_soe_comtrade") != NULL)
return "comtrade";
else if (std::strstr(subdir, "cfg_recallhis_data") != NULL)
return "recall";
else if (std::strstr(subdir, "cfg_stat_data") != NULL)
return "stat";
else
return "unknown";
}
// 递归创建目录
bool create_directory_recursive(const std::string& path) {
size_t pos = 0;
std::string current;
while (pos != std::string::npos) {
pos = path.find('/', pos + 1);
current = path.substr(0, pos);
if (!current.empty() && access(current.c_str(), F_OK) != 0) {
if (mkdir(current.c_str(), 0755) != 0) {
perror(("mkdir failed: " + current).c_str());
return false;
}
}
}
return true;
}
//////////////////////////////////////////////////////////////////////
TypedLogger::TypedLogger() {}
TypedLogger::TypedLogger(const Logger& l, int t) : logger(l), logtype(t) {}
DebugSwitch::DebugSwitch() : debug_open(false), min_level(WARN_LOG_LEVEL) {}
void DebugSwitch::open() { debug_open = true; }
void DebugSwitch::close() {
debug_open = false;
targets.clear();
type_enable.clear();
}
void DebugSwitch::set_target(const std::string& name) { targets.insert(name); }
void DebugSwitch::set_level(int level) { min_level = level; }
void DebugSwitch::enable_type(int type) { type_enable[type] = true; }
void DebugSwitch::disable_type(int type) { type_enable[type] = false; }
bool DebugSwitch::match(const std::string& logger_name, int level, int logtype) {
if (!debug_open) return false;
if (level < min_level) return false;
if (type_enable.count(logtype) && !type_enable[logtype]) return false;
std::set<std::string>::iterator it;
for (it = targets.begin(); it != targets.end(); ++it) {
if (logger_name.find(*it) != std::string::npos)
return true;
}
return false;
}
std::map<std::string, TypedLogger> logger_map;
DebugSwitch g_debug_switch;
class SendAppender : public Appender {
protected:
void append(const spi::InternalLoggingEvent& event) {
std::string logger_name = event.getLoggerName();
int level = event.getLogLevel();
std::string msg = event.getMessage();
int logtype = (logger_name.find(".COM") != std::string::npos) ? LOGTYPE_COM : LOGTYPE_DATA;
std::string level_str;
if (logger_name.find("process") == 0)
level_str = "process";
else if (logger_name.find("monitor") != std::string::npos)
level_str = "measurepoint";
else
level_str = "terminal";
if (level == ERROR_LOG_LEVEL || level == WARN_LOG_LEVEL || g_debug_switch.match(logger_name, level, logtype)) {
std::ostringstream oss;
oss << "{\"processNo\":\"" << intToString(g_front_seg_index)
<< "\",\"id\":\"" << logger_name
<< "\",\"level\":\"" << level_str
<< "\",\"grade\":\"" << level
<< "\",\"logtype\":\"" << (logtype == LOGTYPE_COM ? "com" : "data")
<< "\",\"frontType\":\"" << get_front_type_from_subdir()
<< "\",\"log\":\"" << escape_json(msg) << "\"}";
std::string jsonString = oss.str();
Ckafka_data_t connect_info;
connect_info.strTopic = QString::fromStdString(G_LOG_TOPIC);
connect_info.strText = QString::fromStdString(jsonString);
kafka_data_list_mutex.lock();
kafka_data_list.append(connect_info);
kafka_data_list_mutex.unlock();
}
}
std::string escape_json(const std::string& input) {
std::ostringstream ss;
for (unsigned int i = 0; i < input.size(); ++i) {
switch (input[i]) {
case '\\': ss << "\\\\"; break;
case '"': ss << "\\\""; break;
case '\n': ss << "\\n"; break;
case '\r': ss << "\\r"; break;
case '\t': ss << "\\t"; break;
default: ss << input[i]; break;
}
}
return ss.str();
}
virtual void close() {
// 可空实现
}
public:
SendAppender() {}
};
//用来控制日志上送的结构
struct LOGEntry {
std::string id;
std::string level; // terminal / measurepoint
int logtype; // com / data
int min_grade;
int countdown;
};
//日志上送map管理
std::map<std::string, LOGEntry> g_log_entries;
pthread_mutex_t g_log_mutex = PTHREAD_MUTEX_INITIALIZER;
// 生成唯一 key
std::string build_debug_key(const std::string& id, const std::string& level, int logtype) {
return id + "|" + level + "|" + (logtype == 1 ? "COM" : "DATA");
}
// 外部线程中调用每秒更新所有倒计时0 则删除
void update_log_entries_countdown() {
pthread_mutex_lock(&g_log_mutex);
std::map<std::string, LOGEntry>::iterator it = g_log_entries.begin();
while (it != g_log_entries.end()) {
if (it->second.countdown > 0) {
it->second.countdown--;
if (it->second.countdown == 0) {
std::cout << "[LOG] debug日志上送自动关闭: " << it->first << std::endl;
it = g_log_entries.erase(it);
continue;
}
}
++it;
}
pthread_mutex_unlock(&g_log_mutex);
}
void process_log_command(const std::string& id, const std::string& level, const std::string& grade, const std::string& logtype_str) {
if (level != "terminal" && level != "measurepoint") return;
int type = (logtype_str == "com") ? LOGTYPE_COM : LOGTYPE_DATA;
int grade_level = (grade == "DEBUG") ? DEBUG_LOG_LEVEL : INFO_LOG_LEVEL;
std::string key = build_debug_key(id, level, type);
pthread_mutex_lock(&g_log_mutex);
LOGEntry& entry = g_log_entries[key]; // 会自动 insert 或取已有
entry.id = id;
entry.level = level;
entry.logtype = type;
entry.min_grade = grade_level;
entry.countdown = 60; // 重置倒计时
pthread_mutex_unlock(&g_log_mutex);
}
Logger init_logger(const std::string& full_name, const std::string& file_dir, const std::string& base_file) {
// 确保日志目录存在
create_directory_recursive(file_dir);
Logger logger = Logger::getInstance(full_name);
std::string file_path = file_dir + "/" + base_file + ".log";
// 使用滚动日志(大小轮转),最多保留 2 个备份,每个最大 1MB
SharedAppenderPtr fileAppender(new RollingFileAppender(file_path, 1 * 1024 * 1024, 2));
fileAppender->setLayout(std::auto_ptr<Layout>(
new PatternLayout("%D{%Y-%m-%d %H:%M:%S} [%p] [%c] %m%n")));
SharedAppenderPtr sendAppender(new SendAppender());
logger.addAppender(fileAppender);
logger.addAppender(sendAppender);
logger.setLogLevel(DEBUG_LOG_LEVEL);
return logger;
}
//进程的日志
void init_logger_process() {
std::string base_dir = std::string("/FeProject/") + subdir + "/processNo" + intToString(g_front_seg_index) + "/log";
logger_map["process"] = TypedLogger(init_logger("process", base_dir, "process"), LOGTYPE_DATA);
std::cout << "process log init ok" << std::endl;
}
//终端的日志
void init_loggers_bydevid(const char* dev_id)
{
if (!dev_id) return;
std::string terminal_id(dev_id); // 转为 std::string
std::string base_dir = std::string("/FeProject/") + subdir + "/processNo" + intToString(g_front_seg_index) + "/log";
ied_t* ied = NULL;
int iedno;
ied_usr_t* ied_usr = NULL;
for (iedno = 0; iedno < g_node->n_clients; iedno++) {
ied = g_node->clients[iedno];
if (!ied || !ied->usr_ext) {
std::cout << "ied No."<< iedno << " is null" << std::endl;
continue;
}
ied_usr = (ied_usr_t*)ied->usr_ext;
//跳过不匹配的终端
if (strcmp(ied_usr->terminal_id, dev_id) != 0) continue;
const char* ip_cstr = (ied->channel[0].addr_str != NULL) ? ied->channel[0].addr_str : "unknown";
std::string ip_str(ip_cstr);
std::string device_dir = base_dir + "/" + ip_str;
std::string device_key = std::string("terminal.") + dev_id;
// 添加判断:终端日志 logger 是否已存在
if (logger_map.find(ip_str + ".COM") == logger_map.end() &&
logger_map.find(ip_str + ".DATA") == logger_map.end()) {
// 所有终端日志com 和 data写到同一个 device 日志文件中
Logger device_logger = init_logger(device_key, device_dir, dev_id); //用终端id作为日志文件名
logger_map[ip_str + ".COM"] = TypedLogger(device_logger, LOGTYPE_COM);
logger_map[ip_str + ".DATA"] = TypedLogger(device_logger, LOGTYPE_DATA);
}
// 初始化监测点
// 监测点 logger 名称格式monitor.<mp_id>.COM / .DATA
for (int i = 0; i < 10; ++i) {
if (strlen(ied_usr->LD_info[i].mp_id) > 0){
std::ostringstream mon_key, mon_path, mon_name;
mon_key << "monitor." << ied_usr->LD_info[i].mp_id;
mon_path << device_dir << "/monitor" << i;//终端路径下用monitor+序号作为目录
mon_name << ied_usr->LD_info[i].mp_id;
// 添加判断:监测点 logger 是否已存在
if (logger_map.find(mon_key.str() + ".COM") == logger_map.end() &&
logger_map.find(mon_key.str() + ".DATA") == logger_map.end()) {
Logger mon_logger = init_logger(mon_key.str(), mon_path.str(), mon_name.str());
logger_map[mon_key.str() + ".COM"] = TypedLogger(mon_logger, LOGTYPE_COM);
logger_map[mon_key.str() + ".DATA"] = TypedLogger(mon_logger, LOGTYPE_DATA);
}
}
}
break; // 只匹配一个 terminal_id
}
}
void init_loggers() {
std::string base_dir = std::string("/FeProject/") + subdir + "/processNo" + intToString(g_front_seg_index) + "/log";
ied_t* ied = NULL;
int iedno;
ied_usr_t* ied_usr = NULL;
for (iedno = 0; iedno < g_node->n_clients; iedno++) {
ied = g_node->clients[iedno];
if (!ied || !ied->usr_ext) {
std::cout << "ied No."<< iedno << " is null" << std::endl;
continue;
}
ied_usr = (ied_usr_t*)ied->usr_ext;
const char* ip_cstr = (ied->channel[0].addr_str != NULL) ? ied->channel[0].addr_str : "unknown";
std::string ip_str(ip_cstr);
std::string device_dir = base_dir + "/" + ip_str;
std::string device_key = std::string("terminal.") + ied_usr->terminal_id;
// 所有终端日志com 和 data写到同一个 device 日志文件中
Logger device_logger = init_logger(device_key, device_dir, ied_usr->terminal_id); //用终端id作为日志文件名
logger_map[device_key + ".COM"] = TypedLogger(device_logger, LOGTYPE_COM);
logger_map[device_key + ".DATA"] = TypedLogger(device_logger, LOGTYPE_DATA);
char buf[256];
sprintf(buf, "终端id:%s终端级日志初始化完毕", ied_usr->terminal_id);
LOG4CPLUS_DEBUG(logger_map[device_key + ".DATA"].logger, buf);
// 初始化监测点
// 监测点 logger 名称格式monitor.<mp_id>.COM / .DATA
for (int i = 0; i < 10; ++i) {
if (strlen(ied_usr->LD_info[i].mp_id) > 0){
std::ostringstream mon_key, mon_path, mon_name;
mon_key << "monitor." << ied_usr->LD_info[i].mp_id;
mon_path << device_dir << "/monitor" << i;//终端路径下用monitor+序号作为目录
mon_name << ied_usr->LD_info[i].mp_id;
Logger mon_logger = init_logger(mon_key.str(), mon_path.str(), mon_name.str());
logger_map[mon_key.str() + ".COM"] = TypedLogger(mon_logger, LOGTYPE_COM);
logger_map[mon_key.str() + ".DATA"] = TypedLogger(mon_logger, LOGTYPE_DATA);
char buf[256];
sprintf(buf, "监测点id:%s监测点级日志初始化完毕", ied_usr->LD_info[i].mp_id);
LOG4CPLUS_DEBUG(logger_map[mon_key.str() + ".DATA"].logger, buf);
}
}
}
}
void remove_loggers_by_terminal_id(const char* terminal_id_cstr) {
if (!g_node || !terminal_id_cstr) return;
std::string terminal_id(terminal_id_cstr); // 转为 std::string
for (int iedno = 0; iedno < g_node->n_clients; ++iedno) {
ied_t* ied = g_node->clients[iedno];
if (!ied || !ied->usr_ext) continue;
ied_usr_t* ied_usr = (ied_usr_t*)ied->usr_ext;
if (strcmp(ied_usr->terminal_id, terminal_id.c_str()) != 0) continue;
// 删除终端日志 logger
std::string com_key = "terminal." + terminal_id + ".COM";
std::string data_key = "terminal." + terminal_id + ".DATA";
if (logger_map.count(com_key)) {
logger_map[com_key].logger.removeAllAppenders();
logger_map.erase(com_key);
}
if (logger_map.count(data_key)) {
logger_map[data_key].logger.removeAllAppenders();
logger_map.erase(data_key);
}
// 删除监测点日志 logger
for (int i = 0; i < 10; ++i) {
const char* mp_id = ied_usr->LD_info[i].mp_id;
if (strlen(mp_id) > 0) {
std::string mon_prefix = std::string("monitor.") + mp_id;
std::string mon_com_key = mon_prefix + ".COM";
std::string mon_data_key = mon_prefix + ".DATA";
if (logger_map.count(mon_com_key)) {
logger_map[mon_com_key].logger.removeAllAppenders();
logger_map.erase(mon_com_key);
}
if (logger_map.count(mon_data_key)) {
logger_map[mon_data_key].logger.removeAllAppenders();
logger_map.erase(mon_data_key);
}
}
}
std::cout << "[LOG] Logger for terminal_id=" << terminal_id << " removed.\n";
break; // 找到匹配终端后退出
}
}
extern "C" {
// 公共函数
void log4_log_with_level(const char* key, const char* msg, int level) {
std::map<std::string, TypedLogger>::iterator it = logger_map.find(key);
if (it == logger_map.end()) return;
Logger logger = it->second.logger;
switch (level) {
case 0: LOG4CPLUS_DEBUG(logger, msg); break;
case 1: LOG4CPLUS_INFO(logger, msg); break;
case 2: LOG4CPLUS_WARN(logger, msg); break;
case 3: LOG4CPLUS_ERROR(logger, msg); break;
default: break;
}
}
// 四个包装函数
void log_debug(const char* key, const char* msg) { log4_log_with_level(key, msg, 0); }
void log_info (const char* key, const char* msg) { log4_log_with_level(key, msg, 1); }
void log_warn (const char* key, const char* msg) { log4_log_with_level(key, msg, 2); }
void log_error(const char* key, const char* msg) { log4_log_with_level(key, msg, 3); }
}
/*
int main() {
initialize();
init_loggers();
LOG4CPLUS_INFO(logger_map["process.1.data"].logger, "程序启动PID=" << getpid());
LOG4CPLUS_WARN(logger_map["terminal.192.168.1.1.com"].logger, "串口异常,尝试重连");
LOG4CPLUS_INFO(logger_map["terminal.192.168.1.1.data"].logger, "终端运行状态正常");
LOG4CPLUS_DEBUG(logger_map["measurepoint.192.168.1.1.monitor1.data"].logger, "电压测量值=220.1V");
process_log_command("192.168.1.1.monitor1", "measurepoint", "DEBUG", "data");
LOG4CPLUS_DEBUG(logger_map["measurepoint.192.168.1.1.monitor1.data"].logger, "频率测量值=50.0Hz");
sleep(65);
LOG4CPLUS_ERROR(logger_map["terminal.192.168.1.2.data"].logger, "终端掉线");
return 0;
}
*/

View File

@@ -18,7 +18,7 @@ using namespace std;
#include <stdlib.h>
#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
@@ -35,39 +35,39 @@ size_t req_reply_nacos(void* ptr, size_t size, size_t nmemb, void* stream)
void read_nacos_param(const char* ptr, char* postgres_uid, char* postgres_pwd, char* web_clientid, char* web_clientsecret) {
//cout << ">>>GetDevice in reply" << (char*)ptr;
int flag = 1;
cJSON* json = cJSON_Parse((char*)ptr); //json<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
cJSON* json = cJSON_Parse((char*)ptr); //json格式序列化
cJSON* json_node;
cJSON* json_param;
if (json == NULL) {
printf("nacos error %s\n", cJSON_GetErrorPtr());
}
else {
json_node = cJSON_GetObjectItem(json, "status"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json, "status"); //获取result
if (json_node == NULL || json_node->valuestring == NULL || json_node->valuestring == "/0" || json_node->valuestring == "" || strcmp(json_node->valuestring, "000000") != 0) {
printf("status error :%s\n", cJSON_GetErrorPtr());
flag = 0;
}
json_node = cJSON_GetObjectItem(json, "errors"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json, "errors"); //获取result
if (json_node == NULL || json_node->valuestring == NULL || json_node->valuestring == "/0" || json_node->valuestring == "" || strcmp(json_node->valuestring, "success") != 0) {
printf("errors get falie: %s\n", cJSON_GetErrorPtr());
flag = 0;
}
if (flag) {
printf("read nacos success\n");
json_param = cJSON_GetObjectItem(json, "param"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "postgres_uid"); //<EFBFBD><EFBFBD>ȡresult
json_param = cJSON_GetObjectItem(json, "param"); //获取result
json_node = cJSON_GetObjectItem(json_param, "postgres_uid"); //获取result
if (json_node != NULL && strcmp(json_node->valuestring, "null") != 0) {
strcpy(postgres_uid, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "postgres_pwd"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "postgres_pwd"); //获取result
if (json_node != NULL && strcmp(json_node->valuestring, "null") != 0) {
strcpy(postgres_pwd, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "web_clientid"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "web_clientid"); //获取result
if (json_node != NULL && strcmp(json_node->valuestring, "null") != 0) {
strcpy(web_clientid, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "web_clientsecret"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "web_clientsecret"); //获取result
if (json_node != NULL && strcmp(json_node->valuestring, "null") != 0) {
strcpy(web_clientsecret, json_node->valuestring);
}
@@ -77,57 +77,57 @@ void read_nacos_param(const char* ptr, char* postgres_uid, char* postgres_pwd, c
}
void releaseMemory(char** ptr) {
if (*ptr != NULL) {
free(*ptr); // <EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
free(*ptr); // 释放内存
}
}
void SendWebAPI_Nacos(const string strUrl, const char* code, char* postgres_uid, char* postgres_pwd, char* web_clientid, char* web_clientsecret)
{
// curl<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
// curl初始化
CURL* curl = curl_easy_init();
// curl<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
// curl返回值
CURLcode res;
if (curl)
{
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>curl<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
//设置curl的请求头
struct curl_slist* header_list = NULL;
header_list = curl_slist_append(header_list, "Content-Type:application/json;");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header_list);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//不接收响应头数据0代表不接收 1代表接收
curl_easy_setopt(curl, CURLOPT_HEADER, 0);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊpost<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//设置请求为post请求
curl_easy_setopt(curl, CURLOPT_POST, 1);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>URL<EFBFBD><EFBFBD>ַ
//设置请求的URL地址
curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>post<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>
//设置post请求的参数
cJSON* json_root = cJSON_CreateObject();
cJSON_AddItemToObject(json_root, "code", cJSON_CreateString(code));
char* szjson = cJSON_Print(json_root);
printf(">>>json %s\n", szjson);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, szjson);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ssl<EFBFBD><EFBFBD>֤
//设置ssl验证
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
//CURLOPT_VERBOSE<EFBFBD><EFBFBD>ֵΪ1ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ϸ<EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//CURLOPT_VERBOSE的值为1时会显示详细的调试信息
curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>պ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
//设置数据接收和写入函数
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply_nacos);
string resPost0;
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&resPost0);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
//<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʱʱ<EFBFBD><EFBFBD>
//设置超时时间
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
printf(">>>Test nacos Post in curl post\n");
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>post<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 开启post请求
res = curl_easy_perform(curl);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>ɹ<EFBFBD>
// 检查请求是否成功
if (res != CURLE_OK) {
printf("nacos failed res code: ");
}
else {
printf("nacos success,string %s", resPost0.c_str());
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>webapi<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ж<EFBFBD>
//后期添加webapi返回值判断
read_nacos_param(resPost0.c_str(), postgres_uid, postgres_pwd, web_clientid, web_clientsecret);
}
curl_slist_free_all(header_list);
@@ -142,34 +142,34 @@ void SendWebAPI_Nacos(const string strUrl, const char* code, char* postgres_uid,
}
void SendWebAPI_Nacos_Ptr(const string strUrl, const char* code, char** ptr)
{
// curl<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
// curl初始化
CURL* curl = curl_easy_init();
// curl<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
// curl返回值
CURLcode res;
if (curl)
{
char url[100];
sprintf(url, "%s?code=%s", strUrl.c_str(), code);
printf(">>>json %s\n", url);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>URL
// 设置URL
curl_easy_setopt(curl, CURLOPT_URL, url);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>պ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
//设置数据接收和写入函数
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply_nacos);
string resPost0;
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&resPost0);
//<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʱʱ<EFBFBD><EFBFBD>
//设置超时时间
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>post<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 开启post请求
res = curl_easy_perform(curl);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>ɹ<EFBFBD>
// 检查请求是否成功
if (res != CURLE_OK) {
printf("nacos failed res code: ");
}
else {
printf(">>> nacos return str:%s \n", resPost0.c_str());
*ptr = (char*)malloc(strlen(resPost0.c_str()) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>ռ<EFBFBD>
*ptr = (char*)malloc(strlen(resPost0.c_str()) + 1); // 分配足够的内存空间
if (*ptr != NULL) {
strcpy(*ptr, resPost0.c_str());
}
@@ -196,96 +196,96 @@ void Read_Nacos_Param_Postgres(char** database_ip, char** database_port, char**
char* ptr=NULL;
SendWebAPI_Nacos_Ptr("http://127.0.0.1:8091/powerQuality/getProperties", "postgres", &ptr);
int flag = 1;
cJSON* json = cJSON_Parse(ptr); //json<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
cJSON* json = cJSON_Parse(ptr); //json格式序列化
cJSON* json_node;
cJSON* json_param;
if (json == NULL) {
printf("nacos error %s\n", cJSON_GetErrorPtr());
}
else {
json_node = cJSON_GetObjectItem(json, "status"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json, "status"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "000000") != 0) {
printf("status error :%s\n", cJSON_GetErrorPtr());
flag = 0;
}
json_node = cJSON_GetObjectItem(json, "errors"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json, "errors"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "success") != 0) {
printf("errors get falie: %s\n", cJSON_GetErrorPtr());
flag = 0;
}
if (flag) {
printf("read nacos success\n");
json_param = cJSON_GetObjectItem(json, "param"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "ip"); //<EFBFBD><EFBFBD>ȡresult
json_param = cJSON_GetObjectItem(json, "param"); //获取result
json_node = cJSON_GetObjectItem(json_param, "ip"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*database_ip != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*database_ip);
}
*database_ip = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*database_ip = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*database_ip, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "port"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "port"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*database_port != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*database_port);
}
*database_port = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*database_port = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*database_port, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "database"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "database"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*postgres_database != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*postgres_database);
}
*postgres_database = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*postgres_database = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*postgres_database, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "username"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "username"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*postgres_username != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*postgres_username);
}
*postgres_username = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*postgres_username = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*postgres_username, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "password"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "password"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*postgres_password != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*postgres_password);
}
*postgres_password = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*postgres_password = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*postgres_password, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "schema"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "schema"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*postgres_schema != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*postgres_schema);
}
*postgres_schema = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*postgres_schema = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*postgres_schema, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "dnsname"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "dnsname"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*postgres_dnsname != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*postgres_dnsname);
}
*postgres_dnsname = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*postgres_dnsname = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*postgres_dnsname, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "tablePrefix"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "tablePrefix"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*postgres_tableprefix != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*postgres_tableprefix);
}
*postgres_tableprefix = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*postgres_tableprefix = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*postgres_tableprefix, json_node->valuestring);
}
}
@@ -299,132 +299,132 @@ void Read_Nacos_Param_Kafka(char** broker_list, char** topic_stat, char** topic_
char* ptr = NULL;
SendWebAPI_Nacos_Ptr("http://127.0.0.1:8091/powerQuality/getProperties", "kafka", &ptr);
int flag = 1;
cJSON* json = cJSON_Parse(ptr); //json<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
cJSON* json = cJSON_Parse(ptr); //json格式序列化
cJSON* json_node;
cJSON* json_param;
if (json == NULL) {
printf("nacos error %s\n", cJSON_GetErrorPtr());
}
else {
json_node = cJSON_GetObjectItem(json, "status"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json, "status"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "000000") != 0) {
printf("status error :%s\n", cJSON_GetErrorPtr());
flag = 0;
}
json_node = cJSON_GetObjectItem(json, "errors"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json, "errors"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "success") != 0) {
printf("errors get falie: %s\n", cJSON_GetErrorPtr());
flag = 0;
}
if (flag) {
printf("read nacos success\n");
json_param = cJSON_GetObjectItem(json, "param"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "brokerList"); //<EFBFBD><EFBFBD>ȡresult
json_param = cJSON_GetObjectItem(json, "param"); //获取result
json_node = cJSON_GetObjectItem(json_param, "brokerList"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*broker_list != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*broker_list);
}
*broker_list = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*broker_list = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*broker_list, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "hisTopic"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "hisTopic"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*topic_stat != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*topic_stat);
}
*topic_stat = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*topic_stat = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*topic_stat, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "pstTopic"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "pstTopic"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*topic_pst != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*topic_pst);
}
*topic_pst = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*topic_pst = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*topic_pst, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "pltTopic"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "pltTopic"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*topic_plt != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*topic_plt);
}
*topic_plt = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*topic_plt = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*topic_plt, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "eventTopic"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "eventTopic"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*topic_event != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*topic_event);
}
*topic_event = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*topic_event = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*topic_event, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "almTopic"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "almTopic"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*topic_alarm != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*topic_alarm);
}
*topic_alarm = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*topic_alarm = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*topic_alarm, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "sngTopic"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "sngTopic"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*topic_sng != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*topic_sng);
}
*topic_sng = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*topic_sng = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*topic_sng, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "protocol"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "protocol"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*protocol != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*protocol);
}
*protocol = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*protocol = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*protocol, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "mechanisms"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "mechanisms"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*mechanisms != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*mechanisms);
}
*mechanisms = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*mechanisms = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*mechanisms, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "serviceName"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "serviceName"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*service_name != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*service_name);
}
*service_name = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*service_name = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*service_name, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "principal"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "principal"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*principal != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*principal);
}
*principal = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*principal = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*principal, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "domainName"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "domainName"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*domain_name != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*domain_name);
}
*domain_name = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*domain_name = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*domain_name, json_node->valuestring);
}
}
@@ -435,69 +435,69 @@ void Read_Nacos_Param_Web(char** client_id, char** client_secret, char** token_u
char* ptr = NULL;
SendWebAPI_Nacos_Ptr("http://127.0.0.1:8091/powerQuality/getProperties", "web", &ptr);
int flag = 1;
cJSON* json = cJSON_Parse(ptr); //json<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
cJSON* json = cJSON_Parse(ptr); //json格式序列化
cJSON* json_node;
cJSON* json_param;
if (json == NULL) {
printf("nacos error %s\n", cJSON_GetErrorPtr());
}
else {
json_node = cJSON_GetObjectItem(json, "status"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json, "status"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "000000") != 0) {
printf("status error :%s\n", cJSON_GetErrorPtr());
flag = 0;
}
json_node = cJSON_GetObjectItem(json, "errors"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json, "errors"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "success") != 0) {
printf("errors get falie: %s\n", cJSON_GetErrorPtr());
flag = 0;
}
if (flag) {
printf("read nacos success\n");
json_param = cJSON_GetObjectItem(json, "param"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "clientId"); //<EFBFBD><EFBFBD>ȡresult
json_param = cJSON_GetObjectItem(json, "param"); //获取result
json_node = cJSON_GetObjectItem(json_param, "clientId"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*client_id != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*client_id);
}
*client_id = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*client_id = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*client_id, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "clientSecret"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "clientSecret"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*client_secret != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*client_secret);
}
*client_secret = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*client_secret = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*client_secret, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "tokenUrl"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "tokenUrl"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*token_url != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*token_url);
}
*token_url = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*token_url = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*token_url, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "deviceUrl"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "deviceUrl"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*device_url != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*device_url);
}
*device_url = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*device_url = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*device_url, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "grantType"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "grantType"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*grant_type != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*grant_type);
}
*grant_type = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*grant_type = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*grant_type, json_node->valuestring);
}
@@ -509,46 +509,46 @@ void Read_Nacos_Param_Flag(int* file_flag, int* send_flag, int* front_inst, ch
char* ptr = NULL;
SendWebAPI_Nacos_Ptr("http://127.0.0.1:8091/powerQuality/getProperties", "flag", &ptr);
int flag = 1;
cJSON* json = cJSON_Parse(ptr); //json<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
cJSON* json = cJSON_Parse(ptr); //json格式序列化
cJSON* json_node;
cJSON* json_param;
if (json == NULL) {
printf("nacos error: %s\n", ptr);
}
else {
json_node = cJSON_GetObjectItem(json, "status"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json, "status"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "000000") != 0) {
printf("status error :%s\n", cJSON_GetErrorPtr());
flag = 0;
}
json_node = cJSON_GetObjectItem(json, "errors"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json, "errors"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "success") != 0) {
printf("errors get falie: %s\n", cJSON_GetErrorPtr());
flag = 0;
}
if (flag) {
printf("read nacos success\n");
json_param = cJSON_GetObjectItem(json, "param"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "fileFlag"); //<EFBFBD><EFBFBD>ȡresult
json_param = cJSON_GetObjectItem(json, "param"); //获取result
json_node = cJSON_GetObjectItem(json_param, "fileFlag"); //获取result
if (json_node && json_node->type == cJSON_String) {
*file_flag= atoi(json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "sendFlag"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "sendFlag"); //获取result
if (json_node && json_node->type == cJSON_String) {
*send_flag = atoi(json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "frontInst"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "frontInst"); //获取result
if (json_node && json_node->type == cJSON_String) {
*front_inst = atoi(json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "frontIP"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "frontIP"); //获取result
if (json_node && json_node->type == cJSON_String) {
//***postgres_pwd = json_node->valuestring;
if (*front_ip != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*front_ip);
}
*front_ip = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*front_ip = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*front_ip, json_node->valuestring);
}
@@ -560,35 +560,35 @@ void Read_Nacos_Param_Recall(int* recall_len, int* recall_sta, int* recall_daily
char* ptr = NULL;
SendWebAPI_Nacos_Ptr("http://127.0.0.1:8091/powerQuality/getProperties", "recall", &ptr);
int flag = 1;
cJSON* json = cJSON_Parse(ptr); //json<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
cJSON* json = cJSON_Parse(ptr); //json格式序列化
cJSON* json_node;
cJSON* json_param;
if (json == NULL) {
printf("nacos error %s\n", cJSON_GetErrorPtr());
}
else {
json_node = cJSON_GetObjectItem(json, "status"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json, "status"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "000000") != 0) {
printf("status error :%s\n", cJSON_GetErrorPtr());
flag = 0;
}
json_node = cJSON_GetObjectItem(json, "errors"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json, "errors"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "success") != 0) {
printf("errors get falie: %s\n", cJSON_GetErrorPtr());
flag = 0;
}
if (flag) {
printf("read nacos success\n");
json_param = cJSON_GetObjectItem(json, "param"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "recall_lenth"); //<EFBFBD><EFBFBD>ȡresult
json_param = cJSON_GetObjectItem(json, "param"); //获取result
json_node = cJSON_GetObjectItem(json_param, "recall_lenth"); //获取result
if (json_node && json_node->type == cJSON_String) {
*recall_len = atoi(json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "recall_start"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "recall_start"); //获取result
if (json_node && json_node->type == cJSON_String) {
*recall_sta = atoi(json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "recall_dailytime"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "recall_dailytime"); //获取result
if (json_node && json_node->type == cJSON_String) {
*recall_daily = atoi(json_node->valuestring);
}
@@ -600,51 +600,51 @@ void Read_Nacos_Param_Uds(char** uds_upload_url, char** uds_download_url, char**
char* ptr = NULL;
SendWebAPI_Nacos_Ptr("http://127.0.0.1:8091/powerQuality/getProperties", "uds", &ptr);
int flag = 1;
cJSON* json = cJSON_Parse(ptr); //json<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
cJSON* json = cJSON_Parse(ptr); //json格式序列化
cJSON* json_node;
cJSON* json_param;
if (json == NULL) {
printf("nacos error %s\n", cJSON_GetErrorPtr());
}
else {
json_node = cJSON_GetObjectItem(json, "status"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json, "status"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "000000") != 0) {
printf("status error :%s\n", cJSON_GetErrorPtr());
flag = 0;
}
json_node = cJSON_GetObjectItem(json, "errors"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json, "errors"); //获取result
if (json_node == NULL || strcmp(json_node->valuestring, "success") != 0) {
printf("errors get falie: %s\n", cJSON_GetErrorPtr());
flag = 0;
}
if (flag) {
printf("read nacos success\n");
json_param = cJSON_GetObjectItem(json, "param"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "udsUploadUrl"); //<EFBFBD><EFBFBD>ȡresult
json_param = cJSON_GetObjectItem(json, "param"); //获取result
json_node = cJSON_GetObjectItem(json_param, "udsUploadUrl"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*uds_upload_url != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*uds_upload_url);
}
*uds_upload_url = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*uds_upload_url = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*uds_upload_url, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "udsDownloadUrl"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "udsDownloadUrl"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*uds_download_url != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*uds_download_url);
}
*uds_download_url = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*uds_download_url = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*uds_download_url, json_node->valuestring);
}
json_node = cJSON_GetObjectItem(json_param, "UdsDeleteUrl"); //<EFBFBD><EFBFBD>ȡresult
json_node = cJSON_GetObjectItem(json_param, "UdsDeleteUrl"); //获取result
if (json_node && json_node->type == cJSON_String) {
if (*uds_delete_url != NULL) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ棬<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>ڴ<EFBFBD>
// 如果已经分配了内存,则释放内存
free(*uds_delete_url);
}
*uds_delete_url = (char*)malloc(strlen(json_node->valuestring) + 1); // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
*uds_delete_url = (char*)malloc(strlen(json_node->valuestring) + 1); // 分配内存
strcpy(*uds_delete_url, json_node->valuestring);
}

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
extern "C" {
@@ -40,33 +40,33 @@ size_t req_reply_device(void* ptr, size_t size, size_t nmemb, void* stream)
void SendWebAPI_Test(const string strUrl)
{
// curl<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
// curl初始化
CURL* curl = curl_easy_init();
// curl<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
// curl返回值
CURLcode res;
if (curl)
{
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>curl<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
//设置curl的请求头
struct curl_slist* header_list = NULL;
header_list = curl_slist_append(header_list, "Content-Type:application/json;");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header_list);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//不接收响应头数据0代表不接收 1代表接收
curl_easy_setopt(curl, CURLOPT_HEADER, 0);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊpost<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//设置请求为post请求
curl_easy_setopt(curl, CURLOPT_POST, 1);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>URL<EFBFBD><EFBFBD>ַ
//设置请求的URL地址
curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>post<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>
//设置post请求的参数
cJSON* json_root = cJSON_CreateObject();
cJSON* json_param = cJSON_CreateObject();
cJSON_AddItemToObject(json_root, "code", cJSON_CreateString("putObject"));
cJSON_AddItemToObject(json_root, "param", json_param);
//param<EFBFBD><EFBFBD>
//param
cJSON_AddItemToObject(json_param, "object_name", cJSON_CreateString("comtrade/pq/Device.xml"));
cJSON_AddItemToObject(json_param, "localfile_name", cJSON_CreateString("/FeProject/etc/Device_Config.xml"));
@@ -77,16 +77,16 @@ void SendWebAPI_Test(const string strUrl)
//char* pszEncodeSecret = curl_easy_escape(curl, strclientsecret.c_str(), strclientsecret.length());
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, szjson);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ssl<EFBFBD><EFBFBD>֤
//设置ssl验证
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
//CURLOPT_VERBOSE<EFBFBD><EFBFBD>ֵΪ1ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ϸ<EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//CURLOPT_VERBOSE的值为1时会显示详细的调试信息
curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>պ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
//设置数据接收和写入函数
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply_device);
@@ -95,14 +95,14 @@ void SendWebAPI_Test(const string strUrl)
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
//<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʱʱ<EFBFBD><EFBFBD>
//设置超时时间
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
printf(">>>TestHuaweiyun Obs Post in curl post\n");
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>post<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 开启post请求
res = curl_easy_perform(curl);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>ɹ<EFBFBD>
// 检查请求是否成功
if (res != CURLE_OK) {
printf("Huaweiyun Obs failed res code: " );
}
@@ -128,32 +128,32 @@ void TestOBS()
void SendWebAPI(const string strUrl, char* localpath, char* cloudpath,const char* code)
{
// curl<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
// curl初始化
CURL* curl = curl_easy_init();
// curl<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
// curl返回值
CURLcode res;
if (curl)
{
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>curl<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
//设置curl的请求头
struct curl_slist* header_list = NULL;
header_list = curl_slist_append(header_list, "Content-Type:application/json;");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header_list);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//不接收响应头数据0代表不接收 1代表接收
curl_easy_setopt(curl, CURLOPT_HEADER, 0);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊpost<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//设置请求为post请求
curl_easy_setopt(curl, CURLOPT_POST, 1);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>URL<EFBFBD><EFBFBD>ַ
//设置请求的URL地址
curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>post<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>
//设置post请求的参数
cJSON* json_root = cJSON_CreateObject();
cJSON* json_param = cJSON_CreateObject();
cJSON_AddItemToObject(json_root, "code", cJSON_CreateString(code));
cJSON_AddItemToObject(json_root, "param", json_param);
//param<EFBFBD><EFBFBD>
//param
cJSON_AddItemToObject(json_param, "object_name", cJSON_CreateString(cloudpath));
cJSON_AddItemToObject(json_param, "localfile_name", cJSON_CreateString(localpath));
@@ -161,16 +161,16 @@ void SendWebAPI(const string strUrl, char* localpath, char* cloudpath,const char
printf(">>>json %s\n", szjson);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, szjson);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ssl<EFBFBD><EFBFBD>֤
//设置ssl验证
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
//CURLOPT_VERBOSE<EFBFBD><EFBFBD>ֵΪ1ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ϸ<EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//CURLOPT_VERBOSE的值为1时会显示详细的调试信息
curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>պ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
//设置数据接收和写入函数
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply_device);
@@ -179,14 +179,14 @@ void SendWebAPI(const string strUrl, char* localpath, char* cloudpath,const char
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
//<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʱʱ<EFBFBD><EFBFBD>
//设置超时时间
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
printf(">>>TestHuaweiyun Obs Post in curl post\n");
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>post<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 开启post请求
res = curl_easy_perform(curl);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>ɹ<EFBFBD>
// 检查请求是否成功
if (res != CURLE_OK) {
printf("Huaweiyun Obs failed res code: ");
}
@@ -212,32 +212,32 @@ void OBSFile(char* localpath,char* cloudpath,const char* code)
void SendWebAPI_del(const string strUrl, char* cloudpath, const char* code)
{
// curl<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
// curl初始化
CURL* curl = curl_easy_init();
// curl<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
// curl返回值
CURLcode res;
if (curl)
{
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>curl<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
//设置curl的请求头
struct curl_slist* header_list = NULL;
header_list = curl_slist_append(header_list, "Content-Type:application/json;");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header_list);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//不接收响应头数据0代表不接收 1代表接收
curl_easy_setopt(curl, CURLOPT_HEADER, 0);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊpost<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//设置请求为post请求
curl_easy_setopt(curl, CURLOPT_POST, 1);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>URL<EFBFBD><EFBFBD>ַ
//设置请求的URL地址
curl_easy_setopt(curl, CURLOPT_URL, strUrl.c_str());
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>post<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>
//设置post请求的参数
cJSON* json_root = cJSON_CreateObject();
cJSON* json_param = cJSON_CreateObject();
cJSON_AddItemToObject(json_root, "code", cJSON_CreateString(code));
cJSON_AddItemToObject(json_root, "param", json_param);
//param<EFBFBD><EFBFBD>
//param
cJSON_AddItemToObject(json_param, "object_name", cJSON_CreateString(cloudpath));
cJSON_AddNullToObject(json_param, "localfile_name");
@@ -246,16 +246,16 @@ void SendWebAPI_del(const string strUrl, char* cloudpath, const char* code)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, szjson);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ssl<EFBFBD><EFBFBD>֤
//设置ssl验证
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
//CURLOPT_VERBOSE<EFBFBD><EFBFBD>ֵΪ1ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ϸ<EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//CURLOPT_VERBOSE的值为1时会显示详细的调试信息
curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>պ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
//设置数据接收和写入函数
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply_device);
@@ -264,14 +264,14 @@ void SendWebAPI_del(const string strUrl, char* cloudpath, const char* code)
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
//<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʱʱ<EFBFBD><EFBFBD>
//设置超时时间
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
printf(">>>TestHuaweiyun Obs Post in curl post\n");
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>post<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 开启post请求
res = curl_easy_perform(curl);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>ɹ<EFBFBD>
// 检查请求是否成功
if (res != CURLE_OK) {
printf("Huaweiyun Obs failed res code: ");
}

View File

@@ -47,7 +47,7 @@ void TestOSS()
aos_pool_t *pool = NULL;
apr_status_t ret;
/* <EFBFBD>ڳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>aos_http_io_initialize<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>*/
/* 在程序入口调用aos_http_io_initialize方法来初始化网络、内存等全局资源。*/
printf(">>>TestOSS ini Start");
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
return;
@@ -65,13 +65,13 @@ void TestOSS()
return ;
}
void PutOSS(char* File_Name,char* data) //zw<EFBFBD>޸<EFBFBD> 2023-9-7 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>oss<EFBFBD>ļ<EFBFBD>
void PutOSS(char* File_Name,char* data) //zw修改 2023-9-7 上送oss文件
{
apr_file_t* output = NULL;
aos_pool_t* pool = NULL;
apr_status_t ret;
/* <EFBFBD>ڳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>aos_http_io_initialize<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>*/
/* 在程序入口调用aos_http_io_initialize方法来初始化网络、内存等全局资源。*/
printf(">>>PutOSS ini Start");
printf(File_Name);
printf(data);
@@ -82,7 +82,7 @@ void PutOSS(char* File_Name,char* data) //zw
printf(">>>PutOSS put Start");
put_object_from_file_new(File_Name, data);//ʹ<EFBFBD><EFBFBD>buffer<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
put_object_from_file_new(File_Name, data);//使用buffer推送文件
printf(">>>PutOSS put End");
@@ -91,13 +91,13 @@ void PutOSS(char* File_Name,char* data) //zw
return;
}
void GetOSS(char* File_Name,char* savepath) //zw<EFBFBD>޸<EFBFBD> 2023-9-7 <EFBFBD><EFBFBD>ȡoss<EFBFBD>ļ<EFBFBD>
void GetOSS(char* File_Name,char* savepath) //zw修改 2023-9-7 获取oss文件
{
apr_file_t* output = NULL;
aos_pool_t* pool = NULL;
apr_status_t ret;
/* <EFBFBD>ڳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>aos_http_io_initialize<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>*/
/* 在程序入口调用aos_http_io_initialize方法来初始化网络、内存等全局资源。*/
printf(">>>GetOSS ini Start");
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
return;
@@ -105,7 +105,7 @@ void GetOSS(char* File_Name,char* savepath) //zw
printf(">>>GetOSS put Start");
get_object_to_file_new(File_Name,savepath);//ʹ<EFBFBD><EFBFBD>buffer<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
get_object_to_file_new(File_Name,savepath);//使用buffer推送文件
printf(">>>GetOSS put End");
@@ -120,7 +120,7 @@ void DelOSS(char* File_Name)
aos_pool_t* pool = NULL;
apr_status_t ret;
/* <EFBFBD>ڳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><EFBFBD><EFBFBD>aos_http_io_initialize<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>*/
/* 在程序入口调用aos_http_io_initialize方法来初始化网络、内存等全局资源。*/
printf(">>>DelOSS ini Start");
if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
return;
@@ -128,7 +128,7 @@ void DelOSS(char* File_Name)
printf(">>>DelOSS put Start");
delete_object_new(File_Name);//ʹ<EFBFBD><EFBFBD>buffer<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
delete_object_new(File_Name);//使用buffer推送文件
printf(">>>DelOSS put End");
@@ -194,7 +194,7 @@ void put_object_from_buffer()
aos_pool_destroy(p);
}
void put_object_from_buffer_new(char* File_Name,char* data)//zw<EFBFBD>޸<EFBFBD> 2023-9-7 oss<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void put_object_from_buffer_new(char* File_Name,char* data)//zw修改 2023-9-7 oss推送
{
aos_pool_t* p = NULL;
aos_string_t bucket;
@@ -237,7 +237,7 @@ void put_object_from_file()
aos_pool_t *p = NULL;
aos_string_t bucket;
aos_string_t object;
/* <EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>CNAME<EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ʹ<EFBFBD>á<EFBFBD>*/
/* 是否使用了CNAME。0表示不使用。*/
int is_cname = 0;
aos_table_t *headers = NULL;
aos_table_t *resp_headers = NULL;
@@ -246,9 +246,9 @@ void put_object_from_file()
aos_status_t *s = NULL;
aos_string_t file;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>أ<EFBFBD>pool<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD>apr_pool_t<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>apr<EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>*/
/* 用于内存管理的内存池pool等价于apr_pool_t。其实现代码在apr库中。*/
aos_pool_create(&p, NULL);
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>options<EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>endpoint<EFBFBD><EFBFBD>access_key_id<EFBFBD><EFBFBD>acces_key_secret<EFBFBD><EFBFBD>is_cname<EFBFBD><EFBFBD>curl<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>*/
/* 创建并初始化options该参数包括endpointaccess_key_idacces_key_secretis_cnamecurl等全局配置信息。*/
options = oss_request_options_create(p);
init_sample_request_options(options, is_cname);
aos_str_set(&bucket, BUCKET_NAME);
@@ -274,7 +274,7 @@ void put_object_from_file_new(char* File_Name, char* path)
aos_pool_t* p = NULL;
aos_string_t bucket;
aos_string_t object;
/* <EFBFBD>Ƿ<EFBFBD>ʹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>CNAME<EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ʹ<EFBFBD>á<EFBFBD>*/
/* 是否使用了CNAME。0表示不使用。*/
int is_cname = 0;
aos_table_t* headers = NULL;
aos_table_t* resp_headers = NULL;
@@ -283,9 +283,9 @@ void put_object_from_file_new(char* File_Name, char* path)
aos_status_t* s = NULL;
aos_string_t file;
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>أ<EFBFBD>pool<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD>apr_pool_t<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>apr<EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>*/
/* 用于内存管理的内存池pool等价于apr_pool_t。其实现代码在apr库中。*/
aos_pool_create(&p, NULL);
/* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>options<EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>endpoint<EFBFBD><EFBFBD>access_key_id<EFBFBD><EFBFBD>acces_key_secret<EFBFBD><EFBFBD>is_cname<EFBFBD><EFBFBD>curl<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>*/
/* 创建并初始化options该参数包括endpointaccess_key_idacces_key_secretis_cnamecurl等全局配置信息。*/
options = oss_request_options_create(p);
init_sample_request_options(options, is_cname);
aos_str_set(&bucket, BUCKET_NAME);

View File

@@ -17,7 +17,7 @@ using namespace std;
#include <stdlib.h>
#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
@@ -31,33 +31,33 @@ size_t req_reply(void* ptr, size_t size, size_t nmemb, void* stream)
return size * nmemb;
}
/**
* @brief Get_Uuid <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>json,<EFBFBD>õ<EFBFBD>uuid
* @param ptr <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param uuid <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 Get_Uuid 解析返回json,得到uuid
* @param ptr 需解码的数据
* @param uuid 需解码的数据大小
* @return int 0:成功 -1:无效参数
* 注意解码的数据的大小必须大于4且是4的倍数
*/
int Get_Uuid(const char* ptr, char* uuid,char* filename)
{
int result = 0;
cJSON* json = cJSON_Parse((char*)ptr); //json<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
cJSON* json = cJSON_Parse((char*)ptr); //json格式序列化
cJSON* json_code;
cJSON* json_data;
cJSON* json_msg;
if (json) {
json_code = cJSON_GetObjectItem(json, "code"); //<EFBFBD><EFBFBD>ȡsuccess
json_msg = cJSON_GetObjectItem(json, "msg"); //<EFBFBD><EFBFBD>ȡsuccess
json_data = cJSON_GetObjectItem(json, "data"); //<EFBFBD><EFBFBD>ȡdata
json_code = cJSON_GetObjectItem(json, "code"); //获取success
json_msg = cJSON_GetObjectItem(json, "msg"); //获取success
json_data = cJSON_GetObjectItem(json, "data"); //获取data
if (json_code && json_code->type == cJSON_Number && json_code->valueint==0) {
printf("upload uds success\n");
cJSON* json_uuid;
cJSON* json_filename;
json_uuid = cJSON_GetObjectItem(json_data, "storeId"); //<EFBFBD><EFBFBD>ȡdata
json_uuid = cJSON_GetObjectItem(json_data, "storeId"); //获取data
if (json_uuid && json_uuid->type == cJSON_String) {
strcpy(uuid, json_uuid->valuestring);
printf("read uds uuid success:%s\n", uuid);
}
json_filename = cJSON_GetObjectItem(json_data, "fileName"); //<EFBFBD><EFBFBD>ȡdata
json_filename = cJSON_GetObjectItem(json_data, "fileName"); //获取data
if (json_filename && json_filename->type == cJSON_String) {
strcpy(filename, json_filename->valuestring);
printf("read uds filename success:%s\n", filename);
@@ -82,10 +82,10 @@ int Get_Uuid(const char* ptr, char* uuid,char* filename)
cJSON_Delete(json);
return result;
}
// <EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
// 将字节数组写入文件
void Write_Byte_Array_To_File(char* local_path, char* data_array, long size)
{
// <EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
// 将字节数组写入文件
FILE* outFile = fopen(local_path, "wb");
if (outFile != NULL) {
fwrite(data_array, sizeof(char), size, outFile);
@@ -98,21 +98,21 @@ void Write_Byte_Array_To_File(char* local_path, char* data_array, long size)
}
void Save_File(const char* ptr, char* local_path)
{
cJSON* json = cJSON_Parse((char*)ptr); //json<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>
cJSON* json = cJSON_Parse((char*)ptr); //json格式序列化
cJSON* json_success;
cJSON* json_data;
cJSON* json_msg;
if (json) {
json_success = cJSON_GetObjectItem(json, "sucess"); //<EFBFBD><EFBFBD>ȡsuccess
json_msg = cJSON_GetObjectItem(json, "msg"); //<EFBFBD><EFBFBD>ȡsuccess
json_data = cJSON_GetObjectItem(json, "data"); //<EFBFBD><EFBFBD>ȡdata
json_success = cJSON_GetObjectItem(json, "sucess"); //获取success
json_msg = cJSON_GetObjectItem(json, "msg"); //获取success
json_data = cJSON_GetObjectItem(json, "data"); //获取data
if (json_success && json_success->type == cJSON_True) {
printf("save uds file success\n");
if (json_data && json_data->type == cJSON_String) {
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 计算解码后的字符串长度
long decodedLen = strlen(json_data->valuestring) * 3 / 4;
char* decodedStr = (char*)malloc(decodedLen + 1);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Base64<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 进行Base64解码
int success = base64_decode(json_data->valuestring, strlen(json_data->valuestring), decodedStr, &decodedLen);
Write_Byte_Array_To_File(local_path, decodedStr, decodedLen);
free(decodedStr);
@@ -136,58 +136,58 @@ int WebAPI_Uds_Upload(char* strUrl, char* loacl_path, char* uuid,char* filename)
{
int result = 0;
printf("loaclpath: %s\n", loacl_path);
// curl<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
// curl初始化
CURL* curl = curl_easy_init();
// curl<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
// curl返回值
CURLcode res;
if (curl)
{
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>curl<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
//设置curl的请求头
struct curl_slist* header_list = NULL;
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Content-TypeΪmultipart/form-data
//设置Content-Typemultipart/form-data
header_list = curl_slist_append(header_list, "Content-Type: multipart/form-data");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header_list);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//不接收响应头数据0代表不接收 1代表接收
curl_easy_setopt(curl, CURLOPT_HEADER, 0);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊpost<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//设置请求为post请求
curl_easy_setopt(curl, CURLOPT_POST, 1);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>URL<EFBFBD><EFBFBD>ַ
//设置请求的URL地址
curl_easy_setopt(curl, CURLOPT_URL, strUrl);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>post<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>
//设置post请求的参数
struct curl_httppost* formpost = NULL;
struct curl_httppost* lastptr = NULL;
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>form-data<EFBFBD>ֶ<EFBFBD>
// 添加form-data字段
curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "file", CURLFORM_FILE, loacl_path, CURLFORM_END);
//curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "password", CURLFORM_COPYCONTENTS, "secretpassword", CURLFORM_END);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ssl<EFBFBD><EFBFBD>֤
//设置ssl验证
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
//CURLOPT_VERBOSE<EFBFBD><EFBFBD>ֵΪ1ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ϸ<EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//CURLOPT_VERBOSE的值为1时会显示详细的调试信息
curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>պ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
//设置数据接收和写入函数
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply);
string resPost0;
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&resPost0);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
//<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʱʱ<EFBFBD><EFBFBD>
//设置超时时间
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
printf(">>>uds upload Post in curl post\n");
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>post<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 开启post请求
res = curl_easy_perform(curl);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>ɹ<EFBFBD>
// 检查请求是否成功
if (res != CURLE_OK) {
printf("uds upload failed res code: ");
result = 0;
}
else {
printf("uds upload success,string %s", resPost0.c_str());
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>webapi<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ж<EFBFBD>
//后期添加webapi返回值判断
result=Get_Uuid(resPost0.c_str(), uuid,filename);
}
// <EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD>Դ
// 释放资源
curl_slist_free_all(header_list);
curl_formfree(formpost);
}
@@ -201,23 +201,23 @@ int WebAPI_Uds_Upload(char* strUrl, char* loacl_path, char* uuid,char* filename)
}
void WebAPI_Uds_Download(char* strUrl, char* uuid, char* local_path,char* filename)
{
// curl<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
// curl初始化
CURL* curl = curl_easy_init();
// curl<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
// curl返回值
CURLcode res;
if (curl)
{
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>curl<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ
//设置curl的请求头
struct curl_slist* header_list = NULL;
header_list = curl_slist_append(header_list, "Content-Type:application/json;");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, header_list);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//不接收响应头数据0代表不接收 1代表接收
curl_easy_setopt(curl, CURLOPT_HEADER, 0);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊpost<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//设置请求为post请求
curl_easy_setopt(curl, CURLOPT_POST, 1);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>URL<EFBFBD><EFBFBD>ַ
//设置请求的URL地址
curl_easy_setopt(curl, CURLOPT_URL, strUrl);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>post<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD>
//设置post请求的参数
cJSON* json_root = cJSON_CreateObject();
cJSON_AddItemToObject(json_root, "isWrap", cJSON_CreateString("1"));
cJSON_AddItemToObject(json_root, "storeId", cJSON_CreateString(uuid));
@@ -225,30 +225,30 @@ void WebAPI_Uds_Download(char* strUrl, char* uuid, char* local_path,char* filena
char* szjson = cJSON_Print(json_root);
printf(">>>json %s\n", szjson);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, szjson);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ssl<EFBFBD><EFBFBD>֤
//设置ssl验证
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false);
//CURLOPT_VERBOSE<EFBFBD><EFBFBD>ֵΪ1ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD>ϸ<EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
//CURLOPT_VERBOSE的值为1时会显示详细的调试信息
curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>պ<EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>
//设置数据接收和写入函数
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply);
string resPost0;
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&resPost0);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
//<EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʱʱ<EFBFBD><EFBFBD>
//设置超时时间
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10);
printf(">>>uds download Post in curl post\n");
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>post<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 开启post请求
res = curl_easy_perform(curl);
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD>ɹ<EFBFBD>
// 检查请求是否成功
if (res != CURLE_OK) {
printf("uds download failed res code: ");
}
else {
printf("uds download success,string %s", resPost0.c_str());
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>webapi<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ж<EFBFBD>
//后期添加webapi返回值判断
Save_File(resPost0.c_str(), local_path);
}
curl_slist_free_all(header_list);