liyi месяцев назад: 8
Родитель
Сommit
4337a536c7

+ 2 - 1
pro/CMakeLists.txt

@@ -125,6 +125,7 @@ set(PDU_SRC_LIST
 	${PROJECT_SOURCE_DIR}/src/cascade_slave_tcp.c
 	${PROJECT_SOURCE_DIR}/src/broadcast.c
 	${PROJECT_SOURCE_DIR}/src/radius.c
+	${PROJECT_SOURCE_DIR}/src/tencent_sms.c
 	)
 
 set(NO_WARNNING_FLAGS "-Wno-unused-function -Wno-unused-variable -Wno-unused-but-set-variable")
@@ -287,7 +288,7 @@ set(PDU_SRC_LIST
 	${PROJECT_SOURCE_DIR}/src/Cellular.c
 	#${PROJECT_SOURCE_DIR}/src/wifi.c
 	${PROJECT_SOURCE_DIR}/src/radius.c
-
+	${PROJECT_SOURCE_DIR}/src/tencent_sms.c
     ${PROJECT_SOURCE_DIR}/ui/font.c
 	${PROJECT_SOURCE_DIR}/ui/lang.c
 	${PROJECT_SOURCE_DIR}/ui/gpio.c

+ 5 - 0
pro/src/app.c

@@ -37,6 +37,7 @@
 #include "beep.h"
 #include "broadcast.h"
 #include "radius.h"
+#include "tencent_sms.h"
 
 
 static void* power_thread(void* arg)
@@ -3746,6 +3747,10 @@ int app_init(void)
     dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[0],"Server Thread");
 
     broadcast_init();
+
+#if 0
+    tencent_sms_init();
+#endif
     
 //    thread_start(THREAD_ID_BROADCAST,broardcast_tread,NULL);
 //    thread_start(THREAD_ID_MULCAST,multcast_tread,NULL);

+ 162 - 53
pro/src/appweb_handle.c

@@ -4676,59 +4676,7 @@ static void serviceManagement(void *conn)
     if(strcmp(_serviceManageRequestInfo.type,"listSmtpQuery")==0)
     {
          ack_str = service_mail_ack_to_json(&gdm->mailInfo);
-    }else if(strcmp(_serviceManageRequestInfo.type,"listRadius")==0)
-    {
-        radius_config_t conf = radius_get();                //802.1X
-        radius_auth_t auth = get_radius_auth();             //radius 
-        radius_conf_auth_t c_auth;
-        c_auth.rad = conf;
-        c_auth.auth = auth;
-
-        ack_str = service_radius_ack_to_json(&c_auth);
-    }else if(strcmp(_serviceManageRequestInfo.type,"radiusSave")==0)
-    {
-        radius_config_t conf = {0};
-        radius_auth_t auth = {0};
-        conf.status = atoi(_serviceManageRequestInfo.radius_conf.status);
-        memcpy(conf.user,_serviceManageRequestInfo.radius_conf.user,strlen(_serviceManageRequestInfo.radius_conf.user));
-        memcpy(conf.password,_serviceManageRequestInfo.radius_conf.password,strlen(_serviceManageRequestInfo.radius_conf.password));
-        
-        memcpy(auth.key,_serviceManageRequestInfo.radius_conf.key,strlen(_serviceManageRequestInfo.radius_conf.key));
-        memcpy(auth.authserver,_serviceManageRequestInfo.radius_conf.auth_server,strlen(_serviceManageRequestInfo.radius_conf.auth_server));
-
-        memcpy(auth.acctserver,auth.authserver,strlen(auth.authserver));
-
-        radius_config(&conf);
-        set_radius_auth(&auth);
-
-        ack_str = ctrl_sts_ack_to_json();
-    }else if(strcmp(_serviceManageRequestInfo.type,"listLdap")==0)
-    {
-        
-        ack_str = service_ldap_ack_to_json(&gdm->_globalDevInfo.ldap);
-    }
-    else if(strcmp(_serviceManageRequestInfo.type,"ldapSave")==0)
-    {
-        ldap_t ldap = {0};
-        ldap.ldap = atoi(_serviceManageRequestInfo.ldap.status);
-        memcpy(&ldap.ldip_server,_serviceManageRequestInfo.ldap.ldap_server,strlen(_serviceManageRequestInfo.ldap.ldap_server));
-        if(ldap.ldap != gdm->_globalDevInfo.ldap.ldap)
-        {
-            if(ldap.ldap < 2 && ldap.ldap >= 0)
-            {
-                 gdm->_globalDevInfo.ldap.ldap = ldap.ldap;
-            }
-        }
-        struct in_addr ipv4_addr;
-        if(inet_pton(AF_INET,ldap.ldip_server,&ipv4_addr)==1)
-        {
-            memset(&gdm->_globalDevInfo.ldap.ldip_server,0,sizeof(ldap.ldip_server));
-            memcpy(&gdm->_globalDevInfo.ldap.ldip_server,&ldap.ldip_server,sizeof(ldap.ldip_server));
-        }
-        paras_save();
-        ack_str = ctrl_sts_ack_to_json();
-    }
-    else if(strcmp(_serviceManageRequestInfo.type,"SmtpSave")==0)
+    }else if(strcmp(_serviceManageRequestInfo.type,"SmtpSave")==0)
     {
         mail_info_t mailInfo=gdm->mailInfo;
         mail_send_t *send=&mailInfo.send;
@@ -4809,6 +4757,167 @@ static void serviceManagement(void *conn)
             }
         }
     }
+    else if(strcmp(_serviceManageRequestInfo.type,"listCloudSms")==0)
+    {
+        ack_str = service_cloud_ack_to_json(&gdm->tencent_sms);
+    }else if(strcmp(_serviceManageRequestInfo.type,"CloudSmsSave")==0)
+    {
+        cloud_info_t cloudInfo=gdm->tencent_sms;
+        tencent_cloud_info_t *_info=&cloudInfo.info;
+        tencent_cloud_phone_t *phones=&cloudInfo.phone;
+        _Could_Message_RequesInfo *info=&_serviceManageRequestInfo._cloud_sms_info;
+
+        int save_flag = 0;
+        int mode = atoi(info->status);
+
+        if(mode != _info->status)
+        {
+            save_flag = 1;
+            _info->status = mode;
+        }
+
+        if (info->appId && info->countryCode && info->region && info->secretId && info->secretKey && info->signature && info->template && info->url)
+        {
+            if (strcmp(_info->app_id, info->appId))
+            {
+                strcpy(_info->app_id, info->appId);
+                save_flag = 1;
+            }
+
+            if (strcmp(_info->country_code, info->countryCode))
+            {
+                strcpy(_info->country_code, info->countryCode);
+                save_flag = 1;
+            }
+
+            if (strcmp(_info->region, info->region))
+            {
+                strcpy(_info->region, info->region);
+                save_flag = 1;
+            }
+
+            if (strcmp(_info->secret_id, info->secretId))
+            {
+                strcpy(_info->secret_id, info->secretId); 
+                save_flag = 1;       
+            }
+
+            if (strcmp(_info->signature, info->signature))
+            {
+                strcpy(_info->signature, info->signature);
+                save_flag = 1; 
+            }
+
+            if (strcmp(_info->template, info->template))
+            {
+                strcpy(_info->template, info->template);
+                save_flag = 1; 
+            }
+
+            if (strcmp(_info->url, info->url))
+            {
+                strcpy(_info->url, info->url);
+                save_flag = 1; 
+            }
+        }
+        if(save_flag)
+        {
+            dev_tencent_cloud_update_info(gdm->db, _info);
+            gdm->tencent_sms.info = *_info;
+            tencentcloud_sms_t *cloud_sms = &gdm->g_shm_Data->cloud_sms;
+            //
+            cloud_sms->status = _info->status;
+            strcpy(cloud_sms->app_id,_info->app_id);
+            strcpy(cloud_sms->country,_info->country_code);
+            strcpy(cloud_sms->secret_id,_info->secret_id);
+            strcpy(cloud_sms->secret_key,_info->secret_key);
+            strcpy(cloud_sms->signature,_info->signature);
+            strcpy(cloud_sms->template,_info->template);
+            strcpy(cloud_sms->url,_info->url);
+            strcpy(cloud_sms->region,_info->region);            
+        }
+        for (int i = 0; i < TECNCENT_CLOUD_PHONE_MAX; i++)
+        {
+            phones->phone[i].id = i;
+            if (info->phoneNumber[i])
+            {
+                strcpy(phones->phone[i].phone, info->phoneNumber[i]);
+            }else
+            {
+                strcpy(phones->phone[i].phone, "");
+            }            
+        }
+        if (memcmp(phones, &gdm->tencent_sms.phone, sizeof(tencent_cloud_phone_t) * TECNCENT_CLOUD_PHONE_MAX))
+        {
+            tencentcloud_sms_t *cloud_sms = &gdm->g_shm_Data->cloud_sms;
+            //dev_mail_update_recv(gdm->db, recv);
+            dev_tencent_cloud_update_phone(gdm->db, &phones->phone[0]);
+            memcpy(&gdm->tencent_sms.phone, phones, sizeof(tencent_cloud_phone_t) * TECNCENT_CLOUD_PHONE_MAX);
+            int count = 0;
+            for(int i = 0;i < TECNCENT_CLOUD_PHONE_MAX;i++)
+            {
+                if(phones->phone[i].phone)
+                {
+                    strcpy(cloud_sms->phone[count],phones->phone[i].phone);
+                    count ++;
+                }
+            }
+            cloud_sms->phone_cnt = count;
+        }
+        ack_str = ctrl_sts_ack_to_json();
+    }  
+    else if(strcmp(_serviceManageRequestInfo.type,"listRadius")==0)
+    {
+        radius_config_t conf = radius_get();                //802.1X
+        radius_auth_t auth = get_radius_auth();             //radius 
+        radius_conf_auth_t c_auth;
+        c_auth.rad = conf;
+        c_auth.auth = auth;
+
+        ack_str = service_radius_ack_to_json(&c_auth);
+    }else if(strcmp(_serviceManageRequestInfo.type,"radiusSave")==0)
+    {
+        radius_config_t conf = {0};
+        radius_auth_t auth = {0};
+        conf.status = atoi(_serviceManageRequestInfo.radius_conf.status);
+        memcpy(conf.user,_serviceManageRequestInfo.radius_conf.user,strlen(_serviceManageRequestInfo.radius_conf.user));
+        memcpy(conf.password,_serviceManageRequestInfo.radius_conf.password,strlen(_serviceManageRequestInfo.radius_conf.password));
+        
+        memcpy(auth.key,_serviceManageRequestInfo.radius_conf.key,strlen(_serviceManageRequestInfo.radius_conf.key));
+        memcpy(auth.authserver,_serviceManageRequestInfo.radius_conf.auth_server,strlen(_serviceManageRequestInfo.radius_conf.auth_server));
+
+        memcpy(auth.acctserver,auth.authserver,strlen(auth.authserver));
+
+        radius_config(&conf);
+        set_radius_auth(&auth);
+
+        ack_str = ctrl_sts_ack_to_json();
+    }else if(strcmp(_serviceManageRequestInfo.type,"listLdap")==0)
+    {
+        
+        ack_str = service_ldap_ack_to_json(&gdm->_globalDevInfo.ldap);
+    }
+    else if(strcmp(_serviceManageRequestInfo.type,"ldapSave")==0)
+    {
+        ldap_t ldap = {0};
+        ldap.ldap = atoi(_serviceManageRequestInfo.ldap.status);
+        memcpy(&ldap.ldip_server,_serviceManageRequestInfo.ldap.ldap_server,strlen(_serviceManageRequestInfo.ldap.ldap_server));
+        if(ldap.ldap != gdm->_globalDevInfo.ldap.ldap)
+        {
+            if(ldap.ldap < 2 && ldap.ldap >= 0)
+            {
+                 gdm->_globalDevInfo.ldap.ldap = ldap.ldap;
+            }
+        }
+        struct in_addr ipv4_addr;
+        if(inet_pton(AF_INET,ldap.ldip_server,&ipv4_addr)==1)
+        {
+            memset(&gdm->_globalDevInfo.ldap.ldip_server,0,sizeof(ldap.ldip_server));
+            memcpy(&gdm->_globalDevInfo.ldap.ldip_server,&ldap.ldip_server,sizeof(ldap.ldip_server));
+        }
+        paras_save();
+        ack_str = ctrl_sts_ack_to_json();
+    }
 #ifdef USE_MQTT
     else if(strcmp(_serviceManageRequestInfo.type,"listMqttQuery")==0)
     {

+ 3 - 0
pro/src/common.c

@@ -965,6 +965,7 @@ void SetMenuAuthority(int RoleID)
 #if (CHIP_TYPE == CHIP_T113i)
         _GlobalMenuAuthority.RadiusEnabled = false;
         _GlobalMenuAuthority.LdapEnabled = false;
+        _GlobalMenuAuthority.CloudSmsEnable = false;
 #endif
     }
     // 管理员
@@ -1040,6 +1041,7 @@ void SetMenuAuthority(int RoleID)
 #if (CHIP_TYPE == CHIP_T113i)
         _GlobalMenuAuthority.RadiusEnabled = false;
         _GlobalMenuAuthority.LdapEnabled = false;
+        _GlobalMenuAuthority.CloudSmsEnable = false;
 #endif
     }
     //普通用户
@@ -1097,6 +1099,7 @@ void SetMenuAuthority(int RoleID)
         _GlobalMenuAuthority.BroadcastEnable = false;
         _GlobalMenuAuthority.RadiusEnabled = false;
         _GlobalMenuAuthority.LdapEnabled = false;
+        _GlobalMenuAuthority.CloudSmsEnable = false;
     }
     
 }

+ 60 - 1
pro/src/common.h

@@ -114,6 +114,9 @@
 
 #define MQTT_SER_MAX   5
 
+#define TECNCENT_CLOUD_PHONE_MAX  20
+
+
 enum{
     BREAKER_DIO = 0,
     BREAKER_RS485
@@ -509,6 +512,22 @@ typedef struct
 }GlobalDeviceInfo;
 ///////////////////////////////////////////////////////////////////////////////////
 //自定义共享内存类
+
+typedef struct{
+    uint8_t status;                     
+    uint8_t phone_cnt;
+    char secret_id[64];                 
+    char secret_key[64];
+    char url[64];
+    char app_id[64];
+    char signature[64];
+    char template[64];
+    char country[64];
+    char region[64];
+    char phone[20][64];
+}tencentcloud_sms_t;
+
+
 typedef struct
 {
     //电源数据
@@ -532,7 +551,10 @@ typedef struct
     int nSelectPh;//当前通道的三相ph参数:0:A相 1:B相 2:C相 -1通道总计
         //报警列表 0表示空,1表示写入,2表示已确认可清空。
     int nTypeCtrlType[10];
-    char strMSG[10][64];    
+    char strMSG[10][64];
+#if (1)
+    tencentcloud_sms_t cloud_sms; 
+#endif    
 } smartPDU_shm_data;
 
 //消息队列头结构体定义
@@ -965,6 +987,41 @@ typedef struct
     mail_recv_t         recv[MAIL_RECV_MAX];      //接收账号列表
 }mail_info_t;
 
+
+typedef struct
+{
+    uint8_t id;
+    uint8_t status;
+    char secret_id[64];                 
+    char secret_key[64];
+    char url[64];
+    char app_id[64];
+    char signature[64];
+    char template[64];
+    char country_code[64];
+    char region[64];
+}tencent_cloud_info_t;
+
+
+typedef struct {
+    uint8_t id;
+    char phone[64];
+}phone_id_t;
+
+
+typedef struct{
+    phone_id_t phone[TECNCENT_CLOUD_PHONE_MAX];
+}tencent_cloud_phone_t;
+
+
+
+typedef struct
+{
+    tencent_cloud_info_t info;
+    tencent_cloud_phone_t phone;
+}cloud_info_t;
+
+
 enum {
     MQTT_PLAT_EMQX=0,
     MQTT_PLAT_ALIYUN,
@@ -1060,6 +1117,7 @@ typedef struct MenuAuthority{
     bool FzszEnabled;
     bool RadiusEnabled;
     bool LdapEnabled;
+    bool CloudSmsEnable;
      //8、设备维护菜单
     bool SbcqEnabled;
     bool GjsjEnabled;
@@ -1406,6 +1464,7 @@ typedef struct
 #ifdef NORTH_USER_SPECILS
     cascade_north_user_t north_user;
 #endif
+    cloud_info_t        tencent_sms;
 }GlobalDeviceManager;
 
 extern GlobalDeviceManager __globalDeviceManage;

+ 18 - 0
pro/src/dflt.c

@@ -168,6 +168,24 @@ mail_send_t DFLT_MAIL_SEND={
     .ca = "",
 };
 
+
+tencent_cloud_info_t DFLT_TENCENT_CLOUD_INFO={
+    .status = 0,
+    .secret_id = "",
+    .secret_key ="",
+    .signature = "",
+    .app_id = "",
+    .country_code = "+86",
+    .url = "sms.tencentcloudapi.com",
+    .template="",
+    .region="",
+};
+
+
+
+
+
+
 mqtt_info_t DFLT_MQTT={
     .ser[0] = {
         .id = 0,

+ 126 - 0
pro/src/json_handle.c

@@ -810,6 +810,18 @@ char* user_routers_info_to_json(void)
     if(_GlobalMenuAuthority.LdapEnabled)cJSON_AddItemToObject(children6_data_array, "children", children6_data10_filed);
 
     
+    cJSON* children6_data11_filed = cJSON_CreateObject(); 
+    cJSON_AddStringToObject(children6_data11_filed,"name","CloudSmssz");    
+    cJSON_AddStringToObject(children6_data11_filed,"path","CloudSmssz");  
+    cJSON_AddBoolToObject(children6_data11_filed,"hidden",false); 
+    cJSON_AddStringToObject(children6_data11_filed,"component","fwgl/cloudesmssz/index");  
+    cJSON* children6_meta11_data1_filed = cJSON_CreateObject(); 
+    cJSON_AddStringToObject(children6_meta11_data1_filed,"title",language_CloudSms_setting[dm->_globalDevInfo.product.language]);   
+    cJSON_AddStringToObject(children6_meta11_data1_filed,"icon","button");   
+    cJSON_AddBoolToObject(children6_meta11_data1_filed,"noCache",false); 
+    cJSON_AddStringToObject(children6_meta11_data1_filed,"link","");    
+    cJSON_AddItemToObject(children6_data11_filed, "meta", children6_meta11_data1_filed);
+    if(_GlobalMenuAuthority.CloudSmsEnable)cJSON_AddItemToObject(children6_data_array, "children", children6_data11_filed);
 
 
 
@@ -5921,6 +5933,57 @@ cJSON* json_to_service_manage(const char* str,_ServiceManageRequestInfo* _servic
             }
         }
     }
+    else if(strcmp(_serviceManageRequestInfo->type,"CloudSmsSave")==0)
+    {
+        _Could_Message_RequesInfo *info = &_serviceManageRequestInfo->_cloud_sms_info;
+        cJSON* cjson_data = cJSON_GetObjectItem(cjson,"status");
+        if(cjson_data!=NULL)
+            info->status = cjson_data->valuestring ;
+        cjson_data = cJSON_GetObjectItem(cjson,"secretId");
+        if(cjson_data!=NULL)
+            info->secretId = cjson_data->valuestring ;      
+        cjson_data = cJSON_GetObjectItem(cjson,"secretKey");
+        if(cjson_data!=NULL)
+            info->secretKey = cjson_data->valuestring ; 
+
+        cjson_data = cJSON_GetObjectItem(cjson,"url");
+        if(cjson_data!=NULL)
+            info->url = cjson_data->valuestring ;   
+
+        cjson_data = cJSON_GetObjectItem(cjson,"appId");
+        if(cjson_data!=NULL)
+            info->appId = cjson_data->valuestring ; 
+
+        cjson_data = cJSON_GetObjectItem(cjson,"signature");
+        if(cjson_data!=NULL)
+            info->signature = cjson_data->valuestring ; 
+                                         
+        cjson_data = cJSON_GetObjectItem(cjson,"template");
+        if(cjson_data!=NULL)
+            info->template = cjson_data->valuestring ;   
+
+        cjson_data = cJSON_GetObjectItem(cjson,"countryCode");
+        if(cjson_data!=NULL)
+            info->countryCode = cjson_data->valuestring ;  
+
+        cjson_data = cJSON_GetObjectItem(cjson,"region");
+        if(cjson_data!=NULL)
+            info->region = cjson_data->valuestring ;  
+
+        cjson_data = cJSON_GetObjectItem(cjson,"phoneNumberList");
+        if(cjson_data!=NULL)
+        {
+            cJSON *node=cjson_data->child;
+            while(node) {
+                cJSON *cjson_id=cJSON_GetObjectItem(node, "idx");
+                cJSON *cjson_ph=cJSON_GetObjectItem(node, "phoneNumber");
+                if (cjson_id && cjson_ph){
+                    info->phoneNumber[cjson_id->valueint] = cjson_ph->valuestring;
+                }
+                node = node->next;
+            }            
+        }
+    }
     else if(strcmp(_serviceManageRequestInfo->type,"mqttSave")==0)
     {
         cJSON *tmp;
@@ -6621,6 +6684,69 @@ char* service_snmp_ack_to_json(SNMPManager* sm)
     return str;
 }
 
+char* service_cloud_ack_to_json(cloud_info_t* info)
+{
+    int idx=0;
+    char* str = NULL;
+    tencent_cloud_info_t *_info=&info->info;
+    tencent_cloud_phone_t *phones=&info->phone;
+    
+    // 创建 JSON 对象
+    cJSON* root = cJSON_CreateObject();   
+    // 添加基本键值对
+    cJSON_AddNumberToObject(root, "code", 200); 
+
+    cJSON* data_filed = cJSON_CreateObject();
+    char buf[30];
+    memset(buf, 0, sizeof(buf));
+    sprintf(buf, "%d", _info->status);
+    cJSON_AddStringToObject(data_filed,"status", buf);
+    cJSON_AddStringToObject(data_filed,"secretId", _info->secret_id);
+    cJSON_AddStringToObject(data_filed,"secretKey", _info->secret_key);
+    cJSON_AddStringToObject(data_filed,"url", _info->url);
+    cJSON_AddStringToObject(data_filed,"appId", _info->app_id);
+    cJSON_AddStringToObject(data_filed,"signature", _info->signature);
+    cJSON_AddStringToObject(data_filed,"template", _info->template);
+    cJSON_AddStringToObject(data_filed,"countryCode", _info->country_code);
+    cJSON_AddStringToObject(data_filed,"region", _info->region);
+    
+    cJSON* array=NULL;
+    for(int i=0; i<MAIL_RECV_MAX; i++) {
+        if(1) {
+            cJSON* tmp = cJSON_CreateObject();
+            if(strlen(phones->phone[i].phone)>0) {
+                cJSON_AddStringToObject(tmp,"phoneNumber", phones->phone[i].phone);
+                cJSON_AddNumberToObject(tmp,"idx", idx++);
+
+                if(array==NULL) {
+                    array = cJSON_CreateArray();
+                }
+
+                if(array) {
+                    cJSON_AddItemToArray(array, tmp);
+                }
+            }
+        }
+    }
+    if(array) {
+        cJSON_AddItemToObject(data_filed, "phoneNumberList", array);
+    }
+    
+    //添加汇总
+    cJSON_AddItemToObject(root, "data", data_filed);
+    //添加结果
+    cJSON_AddStringToObject(root, "msg", language_Operation_Success[__globalDeviceManage._globalDevInfo.product.language]);
+    //转换
+    str = cJSON_Print(root);    
+    //释放资源
+    cJSON_Delete(root);
+    return str;
+}
+
+
+
+
+
 char* service_mail_ack_to_json(mail_info_t* info)
 {
     int idx=0;

+ 21 - 1
pro/src/json_handle.h

@@ -405,6 +405,25 @@ typedef struct
     char* recvAccount[MAIL_RECV_MAX];
 }_MAIL_ServerRequestInfo;
 
+
+///could message
+
+typedef struct
+{
+    char *status;
+    char *secretId;
+    char *secretKey;
+    char *url;
+    char *appId;
+    char *signature;
+    char *template;
+    char *countryCode;
+    char *region;
+    char *phoneNumber[20];
+}_Could_Message_RequesInfo;
+
+
+
 typedef struct 
 {
     int   idx;
@@ -524,6 +543,7 @@ typedef struct
     _GROUP_ServiceRequestInfo _group_info;
     radius_conf_t              radius_conf;
     ldap_conf_t                ldap;
+    _Could_Message_RequesInfo  _cloud_sms_info;
     char* productName;
 }_ServiceManageRequestInfo;
 
@@ -760,6 +780,6 @@ char * json_get_chip_type(int type);
 char *service_radius_ack_to_json(radius_conf_auth_t *conf);
 
 char *service_ldap_ack_to_json(ldap_t  *conf);
-
+char* service_cloud_ack_to_json(cloud_info_t* info);
 #endif
 

+ 13 - 0
pro/src/language_common.c

@@ -490,6 +490,19 @@ const char * language_Ldap_setting[LANG_MAX] =
     "Ldap設定",
 };
 
+const char * language_CloudSms_setting[LANG_MAX] =
+{
+    "云短信设置",   
+    "Cloud SMS Settings",
+    "Настройки облачных сообщений",
+    "Paramètres des SMS cloud",
+    "Cloud-SMS-Einstellungen",
+    "Configuración de mensajes en la nube",
+    "Definições de SMS na nuvem",
+    "Impostazioni SMS cloud",
+    "クラウドSMS設定",
+};
+
 
 
 const char* language_maintenance_equipment[LANG_MAX] =

+ 1 - 0
pro/src/language_common.h

@@ -109,5 +109,6 @@ extern const char * language_Radius_setting[LANG_MAX];
 
 extern const char * language_Ldap_setting[LANG_MAX];
 
+extern const char * language_CloudSms_setting[LANG_MAX];
 
 #endif

+ 259 - 0
pro/src/sqlite_handle.c

@@ -4859,6 +4859,9 @@ int dev_switch_update_all(sqlite3 *db, netswitch_info_t *sw)
 ////////////////MAIL/////////////////////////////////////////////
 #define MAIL_MANAGER_TABLE   "Table_MAILManage"
 #define MAIL_RECVEIVE_TABLE  "Table_MAILReceive"
+#define TENCENT_CLOUD_SMS_INFO_TABLE    "Table_TencentCloudSmsInfo"
+#define TENCENT_CLOUD_SMS_PHONE         "Table_TencentCloudSmsPhone"
+
 int dev_mail_get(sqlite3 *db, mail_info_t *info)
 {
     int i,r=-1;
@@ -4934,6 +4937,143 @@ int dev_mail_get(sqlite3 *db, mail_info_t *info)
 
     return 0;
 }
+
+
+int dev_tencent_cloud_get(sqlite3 *db, cloud_info_t *info)
+{
+    int i,r=-1;
+    char temp[1024];
+    char *err_msg=NULL;
+    char *table=NULL;
+    int nrow,ncol;
+    char** pResult = NULL;
+
+    if(!info) {
+        return -1;
+    }
+
+    memset(info, 0, sizeof(cloud_info_t));
+    nrow = ncol = 0;
+
+    table = TENCENT_CLOUD_SMS_INFO_TABLE;
+    sprintf(temp, "SELECT * FROM %s;", table);
+    r = sqlite3_get_table(db, temp, &pResult, &nrow, &ncol, &err_msg);
+    if(r != SQLITE_OK) {
+        log_e("sqlite handle error: %s \n%s\n", temp, err_msg); sqlite3_free(err_msg);
+        return -1 ;
+    }
+
+    if(info && ncol>0) {
+        tencent_cloud_info_t *info_info=&info->info; 
+        memset(info_info, 0, sizeof(tencent_cloud_info_t));
+        info_info->id = atoi(pResult[ncol+0]);
+        info_info->status = atoi(pResult[ncol+1]);
+        strcpy(info_info->secret_id, pResult[ncol+2]);
+        strcpy(info_info->secret_key, pResult[ncol+3]);
+        strcpy(info_info->url, pResult[ncol+4]);
+        strcpy(info_info->app_id, pResult[ncol+5]);
+        strcpy(info_info->signature, pResult[ncol+6]);
+        strcpy(info_info->template, pResult[ncol+7]);
+        strcpy(info_info->country_code, pResult[ncol+8]);
+        strcpy(info_info->region, pResult[ncol+9]);
+    }
+    ////////////////////////////////////////////////////////////////////////
+
+    table = TENCENT_CLOUD_SMS_PHONE;
+    if(!tab_exists(db, table)) {
+        sprintf(temp, "CREATE TABLE IF NOT EXISTS %s("
+                            "id INTEGER PRIMARY KEY,"
+                            "phonenumber TEXT);", table);
+        r = sqlite3_exec(db, temp, 0, 0, &err_msg);
+        if(r!=SQLITE_OK) {
+            log_e("___ %s create failed, %s\n%s\n", table, temp, err_msg); sqlite3_free(err_msg);
+            return -1;
+        }
+    }
+
+    nrow = ncol = 0;
+    sprintf(temp, "SELECT * FROM %s;", table);
+    r = sqlite3_get_table(db, temp, &pResult, &nrow, &ncol, &err_msg);
+    if(r != SQLITE_OK) {
+        log_e("sqlite handle error: %s \n%s\n", temp, err_msg); sqlite3_free(err_msg);
+        return -1 ;
+    }
+    
+    if(info && ncol>0) {
+        tencent_cloud_phone_t *phone_info=&info->phone;
+        for(i=1; i<=nrow; i++) {
+            phone_info->phone[i-1].id  = atoi(pResult[i*ncol+0]);
+            strcpy(phone_info->phone[i-1].phone, pResult[i*ncol+1]);
+        }
+    }
+    sqlite3_free_table(pResult);
+
+    return 0;
+}
+
+
+
+
+/*typedef struct
+{
+    char secret_id[64];                 
+    char secret_key[64];
+    char url[64];
+    char app_id[64];
+    char signature[64];
+}tencent_cloud_info_t;
+*/
+int dev_tencent_cloud_init(sqlite3 *db, cloud_info_t *info)
+{
+    int i,r=-1;
+    char temp[1024];
+    char *err_msg=NULL;
+    char *table=NULL;
+    int nrow,ncol;
+    char** pResult = NULL;    
+    table = TENCENT_CLOUD_SMS_INFO_TABLE;
+
+    if(!tab_exists(db, table))
+    {
+        sprintf(temp, "CREATE TABLE IF NOT EXISTS %s("
+                            "id INTEGER PRIMARY KEY,"
+                            "status INTEGER,"
+                            "secretId INTEGER,"
+                            "secretKey TEXT,"
+                            "url TEXT,"
+                            "appid TEXT,"
+                            "signature TEXT,"
+                            "template TEXT,"
+                            "countryCode TEXT,"
+                            "region TEXT;", table);    
+        r = sqlite3_exec(db, temp, 0, 0, &err_msg);
+        if(r!=SQLITE_OK) {
+            log_e("___ %s create failed, %s\n%s\n", table, temp, err_msg); sqlite3_free(err_msg);
+            return -1;
+        }   
+        extern tencent_cloud_info_t DFLT_TENCENT_CLOUD_INFO;
+        dev_tencent_cloud_update_info(db, &DFLT_TENCENT_CLOUD_INFO);
+    }
+    table = TENCENT_CLOUD_SMS_PHONE;
+    if(!tab_exists(db, table))
+    {
+        sprintf(temp, "CREATE TABLE IF NOT EXISTS %s("
+                            "id INTEGER PRIMARY KEY,"
+                            "phonenumber TEXT,", table);    
+        r = sqlite3_exec(db, temp, 0, 0, &err_msg);
+        if(r!=SQLITE_OK) {
+            log_e("___ %s create failed, %s\n%s\n", table, temp, err_msg); sqlite3_free(err_msg);
+            return -1;
+        }   
+    }
+
+    
+    r = dev_tencent_cloud_get(db, info);
+
+    return 0;
+}
+
+
 int dev_mail_init(sqlite3 *db, mail_info_t *info)
 {
     int i,r=-1;
@@ -4975,6 +5115,69 @@ int dev_mail_init(sqlite3 *db, mail_info_t *info)
 }
 
 
+int dev_tencent_cloud_update_info(sqlite3 *db, tencent_cloud_info_t *info)
+{
+    int i,r=-1,exist=0,cnt=0;
+
+#ifdef USE_MAIL
+    char temp[9216];
+    sqlite3_stmt *stmt;
+    char *err_msg=NULL;
+    char *table=TENCENT_CLOUD_SMS_INFO_TABLE;
+
+    cnt = get_count(db, table);
+    if(cnt>0) {
+        sprintf(temp, "UPDATE %s SET id=%d,status=%d,secretId='%s',secretKey='%s',url='%s',appid='%s',siqnature='%s',template='%s',countryCode='%s' WHERE id=%d;", 
+                table, info->id,info->status,info->secret_id,info->secret_key,info->url,info->app_id,info->signature,info->template,info->country_code,info->id);
+        r = sqlite3_exec(db, temp, NULL, 0, &err_msg);
+        if(r != SQLITE_OK) {
+            log_e("dev_tencent_cloud_update_info failed, %s, %s\n\n", temp, err_msg);
+            sqlite3_free(err_msg);
+        }
+        else {
+            exist = sqlite3_changes(db);
+        }
+    }
+
+    if(exist==0) {
+        sprintf(temp, "INSERT INTO %s (id,status,secretId,secretKey,url,appid,siqnature,template,countryCode) VALUES (?,?,?,?,?,?,?,?,?);", table);
+        r = sqlite3_prepare_v2(db, temp, -1, &stmt, 0);
+        if (r != SQLITE_OK) {
+            log_e("dev_tencent_cloud_update_info, sqlite3_prepare_v2 failed, %s\n", sqlite3_errmsg(db));
+            r = -1; goto quit;
+        }
+
+        sqlite3_bind_int(stmt,  1, info->id);
+        sqlite3_bind_int(stmt,  2, info->status);
+        sqlite3_bind_text(stmt, 3, info->secret_id,  -1, NULL);
+        sqlite3_bind_text(stmt, 4, info->secret_key, -1, NULL);
+        sqlite3_bind_text(stmt, 5, info->url,   -1, NULL);
+        sqlite3_bind_text(stmt, 6, info->app_id,     -1, NULL);
+        sqlite3_bind_text(stmt, 7, info->signature,     -1, NULL);
+        sqlite3_bind_text(stmt, 8, info->template,       -1, NULL);
+        sqlite3_bind_text(stmt, 9, info->country_code,       -1, NULL);
+        sqlite3_bind_text(stmt, 10, info->region,       -1, NULL);
+
+        r = sqlite3_step(stmt);
+        sqlite3_finalize(stmt);
+
+        if (r != SQLITE_DONE) {
+            log_e("dev_tencent_cloud_update_info, sqlite3_step failed\n");
+            r = -1;
+        }
+        else {
+            r = 0;
+        }
+    }
+quit:
+#endif
+
+    return r;
+}
+
+
+
+
 int dev_mail_update_send(sqlite3 *db, mail_send_t *send)
 {
     int i,r=-1,exist=0,cnt=0;
@@ -5033,6 +5236,62 @@ quit:
     return r;
 }
 
+
+int dev_tencent_cloud_update_phone(sqlite3 *db, phone_id_t *phone)
+{
+    int i,r=-1,exist=0,cnt=0;
+
+    char temp[1024];
+    sqlite3_stmt *stmt;
+    char *err_msg=NULL;
+    phone_id_t *ph=NULL;
+    char *table=TENCENT_CLOUD_SMS_PHONE;
+    
+    if(!db || !phone) {
+        return -1;
+    }
+
+    cnt = get_count(db, table);
+    for(i=0; i<20; i++) {
+        ph = &phone[i];
+        if(cnt>0) {
+            sprintf(temp, "UPDATE %s SET id=%d, phoneNumber='%s', WHERE id=%d;", 
+                    table, phone->id, phone->phone, phone->id);
+            r = sqlite3_exec(db, temp, NULL, 0, &err_msg);
+            if(r != SQLITE_OK) {
+                log_e("dev_cloud_update_phone failed, %s, %s\n", temp, err_msg);
+                sqlite3_free(err_msg);
+                return -1;
+            }
+            else {
+                exist = sqlite3_changes(db);
+            }
+        }
+
+        if(exist==0) {
+            sprintf(temp, "INSERT INTO %s (id,phoneNumber) VALUES (?,?);", table);
+            r = sqlite3_prepare_v2(db, temp, -1, &stmt, 0);
+            if (r != SQLITE_OK) {
+                log_e("dev_cloud_update_phone, sqlite3_prepare_v2 failed, %s\n", sqlite3_errmsg(db));
+                return -1;
+            }
+
+            sqlite3_bind_int(stmt,  1, ph->id);
+            sqlite3_bind_text(stmt, 2, ph->phone,  -1, NULL);
+
+            r = sqlite3_step(stmt);
+            sqlite3_finalize(stmt);
+
+            if (r != SQLITE_DONE) {
+                log_e("dev_cloud_update_phone, sqlite3_step failed\n");
+                r = -1;
+            }
+        }
+    }
+
+    return r;
+}
+
 int dev_mail_update_recv(sqlite3 *db, mail_recv_t *recv)
 {
     int i,r=-1,exist=0,cnt=0;

+ 8 - 0
pro/src/sqlite_handle.h

@@ -177,6 +177,14 @@ int dev_sql_set_overwrite(int flag);
 int dev_get_sigle_user_info(sqlite3 *db, UserInfo* _globaluserInfo,char *name,char* password);
 
 
+int dev_tencent_cloud_update_info(sqlite3 *db, tencent_cloud_info_t *info);
+int dev_tencent_cloud_init(sqlite3 *db, cloud_info_t *info);
+int dev_tencent_cloud_get(sqlite3 *db, cloud_info_t *info);
+int dev_tencent_cloud_update_phone(sqlite3 *db, phone_id_t *phone);
+
+
+
+
 enum {
     IO_IMPORT=0,
     IO_EXPORT,

+ 54 - 0
pro/src/tencent_sms.c

@@ -0,0 +1,54 @@
+#include "tencent_sms.h"
+#include "xlist.h"
+#include "common.h"
+#include "sqlite_handle.h"
+
+
+
+extern GlobalDeviceManager __globalDeviceManage;
+
+typedef struct {
+    cloud_info_t   *info;
+    GlobalDeviceManager *dm;
+    int           inited;
+}tencent_sms_handle_t;
+static tencent_sms_handle_t tsHandle;
+
+
+int tencent_sms_init()
+{
+    tencent_sms_handle_t *h=&tsHandle;
+    GlobalDeviceManager *dm=&__globalDeviceManage;
+    h->dm = dm;
+    h->info = &h->dm->tencent_sms;
+    dev_tencent_cloud_init(dm->db, h->info);
+    h->inited = 1;
+
+    //copy to shmem
+    smartPDU_shm_data * shm_data = h->dm->g_shm_Data;
+
+    tencentcloud_sms_t *cloud_sms = &shm_data->cloud_sms;
+
+    shm_data->cloud_sms.status = cloud_sms->status;
+    int count = 0;
+    for(int i = 0;i < TECNCENT_CLOUD_PHONE_MAX;i++)
+    {
+        if(h->info->phone.phone[i].phone[0])
+        {
+            strcpy(cloud_sms->phone[count],h->info->phone.phone[i].phone);
+            count ++;
+        }
+    }
+    cloud_sms->phone_cnt = count;
+    strcpy(cloud_sms->app_id,h->info->info.app_id);
+    strcpy(cloud_sms->country,h->info->info.country_code);
+    strcpy(cloud_sms->secret_id,h->info->info.secret_id);
+    strcpy(cloud_sms->secret_key,h->info->info.secret_key);
+    strcpy(cloud_sms->signature,h->info->info.signature);
+    strcpy(cloud_sms->template,h->info->info.template);
+    strcpy(cloud_sms->url,h->info->info.url);
+    strcpy(cloud_sms->region,h->info->info.region);
+    return 0;
+}
+
+

+ 18 - 0
pro/src/tencent_sms.h

@@ -0,0 +1,18 @@
+#ifndef __TENCENT_SMS_
+#define __TENCENT_SMS_
+
+
+
+
+
+
+
+
+
+int tencent_sms_init();
+
+
+
+
+#endif
+