Commit c27371dc authored by 陈伟灿's avatar 陈伟灿

Merge branch 'cwc' into 'master'

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

See merge request chenweican/k-sdk!81
parents 03825dca 58448213
......@@ -4,16 +4,17 @@
#define ADDRESS "tcp://172.25.240.199:1883"//"tcp://172.25.240.31:1983"////
#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 TIMEOUT 10000L
#define USRNAME "hangzhou_gateway "
#define PASSWORD "2ca1442865ff4cb99870f60f2c646190"
#define AUTO_CONN 1
#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 {
RETURN_FAIL = -1,
RETURN_SUCCESS = 0,
......
......@@ -14,11 +14,32 @@
#include "cJSON.h"
#include "com_api.h"
#include "kk_product.h"
#define IPSTR "172.25.240.122"
#define PORT 8092
#include "kcloud_config.h"
#define BUFSIZE 1024
#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){
FILE *fp;
if(info == NULL){
......@@ -170,6 +191,7 @@ int arrayToStr(unsigned char *buf, unsigned int buflen, char *out)
printf("out = %s\n", out);
return buflen * 2;
}
static char * kk_create_register_info()
{
cJSON *root;
......@@ -182,14 +204,22 @@ static char * kk_create_register_info()
char mac[16] = {0};
char ramdonId[16] = {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();
HAL_Get_mac(mac);
HAL_GetTime_s(ramdonId);
cJSON_AddStringToObject(root, "deviceCode", "CCU_77777");
cJSON_AddStringToObject(root, "deviceCode", KK_CCU_ID);
cJSON_AddStringToObject(root, "productCode",productCode);
signSource = kk_dictionary_order("CCU_77777",productCode,"0000000000");
utils_hmac_sha256(signSource, strlen(signSource), PRODUCTSECRET, strlen(PRODUCTSECRET), sign_hex);
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);
}else{
utils_hmac_sha256(signSource, strlen(signSource), productSecret, strlen(productSecret), sign_hex);
}
arrayToStr(sign_hex,32,sign_hex_str);
base64Out = malloc(128);
......@@ -201,7 +231,7 @@ static char * kk_create_register_info()
//base64_encode(sign_hex_str,base64Out,strlen(sign_hex_str));
printf("[%s][%d]base64Out:%s\n",__FUNCTION__,__LINE__,base64Out);
cJSON_AddStringToObject(root, "sign",sign_hex_str);
cJSON_AddStringToObject(root, "random","0000000000");
cJSON_AddStringToObject(root, "random",KK_CCU_RANDOM);
free(signSource);
free(base64Out);
out=cJSON_Print(root);
......@@ -210,14 +240,44 @@ static char * kk_create_register_info()
printf("--------------------->kk_create_register_info:%s\n",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 tmp[128] = {0};
int len = 0;
memset(str2, 0, sizeof(str2));
strcat(str2, kk_create_register_info());
if(type == 0){
strcat(str2, kk_create_register_info());
}else{
strcat(str2, kk_create_get_jwt_info());
}
len = strlen(str2);
sprintf(str, "%d", len);
......@@ -263,7 +323,7 @@ int kk_start_ccu_register(void)
return -1;
}
printf("connect successful\n");
ret = kk_send_register_info(sockfd,"/deviceRegister/register");
ret = kk_send_register_info(sockfd,"/deviceRegister/register",0);
if (ret < 0) {
printf("send fail'%s'\n",errno, strerror(errno));
close(sockfd);
......@@ -303,7 +363,7 @@ int kk_start_ccu_register(void)
printf("[%s][%d]buf2:%s\n",__FUNCTION__,__LINE__,buf2);
ret = kk_parse_deviceSecret(buf2);
if(ret == 0){
ret = kk_send_register_info(sockfd,"/auth/generateJwt");
ret = kk_send_register_info(sockfd,"/auth/generateJwt",1);
if (ret < 0) {
printf("send fail'%s'\n",errno, strerror(errno));
close(sockfd);
......@@ -315,10 +375,8 @@ int kk_start_ccu_register(void)
}
}
}else if(registerType == 2){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
char* jwt = strstr(buf,"jwt");
if(jwt != NULL){
printf("[%s][%d]\n",__FUNCTION__,__LINE__);
char* start = strchr(buf,'{');
char* end = strrchr(buf,'}');
strncpy(buf2,start,end-start+1);
......
......@@ -8,10 +8,10 @@
#include "kk_log.h"
const char KK_URI_SYS_PREFIX[] = "/sys/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_TOPO_CHANGE[] = "/sys/kk/%s/%s/thing/topo/change";
const char KK_URI_SYS_PREFIX_EX[] = "/sys/kk/%s/%s";
const char KK_URI_SYS_PREFIX[] = "biz/kk/%s/%s/thing/service/property/set";
const char KK_URI_SYS_PREFIX_SERVICE[] = "biz/kk/%s/%s/thing/service/+";
const char KK_URI_SYS_PREFIX_TOPO_CHANGE[] = "biz/kk/%s/%s/thing/topo/change";
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_PROCESS[] = "/ota/device/progress/%s/%s";
const char KK_URI_OTA_INFORM[] = "/ota/device/inform/%s/%s";
......@@ -54,8 +54,8 @@ int KK_Subdev_Subscribe(const cJSON *root)
memset(url, 0, url_len);
snprintf(url, url_len, KK_URI_OTA_PREFIX, productCode->valuestring, deviceCode->valuestring);
INFO_PRINT("ota [%s][%d] URL:%s\n",__FUNCTION__,__LINE__,url);
res = KK_MQTT_SubTopic(url);
//INFO_PRINT("ota [%s][%d] URL:%s\n",__FUNCTION__,__LINE__,url);
//res = KK_MQTT_SubTopic(url);
memset(url, 0, url_len);
snprintf(url, url_len, KK_URI_SYS_PREFIX, productCode->valuestring, deviceCode->valuestring);
......@@ -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;
......@@ -100,15 +100,19 @@ static int _kk_client_subscribe(char productCode[PRODUCT_CODE_LEN],char deviceCo
free(url);
return res;
}
int KK_Client_Gateway_Subscribe(void)
static int s_ccu_topic_sub = 0;
int KK_CCU_TOPIC_Subscribe(void)
{
char productCode[PRODUCT_CODE_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_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,
......@@ -225,7 +229,7 @@ char* KK_Make_Topic(cJSON *info)
}
if((!strcmp(product_code->valuestring,"15") || !strcmp(product_code->valuestring,"ccu_n12")) && \
(strstr(type->valuestring,"thing/status/online") != NULL)){
KK_Client_Gateway_Subscribe();
KK_CCU_TOPIC_Subscribe();
}
if(!strcmp(product_code->valuestring,KK_GW_PRODUCTID)){
if(strstr(type->valuestring,"/thing/status/offline") != NULL){
......
......@@ -148,11 +148,10 @@ static void onOptSuccess(void* context, MQTTAsync_successData* response)
{
INFO_PRINT("MQTTAsync_sendMessage success,return token:%d,msg length:%d \n",
response->token,response->alt.pub.message.payloadlen);
}
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)
{
......@@ -191,7 +190,7 @@ void KK_Get_MqttClient(MQTTAsync *pClient)
*pClient = s_Client;
}
}
extern char g_clientId[64];
MQTTAsync KK_MQTT_Connect(void)
{
int rc = 0;
......@@ -200,9 +199,7 @@ MQTTAsync KK_MQTT_Connect(void)
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
MQTTAsync_setTraceCallback(mqttTraceCallback);
opts.MQTTVersion = MQTTVERSION_3_1_1;
char mac[16]={0};
char clientBuf[64] = {0};
char timestamp[16] = {0};
char mac[16]={0};
char token[512] = {0};
char usrname[128] = {0};
fp = fopen("/usr/kk/kk_token.txt", "r");
......@@ -211,12 +208,10 @@ MQTTAsync KK_MQTT_Connect(void)
fclose(fp);
}
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);
printf("cliendid:%s,usrname:%s\n",clientBuf,usrname);
printf("cliendid:%s,usrname:%s\n",g_clientId,usrname);
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);
return NULL;
......
......@@ -34,7 +34,7 @@
#define KK_CCU_ID "CCU_77777"
#define KK_CCU_PRODUCTID "ccu_n12"
#define KK_GW_PRODUCTID "gateway_2"
#define KK_CCU_RANDOM "0000000000"
enum {
DEVICE_OFFLINE = 0,
DEVICE_ONLINE,
......
......@@ -195,7 +195,7 @@ void *kk_scene_yield(void *args)
/****系统起来15s后开始定时处理****/
if((HAL_Uptimes() - s_start_time) <= 15){
sleep(1);
INFO_PRINT("HAL_Uptimes:%ld\n",HAL_Uptimes());
//INFO_PRINT("HAL_Uptimes:%ld\n",HAL_Uptimes());
continue;
}
......
......@@ -18,7 +18,7 @@ char* kk_load_json(const char *productCode,int type)
unsigned int filesize;
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){
path_len = strlen(TSL_GATEWAY_PATH_FILE)+strlen("2")+1;
......@@ -36,7 +36,7 @@ char* kk_load_json(const char *productCode,int type)
memset(tslPath,0x0,path_len);
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){
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