Commit 58448213 authored by chen.weican's avatar chen.weican

【修改内容】修改jwt的获取

【提交人】陈伟灿
parent 03825dca
...@@ -4,16 +4,17 @@ ...@@ -4,16 +4,17 @@
#define ADDRESS "tcp://172.25.240.199:1883"//"tcp://172.25.240.31:1983"//// #define ADDRESS "tcp://172.25.240.199:1883"//"tcp://172.25.240.31:1983"////
#define CLIENTID "CCU.%s.%s" #define CLIENTID "CCU.%s.%s"
#define TOPIC "/sys/a1OYuSBt23u/aIqEbWno8yDdsjCX15iq/thing/service/property/set"
#define PAYLOAD "Hello cwc World!" #define PAYLOAD "Hello World!"
#define QOS 0 #define QOS 0
#define TIMEOUT 10000L #define TIMEOUT 10000L
#define USRNAME "hangzhou_gateway " #define USRNAME "hangzhou_gateway "
#define PASSWORD "2ca1442865ff4cb99870f60f2c646190" #define PASSWORD "2ca1442865ff4cb99870f60f2c646190"
#define AUTO_CONN 1 #define AUTO_CONN 1
#define CONNECT_TIMEOUT 3 #define CONNECT_TIMEOUT 3
#define IPSTR "172.25.240.122"
#define PORT 8092
#define GET_KEY_CMD "/usr/sbin/fw_printenv key -n"
typedef enum { typedef enum {
RETURN_FAIL = -1, RETURN_FAIL = -1,
RETURN_SUCCESS = 0, RETURN_SUCCESS = 0,
......
...@@ -14,11 +14,32 @@ ...@@ -14,11 +14,32 @@
#include "cJSON.h" #include "cJSON.h"
#include "com_api.h" #include "com_api.h"
#include "kk_product.h" #include "kk_product.h"
#define IPSTR "172.25.240.122" #include "kcloud_config.h"
#define PORT 8092
#define BUFSIZE 1024 #define BUFSIZE 1024
#define PRODUCTSECRET "123456" #define PRODUCTSECRET "123456"
int kk_execel_cmd(char * cmd,char * buf,int buf_len,int* ret_len)
{
if(cmd == NULL || buf == NULL || buf_len == 0)
{
printf("arg error\n");
return -1;
}
memset(buf,0,buf_len);
FILE *fp = NULL;
fp = popen(cmd,"r");
while(fgets(buf,buf_len,fp)!=NULL){
printf("%s return %s",cmd,buf);
}
pclose (fp);
*ret_len = strlen(buf);
return 0;
}
int kk_parse_deviceSecret(char *info){ int kk_parse_deviceSecret(char *info){
FILE *fp; FILE *fp;
if(info == NULL){ if(info == NULL){
...@@ -170,6 +191,7 @@ int arrayToStr(unsigned char *buf, unsigned int buflen, char *out) ...@@ -170,6 +191,7 @@ int arrayToStr(unsigned char *buf, unsigned int buflen, char *out)
printf("out = %s\n", out); printf("out = %s\n", out);
return buflen * 2; return buflen * 2;
} }
static char * kk_create_register_info() static char * kk_create_register_info()
{ {
cJSON *root; cJSON *root;
...@@ -183,13 +205,21 @@ static char * kk_create_register_info() ...@@ -183,13 +205,21 @@ static char * kk_create_register_info()
char ramdonId[16] = {0}; char ramdonId[16] = {0};
unsigned char sign_hex[32] = {0}; unsigned char sign_hex[32] = {0};
unsigned char sign_hex_str[65] = {0}; unsigned char sign_hex_str[65] = {0};
uint8_t productSecret[64] = {0};
int productSecret_len = 0;
root=cJSON_CreateObject(); root=cJSON_CreateObject();
HAL_Get_mac(mac); HAL_Get_mac(mac);
HAL_GetTime_s(ramdonId); HAL_GetTime_s(ramdonId);
cJSON_AddStringToObject(root, "deviceCode", "CCU_77777"); cJSON_AddStringToObject(root, "deviceCode", KK_CCU_ID);
cJSON_AddStringToObject(root, "productCode",productCode); cJSON_AddStringToObject(root, "productCode",productCode);
signSource = kk_dictionary_order("CCU_77777",productCode,"0000000000"); signSource = kk_dictionary_order(KK_CCU_ID,productCode,KK_CCU_RANDOM);
kk_execel_cmd(GET_KEY_CMD,(char *)productSecret,sizeof(productSecret),&productSecret_len);
if(productSecret_len == 0){
utils_hmac_sha256(signSource, strlen(signSource), PRODUCTSECRET, strlen(PRODUCTSECRET), sign_hex); utils_hmac_sha256(signSource, strlen(signSource), PRODUCTSECRET, strlen(PRODUCTSECRET), sign_hex);
}else{
utils_hmac_sha256(signSource, strlen(signSource), productSecret, strlen(productSecret), sign_hex);
}
arrayToStr(sign_hex,32,sign_hex_str); arrayToStr(sign_hex,32,sign_hex_str);
base64Out = malloc(128); base64Out = malloc(128);
...@@ -201,7 +231,7 @@ static char * kk_create_register_info() ...@@ -201,7 +231,7 @@ static char * kk_create_register_info()
//base64_encode(sign_hex_str,base64Out,strlen(sign_hex_str)); //base64_encode(sign_hex_str,base64Out,strlen(sign_hex_str));
printf("[%s][%d]base64Out:%s\n",__FUNCTION__,__LINE__,base64Out); printf("[%s][%d]base64Out:%s\n",__FUNCTION__,__LINE__,base64Out);
cJSON_AddStringToObject(root, "sign",sign_hex_str); cJSON_AddStringToObject(root, "sign",sign_hex_str);
cJSON_AddStringToObject(root, "random","0000000000"); cJSON_AddStringToObject(root, "random",KK_CCU_RANDOM);
free(signSource); free(signSource);
free(base64Out); free(base64Out);
out=cJSON_Print(root); out=cJSON_Print(root);
...@@ -210,14 +240,44 @@ static char * kk_create_register_info() ...@@ -210,14 +240,44 @@ static char * kk_create_register_info()
printf("--------------------->kk_create_register_info:%s\n",out); printf("--------------------->kk_create_register_info:%s\n",out);
return out; return out;
} }
char g_clientId[64] = {0};
static char * kk_create_get_jwt_info()
{
cJSON *root;
FILE *fp;
char *out = NULL;
char timestamp[16] = {0};
char deviceSecret[64] = {0};
HAL_GetTime_s(timestamp);
sprintf(g_clientId, CLIENTID, KK_CCU_ID,timestamp);
root=cJSON_CreateObject();
cJSON_AddStringToObject(root, "deviceCode", KK_CCU_ID);
cJSON_AddStringToObject(root, "productCode",KK_CCU_PRODUCTID);
cJSON_AddStringToObject(root, "clientId",g_clientId);
fp = fopen("/usr/kk/kk_deviceSecret.txt", "r");
if(fp != NULL){
fread(deviceSecret,1,sizeof(deviceSecret),fp);
fclose(fp);
}
cJSON_AddStringToObject(root, "deviceSecret",deviceSecret);
static int kk_send_register_info(int sockfd,const char * path) out=cJSON_Print(root);
//cJSON_Minify(out);
cJSON_Delete(root);
printf("--------------------->kk_create_get_jwt_info:%s\n",out);
return out;
}
static int kk_send_register_info(int sockfd,const char * path,int type)
{ {
char str1[1024], str2[1024],str[16] = {0}; char str1[1024], str2[1024],str[16] = {0};
char tmp[128] = {0}; char tmp[128] = {0};
int len = 0; int len = 0;
memset(str2, 0, sizeof(str2)); memset(str2, 0, sizeof(str2));
if(type == 0){
strcat(str2, kk_create_register_info()); strcat(str2, kk_create_register_info());
}else{
strcat(str2, kk_create_get_jwt_info());
}
len = strlen(str2); len = strlen(str2);
sprintf(str, "%d", len); sprintf(str, "%d", len);
...@@ -263,7 +323,7 @@ int kk_start_ccu_register(void) ...@@ -263,7 +323,7 @@ int kk_start_ccu_register(void)
return -1; return -1;
} }
printf("connect successful\n"); printf("connect successful\n");
ret = kk_send_register_info(sockfd,"/deviceRegister/register"); ret = kk_send_register_info(sockfd,"/deviceRegister/register",0);
if (ret < 0) { if (ret < 0) {
printf("send fail'%s'\n",errno, strerror(errno)); printf("send fail'%s'\n",errno, strerror(errno));
close(sockfd); close(sockfd);
...@@ -303,7 +363,7 @@ int kk_start_ccu_register(void) ...@@ -303,7 +363,7 @@ int kk_start_ccu_register(void)
printf("[%s][%d]buf2:%s\n",__FUNCTION__,__LINE__,buf2); printf("[%s][%d]buf2:%s\n",__FUNCTION__,__LINE__,buf2);
ret = kk_parse_deviceSecret(buf2); ret = kk_parse_deviceSecret(buf2);
if(ret == 0){ if(ret == 0){
ret = kk_send_register_info(sockfd,"/auth/generateJwt"); ret = kk_send_register_info(sockfd,"/auth/generateJwt",1);
if (ret < 0) { if (ret < 0) {
printf("send fail'%s'\n",errno, strerror(errno)); printf("send fail'%s'\n",errno, strerror(errno));
close(sockfd); close(sockfd);
...@@ -315,10 +375,8 @@ int kk_start_ccu_register(void) ...@@ -315,10 +375,8 @@ int kk_start_ccu_register(void)
} }
} }
}else if(registerType == 2){ }else if(registerType == 2){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
char* jwt = strstr(buf,"jwt"); char* jwt = strstr(buf,"jwt");
if(jwt != NULL){ if(jwt != NULL){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
char* start = strchr(buf,'{'); char* start = strchr(buf,'{');
char* end = strrchr(buf,'}'); char* end = strrchr(buf,'}');
strncpy(buf2,start,end-start+1); strncpy(buf2,start,end-start+1);
......
...@@ -8,10 +8,10 @@ ...@@ -8,10 +8,10 @@
#include "kk_log.h" #include "kk_log.h"
const char KK_URI_SYS_PREFIX[] = "/sys/kk/%s/%s/thing/service/property/set"; const char KK_URI_SYS_PREFIX[] = "biz/kk/%s/%s/thing/service/property/set";
const char KK_URI_SYS_PREFIX_SERVICE[] = "/sys/kk/%s/%s/thing/service/+"; const char KK_URI_SYS_PREFIX_SERVICE[] = "biz/kk/%s/%s/thing/service/+";
const char KK_URI_SYS_PREFIX_TOPO_CHANGE[] = "/sys/kk/%s/%s/thing/topo/change"; const char KK_URI_SYS_PREFIX_TOPO_CHANGE[] = "biz/kk/%s/%s/thing/topo/change";
const char KK_URI_SYS_PREFIX_EX[] = "/sys/kk/%s/%s"; const char KK_URI_SYS_PREFIX_EX[] = "biz/kk/%s/%s";
const char KK_URI_OTA_PREFIX[] = "/ota/device/upgrade/kk/%s/%s/#"; const char KK_URI_OTA_PREFIX[] = "/ota/device/upgrade/kk/%s/%s/#";
const char KK_URI_OTA_PROCESS[] = "/ota/device/progress/%s/%s"; const char KK_URI_OTA_PROCESS[] = "/ota/device/progress/%s/%s";
const char KK_URI_OTA_INFORM[] = "/ota/device/inform/%s/%s"; const char KK_URI_OTA_INFORM[] = "/ota/device/inform/%s/%s";
...@@ -54,8 +54,8 @@ int KK_Subdev_Subscribe(const cJSON *root) ...@@ -54,8 +54,8 @@ int KK_Subdev_Subscribe(const cJSON *root)
memset(url, 0, url_len); memset(url, 0, url_len);
snprintf(url, url_len, KK_URI_OTA_PREFIX, productCode->valuestring, deviceCode->valuestring); snprintf(url, url_len, KK_URI_OTA_PREFIX, productCode->valuestring, deviceCode->valuestring);
INFO_PRINT("ota [%s][%d] URL:%s\n",__FUNCTION__,__LINE__,url); //INFO_PRINT("ota [%s][%d] URL:%s\n",__FUNCTION__,__LINE__,url);
res = KK_MQTT_SubTopic(url); //res = KK_MQTT_SubTopic(url);
memset(url, 0, url_len); memset(url, 0, url_len);
snprintf(url, url_len, KK_URI_SYS_PREFIX, productCode->valuestring, deviceCode->valuestring); snprintf(url, url_len, KK_URI_SYS_PREFIX, productCode->valuestring, deviceCode->valuestring);
...@@ -74,7 +74,7 @@ int KK_Subdev_Subscribe(const cJSON *root) ...@@ -74,7 +74,7 @@ int KK_Subdev_Subscribe(const cJSON *root)
} }
static int _kk_client_subscribe(char productCode[PRODUCT_CODE_LEN],char deviceCode[DEVICE_CODE_LEN]) static int _kk_ccu_topic_subscribe(char productCode[PRODUCT_CODE_LEN],char deviceCode[DEVICE_CODE_LEN])
{ {
int res = 0, index = 0, fail_count = 0; int res = 0, index = 0, fail_count = 0;
...@@ -100,15 +100,19 @@ static int _kk_client_subscribe(char productCode[PRODUCT_CODE_LEN],char deviceCo ...@@ -100,15 +100,19 @@ static int _kk_client_subscribe(char productCode[PRODUCT_CODE_LEN],char deviceCo
free(url); free(url);
return res; return res;
} }
static int s_ccu_topic_sub = 0;
int KK_Client_Gateway_Subscribe(void) int KK_CCU_TOPIC_Subscribe(void)
{ {
char productCode[PRODUCT_CODE_LEN] = {0}; char productCode[PRODUCT_CODE_LEN] = {0};
char deviceCode[MAC_ADDR_LEN] = {0}; char deviceCode[MAC_ADDR_LEN] = {0};
if(s_ccu_topic_sub == 1){
INFO_PRINT("[%s][%d] already Subscribe\n",__FUNCTION__,__LINE__);
return -1;
}
s_ccu_topic_sub = 1;
HAL_GetProduct_Code(productCode); HAL_GetProduct_Code(productCode);
HAL_Get_mac(deviceCode); HAL_Get_mac(deviceCode);
return _kk_client_subscribe(productCode,KK_CCU_ID); return _kk_ccu_topic_subscribe(productCode,KK_CCU_ID);
} }
static int _kk_utils_topic(_IN_ const char *name, _IN_ char *product_code, static int _kk_utils_topic(_IN_ const char *name, _IN_ char *product_code,
...@@ -225,7 +229,7 @@ char* KK_Make_Topic(cJSON *info) ...@@ -225,7 +229,7 @@ char* KK_Make_Topic(cJSON *info)
} }
if((!strcmp(product_code->valuestring,"15") || !strcmp(product_code->valuestring,"ccu_n12")) && \ if((!strcmp(product_code->valuestring,"15") || !strcmp(product_code->valuestring,"ccu_n12")) && \
(strstr(type->valuestring,"thing/status/online") != NULL)){ (strstr(type->valuestring,"thing/status/online") != NULL)){
KK_Client_Gateway_Subscribe(); KK_CCU_TOPIC_Subscribe();
} }
if(!strcmp(product_code->valuestring,KK_GW_PRODUCTID)){ if(!strcmp(product_code->valuestring,KK_GW_PRODUCTID)){
if(strstr(type->valuestring,"/thing/status/offline") != NULL){ if(strstr(type->valuestring,"/thing/status/offline") != NULL){
......
...@@ -148,11 +148,10 @@ static void onOptSuccess(void* context, MQTTAsync_successData* response) ...@@ -148,11 +148,10 @@ static void onOptSuccess(void* context, MQTTAsync_successData* response)
{ {
INFO_PRINT("MQTTAsync_sendMessage success,return token:%d,msg length:%d \n", INFO_PRINT("MQTTAsync_sendMessage success,return token:%d,msg length:%d \n",
response->token,response->alt.pub.message.payloadlen); response->token,response->alt.pub.message.payloadlen);
} }
else if(strcmp((char *)context,OPT_SUB)==0) else if(strcmp((char *)context,OPT_SUB)==0)
{ {
//INFO_PRINT("MQTTAsync_subscribe success,return token:%d \n",response->token); INFO_PRINT("MQTTAsync_subscribe success,return token:%d \n",response->token);
} }
else if(strcmp((char *)context,OPT_UNSUB)==0) else if(strcmp((char *)context,OPT_UNSUB)==0)
{ {
...@@ -191,7 +190,7 @@ void KK_Get_MqttClient(MQTTAsync *pClient) ...@@ -191,7 +190,7 @@ void KK_Get_MqttClient(MQTTAsync *pClient)
*pClient = s_Client; *pClient = s_Client;
} }
} }
extern char g_clientId[64];
MQTTAsync KK_MQTT_Connect(void) MQTTAsync KK_MQTT_Connect(void)
{ {
int rc = 0; int rc = 0;
...@@ -201,8 +200,6 @@ MQTTAsync KK_MQTT_Connect(void) ...@@ -201,8 +200,6 @@ MQTTAsync KK_MQTT_Connect(void)
MQTTAsync_setTraceCallback(mqttTraceCallback); MQTTAsync_setTraceCallback(mqttTraceCallback);
opts.MQTTVersion = MQTTVERSION_3_1_1; opts.MQTTVersion = MQTTVERSION_3_1_1;
char mac[16]={0}; char mac[16]={0};
char clientBuf[64] = {0};
char timestamp[16] = {0};
char token[512] = {0}; char token[512] = {0};
char usrname[128] = {0}; char usrname[128] = {0};
fp = fopen("/usr/kk/kk_token.txt", "r"); fp = fopen("/usr/kk/kk_token.txt", "r");
...@@ -211,12 +208,10 @@ MQTTAsync KK_MQTT_Connect(void) ...@@ -211,12 +208,10 @@ MQTTAsync KK_MQTT_Connect(void)
fclose(fp); fclose(fp);
} }
HAL_Get_mac(mac); HAL_Get_mac(mac);
HAL_GetTime_s(timestamp);
sprintf(clientBuf, CLIENTID, KK_CCU_ID,timestamp);
sprintf(usrname, "%s&%s", KK_CCU_ID,KK_CCU_PRODUCTID); sprintf(usrname, "%s&%s", KK_CCU_ID,KK_CCU_PRODUCTID);
printf("cliendid:%s,usrname:%s\n",clientBuf,usrname); printf("cliendid:%s,usrname:%s\n",g_clientId,usrname);
printf("------------>token:%s\n",token); printf("------------>token:%s\n",token);
if ((rc = MQTTAsync_createWithOptions(&s_Client, ADDRESS, clientBuf, MQTTCLIENT_PERSISTENCE_NONE, NULL,&opts)) != MQTTASYNC_SUCCESS) if ((rc = MQTTAsync_createWithOptions(&s_Client, ADDRESS, g_clientId, MQTTCLIENT_PERSISTENCE_NONE, NULL,&opts)) != MQTTASYNC_SUCCESS)
{ {
ERROR_PRINT("Failed to create client object, return code %d\n", rc); ERROR_PRINT("Failed to create client object, return code %d\n", rc);
return NULL; return NULL;
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
#define KK_CCU_ID "CCU_77777" #define KK_CCU_ID "CCU_77777"
#define KK_CCU_PRODUCTID "ccu_n12" #define KK_CCU_PRODUCTID "ccu_n12"
#define KK_GW_PRODUCTID "gateway_2" #define KK_GW_PRODUCTID "gateway_2"
#define KK_CCU_RANDOM "0000000000"
enum { enum {
DEVICE_OFFLINE = 0, DEVICE_OFFLINE = 0,
DEVICE_ONLINE, DEVICE_ONLINE,
......
...@@ -195,7 +195,7 @@ void *kk_scene_yield(void *args) ...@@ -195,7 +195,7 @@ void *kk_scene_yield(void *args)
/****系统起来15s后开始定时处理****/ /****系统起来15s后开始定时处理****/
if((HAL_Uptimes() - s_start_time) <= 15){ if((HAL_Uptimes() - s_start_time) <= 15){
sleep(1); sleep(1);
INFO_PRINT("HAL_Uptimes:%ld\n",HAL_Uptimes()); //INFO_PRINT("HAL_Uptimes:%ld\n",HAL_Uptimes());
continue; continue;
} }
......
...@@ -18,7 +18,7 @@ char* kk_load_json(const char *productCode,int type) ...@@ -18,7 +18,7 @@ char* kk_load_json(const char *productCode,int type)
unsigned int filesize; unsigned int filesize;
if(type == KK_DM_DEVICE_CCU){ if(type == KK_DM_DEVICE_CCU){
path_len = strlen(TSL_CCU_PATH_FILE)+strlen(productCode)+1; path_len = strlen(TSL_CCU_PATH_FILE)+strlen("12")+1;
} }
else if(type == KK_DM_DEVICE_GATEWAY){ else if(type == KK_DM_DEVICE_GATEWAY){
path_len = strlen(TSL_GATEWAY_PATH_FILE)+strlen("2")+1; path_len = strlen(TSL_GATEWAY_PATH_FILE)+strlen("2")+1;
...@@ -36,7 +36,7 @@ char* kk_load_json(const char *productCode,int type) ...@@ -36,7 +36,7 @@ char* kk_load_json(const char *productCode,int type)
memset(tslPath,0x0,path_len); memset(tslPath,0x0,path_len);
if(type == KK_DM_DEVICE_CCU){ if(type == KK_DM_DEVICE_CCU){
snprintf(tslPath,path_len,TSL_CCU_PATH_FILE,productCode); snprintf(tslPath,path_len,TSL_CCU_PATH_FILE,"12");
} }
else if(type == KK_DM_DEVICE_GATEWAY){ else if(type == KK_DM_DEVICE_GATEWAY){
snprintf(tslPath,path_len,TSL_GATEWAY_PATH_FILE,"2"); snprintf(tslPath,path_len,TSL_GATEWAY_PATH_FILE,"2");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment