diff --git a/Platform/user/configm/config-server/authfree_config/authfree.c b/Platform/user/configm/config-server/authfree_config/authfree.c index f4e1872c1..90ee2bd15 100644 --- a/Platform/user/configm/config-server/authfree_config/authfree.c +++ b/Platform/user/configm/config-server/authfree_config/authfree.c @@ -52,7 +52,6 @@ int isIpV4Addr(const char *ipAddr) return -1; } - /*下发配置到内核态 */ int set_freeauthcfg_waitack(freeauth_configure_t *struct_freeauth) { @@ -136,17 +135,39 @@ return 0; /*判断免认证规则源IP地址、目的IP地址是否有效,判断端口号是否有效 */ -ret_code freeauth_config_chk(uint source, uint *config_type, - pointer input, int *input_len, +/*input格式 "{\"type\":0, \"dport\":24, \"name\":\"armink\", \"sip\":1027824, \"dip\":103427824}";*/ +ret_code freeauth_config_chk(uint source, uint config_type, + pointer input, int input_len, pointer output, int *output_len) { ret_code ret = RET_OK; - freeauth_configure_t *struct_freeauth; - struct_freeauth = (freeauth_configure_t *)input; + cJSON *cjson, *res; - if(*input_len < sizeof(freeauth_configure_t) ) + /*JSON字符串到JSON格式 */ + cjson = cJSON_Parse(input); + if(!cjson) { ret = RET_INPUTERR; + ASSERT_RET(ret); + return ret; + } + + /*创建freeauth_configure_t结构体对象 */ + s2j_create_struct_obj(struct_freeauth, freeauth_configure_t); + + /*反序列化数据到freeauth_configure_t结构体对象 */ + s2j_struct_get_basic_element(struct_freeauth, cjson, string, name); + s2j_struct_get_basic_element(struct_freeauth, cjson, int, sip); + s2j_struct_get_basic_element(struct_freeauth, cjson, int, dip); + s2j_struct_get_basic_element(struct_freeauth, cjson, int, dport); + printf("freeauth configure: name: %s sip: %d dip: %d dport: %d\n", + struct_freeauth->name,struct_freeauth->sip, struct_freeauth->dip, struct_freeauth->dport); + + if(input_len < sizeof(freeauth_configure_t) ) + { + ret = RET_INPUTERR; + ASSERT_RET(ret); + return ret; } char str[32]; @@ -155,6 +176,8 @@ ret_code freeauth_config_chk(uint source, uint *config_type, if( isIpV4Addr(sip_addr) < 0 ) { ret = RET_IPINVALID; + ASSERT_RET(ret); + return ret; } char dtr[32]; @@ -163,14 +186,16 @@ ret_code freeauth_config_chk(uint source, uint *config_type, if( isIpV4Addr(dip_addr) < 0 ) { ret = RET_IPINVALID; + ASSERT_RET(ret); + return ret; } if ( (struct_freeauth->dport < DPORT_MIN_NUM) && (struct_freeauth->dport > DPORT_MAX_NUM )) { ret = RET_IPINVALID; /*先用IPVAILD表示,后面加PORTVAILD */ + ASSERT_RET(ret); + return ret; } - - ASSERT_RET(ret); return RET_OK; } @@ -182,10 +207,27 @@ ret_code freeauth_config_proc(uint source, uint config_type, pointer output, int *output_len) { ret_code ret = RET_OK; - int code; - freeauth_configure_t *struct_freeauth; - - struct_freeauth = (freeauth_configure_t *)input; + cJSON *cjson, *res; + char * ret_char = NULL; + int * ret_int = NULL; + + /*JSON字符串到JSON格式 */ + cjson = cJSON_Parse(input); + if(!cjson) + { + ret = RET_INPUTERR; + ASSERT_RET(ret); + return ret; + } + + /*创建freeauth_configure_t结构体对象 */ + s2j_create_struct_obj(struct_freeauth, freeauth_configure_t); + + /*反序列化数据到freeauth_configure_t结构体对象 */ + s2j_struct_get_basic_element(struct_freeauth, cjson, string, name); + s2j_struct_get_basic_element(struct_freeauth, cjson, int, sip); + s2j_struct_get_basic_element(struct_freeauth, cjson, int, dip); + s2j_struct_get_basic_element(struct_freeauth, cjson, int, dport); char str[32]; inet_ntop(AF_INET, (void *)&struct_freeauth->sip, str, 32); @@ -197,20 +239,20 @@ ret_code freeauth_config_proc(uint source, uint config_type, struct_freeauth->name,sip_addr, dip_addr, struct_freeauth->dport); /*用户态下发到内核态auth_hook */ - int ret1 = -1; + int r = -1; printf("cfgchannel main begin:\r\n"); /*创建通道 */ - ret1 = commcfgnl_open(); - if(ret1 < 0) + r = commcfgnl_open(); + if(r < 0) { printf(" pdlivnl_open fail, exit.\r\n"); return RET_ERR; } /*下发配置到内核态 */ - ret1 = set_freeauthcfg_waitack(struct_freeauth); - if(ret1 < 0) + r = set_freeauthcfg_waitack(struct_freeauth); + if(r < 0) { printf("set_cfg_debug_waitack failed.\r\n"); return RET_ERR; @@ -218,8 +260,26 @@ ret_code freeauth_config_proc(uint source, uint config_type, /*关闭netlink通道 */ commcfgnl_close(); - printf("cfgchannel main exit!\r\n"); + + /*创建json对象 */ + res = cJSON_CreateObject(); + if(!res) + { + ret = RET_ERR; + ASSERT_RET(ret); + return ret; + } + + cJSON_AddNumberToObject(res, "result", r); + + /*将json对象转换成json字符串 */ + ret_char = cJSON_PrintUnformatted(res); + ret_int = (int*)ret_char; + memcpy(output, ret_int, sizeof(ret_int)+1); + + free(ret_char); + cJSON_Delete(res); /*把免认证规则的配置信息存入全局变量 */ localuser = struct_freeauth; @@ -229,3 +289,6 @@ ret_code freeauth_config_proc(uint source, uint config_type, + + + diff --git a/Platform/user/configm/config-server/include/authfree.h b/Platform/user/configm/config-server/include/authfree.h index c1d917f13..bddaf5e76 100644 --- a/Platform/user/configm/config-server/include/authfree.h +++ b/Platform/user/configm/config-server/include/authfree.h @@ -37,8 +37,9 @@ int isIpV4Addr(const char *ipAddr); int set_freeauthcfg_waitack(freeauth_configure_t *struct_freeauth); /*判断免认证规则源IP地址、目的IP地址是否有效,判断端口号是否有效 */ -ret_code freeauth_config_chk(uint source, uint *config_type, - pointer input, int *input_len, +/*input格式 "{\"type\":0, \"dport\":24, \"name\":\"armink\", \"sip\":1027824, \"dip\":103427824}";*/ +ret_code freeauth_config_chk(uint source, uint config_type, + pointer input, int input_len, pointer output, int *output_len);