Set_Ntp and Get_Ntp 主要是IP

本文介绍了通过API实现NTP配置获取与设置的方法。详细展示了如何构造NTP信息结构体,包括从DHCP获取NTP配置及手动设置IPv4地址的过程,并对输入的有效性进行了验证。
 
 
int  __ns8__GetNTP(struct soap* soap, struct _ns8__GetNTP *ns8__GetNTP, struct _ns8__GetNTPResponse *ns8__GetNTPResponse)
{

printf("%s\n",__FUNCTION__);

readIPaddr(); //read NTP configuration
struct ns3__NTPInformation *pNTPInformation;
pNTPInformation=(struct ns3__NTPInformation*)soap_malloc(soap, sizeof(struct ns3__NTPInformation));
memset(pNTPInformation, 0, sizeof(struct ns3__NTPInformation));

// No support DHCP
pNTPInformation->FromDHCP = xsd__boolean__false_;
pNTPInformation->__sizeNTPFromDHCP = 0;
pNTPInformation->__sizeNTPManual = 1;

// Set NTP Manual parameter
struct ns3__NetworkHost *pNTPManual;
pNTPManual=(struct ns3__NetworkHost*)soap_malloc(soap, sizeof(struct ns3__NetworkHost));
memset(pNTPManual, 0, sizeof(struct ns3__NetworkHost));
pNTPManual->Type = ns3__NetworkHostType__IPv4;

static char *pAddr[16] = {NULL};
static char szTmp[16] = {0};

strcpy(szTmp, readIPaddr_r[0].IP4);

*pAddr = szTmp;

pNTPManual->IPv4Address = pAddr;

pNTPInformation->NTPManual = pNTPManual;

ns8__GetNTPResponse->NTPInformation = pNTPInformation;

return SOAP_OK;
}


int  __ns8__SetNTP(struct soap* soap, struct _ns8__SetNTP *ns8__SetNTP, struct _ns8__SetNTPResponse *ns8__SetNTPResponse)
{
printf("%s\n",__FUNCTION__);

if (xsd__boolean__true_ == ns8__SetNTP->FromDHCP)
{
return soap_receiver_fault_subcode(soap, "ActionNotSupported", "DHCPNotSupported", NULL);
}

if (ns3__NetworkHostType__IPv4 == ns8__SetNTP->NTPManual->Type)
{

char *pszIP = NULL;
int judge_IPv4;
pszIP = *(ns8__SetNTP->NTPManual->IPv4Address);

judge_IPv4 = is_valid_ip(pszIP); //判断IP是不是合法  
                                                                                   //IP 地址的判断点这里可以到在这里。
        if(0 == judge_IPv4)
{
writeNTPaddr(pszIP); //保存NTP信息
//printf("success\n");
}
else
{
return soap_receiver_fault_subcode(soap, "ActionNotSupported", "invalidIPv4Address", "invalidIPv4Address IPv4");
}
printf("ip4:%s\n",*(ns8__SetNTP->NTPManual->IPv4Address ));
}
else if (ns3__NetworkHostType__IPv6 == ns8__SetNTP->NTPManual->Type)
{
return soap_receiver_fault_subcode(soap, "ActionNotSupported", "NoSupportedIPv6Address", "No Support IPv6");
}
else if (ns3__NetworkHostType__DNS == ns8__SetNTP->NTPManual->Type)
{
return soap_receiver_fault_subcode(soap, "ActionNotSupported", "NoSupportedDnsName ", "No Support DNS");
}

return SOAP_OK;
}
  


现在当检测不通过时的SYSTIME_RSP_TYPE要像get函数一样从数据库中获取,而不是直接给值,也不是像正常的set一样从前端获取,该怎么修改? APPL_ERRCODE sysTimeSettingGetHandle(UI_CTX *ctx) { int ret = ERR_NO_ERROR; int timeSrc = -1; char timeType[SYSTIME_TYPE_STR_LEN] = {0}; JSON_Value *rspVal = json_value_init_object(); JSON_Object *rspObj = json_value_get_object(rspVal); JSON_Value *retVal = json_value_init_object(); JSON_Object *retObj = json_value_get_object(retVal); // 获取time src APPL_IF_ERR_DONE(ret, sysTimeSourceGet(&timeSrc)); // DBG_ALZ("timeSrc = %d", timeSrc); switch (timeSrc) { case TIME_MANUAL: snprintf(timeType, SYSTIME_TYPE_STR_LEN, "%s", SYSTIME_TYPE_MANUAL); break; case TIME_NTP: snprintf(timeType, SYSTIME_TYPE_STR_LEN, "%s", SYSTIME_TYPE_NTP); break; default: DBG_ALZ("timeSrc[%d] invalid", timeSrc); ret = ERR_BAD_PARAM; break; } json_object_set_string(retObj, SYSTIME_RSP_TYPE, timeType); APPL_IF_ERR_DONE(ret, _fillSysdate(retObj)); APPL_IF_ERR_DONE(ret, _fillSystimeRetObj(retObj)); json_object_set_value(rspObj, SYSTIME_RSP_RESULT, retVal); json_object_set_string(rspObj, SYSTIME_RSP_ERRCODE, "0"); json_object_set_number(rspObj, SYSTIME_RSP_ID, 1); ctx->rsp = rspVal; done: return ret; } APPL_ERRCODE sysTimeSettingSetHandle(UI_CTX *ctx) { int ret = ERR_NO_ERROR; TIMESET_LOG_DBG_INFO("Enter sysTimeSettingSetHandle"); JSON_Value *rspVal = json_value_init_object(); JSON_Object *rspObj = json_value_get_object(rspVal); JSON_Value *retVal = json_value_init_object(); JSON_Object *retObj = json_value_get_object(retVal); char setTimeStr[SYSTIME_STR_LENGTH] = {0}; ret = httpConvertForm2Json(ctx, &ctx->param); if (ERR_OK != ret) { DBG_ALZ("failed(%d) to httpConvertForm2Json", ret); return ret; } JSON_Object *params = json_object_get_object(ctx->param, SYSTIME_REQ_PARAMS); params = params ? params : NULL; const char *systimeType = json_object_get_string(params, SYSTIME_REQ_TYPE); systimeType = systimeType ? systimeType : ""; // 不需要区分manual或同步PC if (0 == strcmp(systimeType, "manual")) { const char *date = json_object_get_string(params, SYSTIME_REQ_DATE); date = date ? date : ""; const char *time = json_object_get_string(params, SYSTIME_REQ_TIME); time = time ? time : ""; TIMESET_LOG_DBG_INFO("systimeType[%s], date[%s], time[%s]", systimeType, date, time); // 手动设置时间 if (0 == strcmp(date, "") || 0 == strcmp(time, "")) { DBG_ALZ("Bad param. date[%s],time[%s]", date, time); ret = ERR_BAD_PARAM; goto done; } // /* MM/DD/YYYY-HH:MM:SS format */ snprintf(setTimeStr, SYSTIME_STR_LENGTH, "%s-%s", date, time); TIMESET_LOG_DBG_INFO("set configDB TimeStr[%s]", setTimeStr); APPL_IF_ERR_DONE(ret, sysTimeManuallySet(TIME_MANUAL, setTimeStr)); APPL_IF_ERR_DONE(ret, _fillSystimeRetObj(retObj)); json_object_set_string(retObj, SYSTIME_RSP_TYPE, systimeType); json_object_set_string(retObj, SYSTIME_RSP_DATE, date); json_object_set_string(retObj, SYSTIME_RSP_TIME, time); } else if (0 == strcmp(systimeType, "auto")) { // 通过ntp设置时间 SNTP_CFG_T ntpSet = {0}; const char *timeZoneStr = json_object_get_string(params, SYSTIME_REQ_NTP_ZONE); timeZoneStr = timeZoneStr ? timeZoneStr : ""; const char *ntpSrv1 = json_object_get_string(params, SYSTIME_REQ_NTP_SVR1); ntpSrv1 = ntpSrv1 ? ntpSrv1 : ""; const char *ntpSrv2 = json_object_get_string(params, SYSTIME_REQ_NTP_SVR2); ntpSrv2 = ntpSrv2 ? ntpSrv2 : ""; int timezone = atoi(timeZoneStr); APPL_ENSURE_DONE(ret, SYSTIME_TIMEZONE_IS_VALID(timezone), ERR_BAD_PARAM); int srv1Valid = sysTimeNtpServeraddrIsValidCpnWeb(ntpSrv1); int srv2Valid = sysTimeNtpServeraddrIsValidCpnWeb(ntpSrv2); if (srv1Valid != ERR_NO_ERROR || srv2Valid != ERR_NO_ERROR) { APPL_IF_ERR_DONE(ret, _fillSysdate(retObj)); APPL_IF_ERR_DONE(ret, _fillSystimeRetObj(retObj)); char errCodeStr[16]; snprintf(errCodeStr, sizeof(errCodeStr), "%d", ERR_SYSTIME_NTP_SERVER_INVALID); json_object_set_string(retObj, SYSTIME_RSP_TYPE, "manual"); json_object_set_value(rspObj, SYSTIME_RSP_RESULT, retVal); json_object_set_string(rspObj, SYSTIME_RSP_ERRCODE, errCodeStr); json_object_set_number(rspObj, SYSTIME_RSP_ID, 1); ctx->rsp = rspVal; ret = ERR_NO_ERROR; goto done; } memset(&ntpSet, 0, sizeof(SNTP_CFG_T)); ntpSet.updateRate = DEFAULT_UPDATE_PEROID; ntpSet.timeZone = SYSTIME_TIMEZONE_TO_UTC(timezone); TIMESET_LOG_DBG_INFO("timezone web to utc[%d]", ntpSet.timeZone); ntpSet.timeZone = SYSTIME_TIMEZONE_TO_SET(ntpSet.timeZone); TIMESET_LOG_DBG_INFO("timezone uct to set configDB[%d]", ntpSet.timeZone); ntpSet.cfgServerNum = 2; snprintf(ntpSet.cfgServer[0], NTPSERVER_MAX_LEN, "%s", ntpSrv1); snprintf(ntpSet.cfgServer[1], NTPSERVER_MAX_LEN, "%s", ntpSrv2); APPL_IF_ERR_DONE(ret, sysTimeNtpCfgSet(ntpSet, TRUE)); APPL_IF_ERR_DONE(ret, _fillSysdate(retObj)); APPL_IF_ERR_DONE(ret, _fillSystimeRetObj(retObj)); json_object_set_string(retObj, SYSTIME_RSP_TYPE, systimeType); } else { DBG_ALZ("Bad param. systimeType[%s]", systimeType); ret = ERR_BAD_PARAM; goto done; } json_object_set_value(rspObj, SYSTIME_RSP_RESULT, retVal); json_object_set_string(rspObj, SYSTIME_RSP_ERRCODE, "0"); json_object_set_number(rspObj, SYSTIME_RSP_ID, 1); ctx->rsp = rspVal; done: return ret; }
最新发布
12-09
这个是通过网页设置time setting的函数,其在设置ntp_svr1和ntp_svr2的时候没有对地址的合法性进行检测,现在需要对其进行合法性检测,该怎么修改?后面是我使用CLI进行设置time setting的函数,其具有地址的合法性检测,模仿其合法性检测即可 APPL_ERRCODE sysTimeSettingSetHandle(UI_CTX *ctx) { int ret = ERR_NO_ERROR; TIMESET_LOG_DBG_INFO("Enter sysTimeSettingSetHandle"); JSON_Value *rspVal = json_value_init_object(); JSON_Object *rspObj = json_value_get_object(rspVal); JSON_Value *retVal = json_value_init_object(); JSON_Object *retObj = json_value_get_object(retVal); char setTimeStr[SYSTIME_STR_LENGTH] = {0}; ret = httpConvertForm2Json(ctx, &ctx->param); if (ERR_OK != ret) { DBG_ALZ("failed(%d) to httpConvertForm2Json", ret); return ret; } JSON_Object *params = json_object_get_object(ctx->param, SYSTIME_REQ_PARAMS); params = params ? params : NULL; const char *systimeType = json_object_get_string(params, SYSTIME_REQ_TYPE); systimeType = systimeType ? systimeType : ""; // 不需要区分manual或同步PC if (0 == strcmp(systimeType, "manual")) { const char *date = json_object_get_string(params, SYSTIME_REQ_DATE); date = date ? date : ""; const char *time = json_object_get_string(params, SYSTIME_REQ_TIME); time = time ? time : ""; TIMESET_LOG_DBG_INFO("systimeType[%s], date[%s], time[%s]", systimeType, date, time); // 手动设置时间 if (0 == strcmp(date, "") || 0 == strcmp(time, "")) { DBG_ALZ("Bad param. date[%s],time[%s]", date, time); ret = ERR_BAD_PARAM; goto done; } // /* MM/DD/YYYY-HH:MM:SS format */ snprintf(setTimeStr, SYSTIME_STR_LENGTH, "%s-%s", date, time); TIMESET_LOG_DBG_INFO("set configDB TimeStr[%s]", setTimeStr); APPL_IF_ERR_DONE(ret, sysTimeManuallySet(TIME_MANUAL, setTimeStr)); APPL_IF_ERR_DONE(ret, _fillSystimeRetObj(retObj)); json_object_set_string(retObj, SYSTIME_RSP_TYPE, systimeType); json_object_set_string(retObj, SYSTIME_RSP_DATE, date); json_object_set_string(retObj, SYSTIME_RSP_TIME, time); } else if (0 == strcmp(systimeType, "auto")) { // 通过ntp设置时间 SNTP_CFG_T ntpSet = {0}; const char *timeZoneStr = json_object_get_string(params, SYSTIME_REQ_NTP_ZONE); timeZoneStr = timeZoneStr ? timeZoneStr : ""; const char *ntpSrv1 = json_object_get_string(params, SYSTIME_REQ_NTP_SVR1); ntpSrv1 = ntpSrv1 ? ntpSrv1 : ""; const char *ntpSrv2 = json_object_get_string(params, SYSTIME_REQ_NTP_SVR2); ntpSrv2 = ntpSrv2 ? ntpSrv2 : ""; int timezone = atoi(timeZoneStr); APPL_ENSURE_DONE(ret, SYSTIME_TIMEZONE_IS_VALID(timezone), ERR_BAD_PARAM); APPL_ENSURE_DONE(ret, (0!=strcmp(ntpSrv1,"")) && (0!=strcmp(ntpSrv2,"")), ERR_BAD_PARAM); memset(&ntpSet, 0, sizeof(SNTP_CFG_T)); ntpSet.updateRate = DEFAULT_UPDATE_PEROID; ntpSet.timeZone = SYSTIME_TIMEZONE_TO_UTC(timezone); TIMESET_LOG_DBG_INFO("timezone web to utc[%d]", ntpSet.timeZone); ntpSet.timeZone = SYSTIME_TIMEZONE_TO_SET(ntpSet.timeZone); TIMESET_LOG_DBG_INFO("timezone uct to set configDB[%d]", ntpSet.timeZone); ntpSet.cfgServerNum = 2; snprintf(ntpSet.cfgServer[0], NTPSERVER_MAX_LEN, "%s", ntpSrv1); snprintf(ntpSet.cfgServer[1], NTPSERVER_MAX_LEN, "%s", ntpSrv2); APPL_IF_ERR_DONE(ret, sysTimeNtpCfgSet(ntpSet, TRUE)); APPL_IF_ERR_DONE(ret, _fillSysdate(retObj)); APPL_IF_ERR_DONE(ret, _fillSystimeRetObj(retObj)); json_object_set_string(retObj, SYSTIME_RSP_TYPE, systimeType); } else { DBG_ALZ("Bad param. systimeType[%s]", systimeType); ret = ERR_BAD_PARAM; goto done; } json_object_set_value(rspObj, SYSTIME_RSP_RESULT, retVal); json_object_set_string(rspObj, SYSTIME_RSP_ERRCODE, "0"); json_object_set_number(rspObj, SYSTIME_RSP_ID, 1); ctx->rsp = rspVal; done: return ret; } 这是CLI的函数 int cli_sysTimeNtpSetCpn(IN cli_env *pCliEnv, IN int timeZone, IN char *server1, IN char *server2, IN int period) { DBG_INFO_DEBUG("Enter cli_sysTimeNtpSetCpn"); DBG_INFO_DEBUG("timeZone:%d, server1:%s, server2:%s, period:%d", timeZone, server1, server2, period); int ret = ERR_NO_ERROR; SNTP_CFG_T sntpCfg = {0}; APPL_ENSURE_DONE(ret, pCliEnv && server1 && server2, ERR_BAD_PARAM); memset(&sntpCfg, 0, sizeof(SNTP_CFG_T)); /* required parameters */ if (!IS_SYSTIME_NTP_PERIOD_VALID(period)) { DBG_INFO_ERROR("invalid NTP period"); ret = ERR_SYSTIME_INVALID_NTP_PERIOD; goto done; } sntpCfg.updateRate = period; // TODO: 改成标准协议的时区后再校验合法性 sntpCfg.timeZone = SYSTIME_TIME_ZONE_STANDARDIZE(timeZone); DBG_INFO_DEBUG("set to configDB timezone[%d]", sntpCfg.timeZone); APPL_IF_ERR_DONE(ret, sysTimeNtpServeraddrIsValidCpn(server1)); APPL_IF_ERR_DONE(ret, sysTimeNtpServeraddrIsValidCpn(server2)); sntpCfg.cfgServerNum = 2; snprintf(sntpCfg.cfgServer[0], NTPSERVER_MAX_LEN, "%s", server1); snprintf(sntpCfg.cfgServer[1], NTPSERVER_MAX_LEN, "%s", server2); APPL_IF_ERR_DONE(ret, sysTimeNtpCfgSet(sntpCfg, TRUE)); done: cli_sysTimePrintError(pCliEnv, ret); return ERR_NO_ERROR; } static int sysTimeNtpServeraddrIsValidCpn(IN const char *ntpServerAddr) { DBG_INFO_DEBUG("ntpServerAddr:%s", ntpServerAddr); int i = 0; int letterFlag = 0; struct in6_addr ipv6Addr = {0}; unsigned int ipv4Addr = 0; APPL_ENSURE_RET(ntpServerAddr); /* IPv6 addr */ if (strchr(ntpServerAddr,':')) { if (GL_OK == ip6HostIpStrToNet((char *)ntpServerAddr, &ipv6Addr)) { DBG("it's valid IPv6 addr"); return ERR_NO_ERROR; } return ERR_SYSTIME_INVALID_NTP_IPV6; } else { for (i = 0; i < strlen(ntpServerAddr); i++) { if ((ntpServerAddr[i] >= 'a' && ntpServerAddr[i] <= 'z') || (ntpServerAddr[i] >= 'A' && ntpServerAddr[i] <= 'Z')) { letterFlag = 1; break; } } /* include letter, it's domain name */ if (letterFlag) { /* domain name */ if (GL_OK == sysTimeIsDomainNameValidCpn(ntpServerAddr)) { DBG_INFO_DEBUG("it's valid domain name addr"); return ERR_NO_ERROR; } return ERR_SYSTIME_INVALID_NTP_DOMAIN_NAME; } else /* IPv4 addr */ { if (GL_OK == ip4HostIpStrToNet((char *)ntpServerAddr, &ipv4Addr)) { DBG_INFO_DEBUG("it's valid IPv4 addr"); return ERR_NO_ERROR; } else { if (0 == ipv4Addr) { DBG_INFO_DEBUG("netServerAddr[%s] is valid addr", ntpServerAddr); return ERR_NO_ERROR; } } return ERR_SYSTIME_INVALID_NTP_IPV4; } } DBG_INFO_DEBUG("it's invalid addr"); return ERR_SYSTIME_INVALID_NTP_SERVER_ADDR; }
12-09
当然了,我给的是另一个文件夹的,现在给你lte的看看。 LOCAL S32 lte_init(void) { /* lte_manger init */ msg_attach_handler(MSGID_DMS_CMD, lte_manager_call_handle); ds_register_get_json("lte_manager", "info_4g", "info_4g", get_info_4g); ds_register_get_json("lte_manager", "info_internet", "info_internet", get_info_internet); ds_register_get_json("lte_manager", "apn", "apn", get_apn_config); ds_register_get_json("lte_manager", "net_det", "net_det", get_net_det_config); ds_register_get_json("lte_manager", "module_info", "module_info", get_lte_module_param_info); ds_register_set_json("lte_manager", "info_data", "info_data", set_info_data_json); ds_register_set_json("lte_manager", "lte_manager", "data_traffic_limit", set_data_traffic_limit_json); ds_register_set_json("lte_manager", "net_det", "net_det", set_net_detection_json); ds_register_action("lte_manager", "get_mobile_traffic_usage", get_mobile_traffic_data); ds_register_pre_set_json("lte_manager", "info_data", "info_data", pre_set_net_det); ds_register_pre_set_json("lte_manager", "apn", "apn", pre_set_apn_config); if(ERROR == msg_attach_handler(TIME_CALIBRATION_MSG_ID, ntp_time_update_lte_callback)) { LTE_ERROR("msg attach handler fail"); } if(ERROR == msg_attach_handler(REBOOT_LTE_MANAGER_MID, reboot_lte_manager_callback)) { LTE_ERROR("msg attach handler fail"); } if(ERROR == msg_attach_handler(LTE_NETWORK_DIAGNOSE_RPL_MID, lte_net_detection_callback)) { LTE_ERROR("msg attach handler fail"); } LTE_INFO("lte module init"); return OK; } 这里的是不是可能有?
10-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值