📄 ddns.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include "PRO_file.h"
#include "PRO_GetStr.h"
#include "PRO_SetStr.h"
#include "PRO_SetMultiItemStr.h"
#include "ddns.h"
#include "wan.h"
#include "h_const.h"
#include "system.h"
#define SYSCONF "/var/sys_ipcam.conf"
int ReadDDNSConf(ddns_conf *conf,int poe_acc_index)
{
FILE *fp;
char key[32],hostname[48];
char *p;
char no[3];
if(!conf)
return DDNS_ReadConfErr;
fp=fopen(SYSCONF,"rt");
if(!fp)
return DDNS_ReadConfErr;
#ifdef _MULTI_PPPOE_
if(poe_acc_index>=0&&poe_acc_index<MAX_PPPOE_ACCOUNT)
sprintf(no,"%d",poe_acc_index+1);
else
#endif
no[0]='\0';
sprintf(key,"%sddns_name",no);
PRO_GetStr("DDNS",key,conf->ddns_user,DDNS_MaxNameLen,fp);
sprintf(key,"%sddns_pwd",no);
PRO_GetStr("DDNS",key,conf->ddns_pwd,DDNS_MaxPassLen,fp);
sprintf(key,"%sdomain_name",no);
PRO_GetStr("DDNS",key,hostname,48,fp);
fclose(fp);
p=strrchr(hostname,'.');
if(!p||p==hostname)
return -1;
memset(conf->tl_domain,'\0',sizeof(conf->tl_domain));
strncpy(conf->tl_domain,p+1,DDNS_MaxTlDmLen);
*p=0;
p=strrchr(hostname,'.');
if(!p||p==hostname)
return -1;
memset(conf->dyn_domain,'\0',sizeof(conf->dyn_domain));
strncpy(conf->dyn_domain,p+1,DDNS_MaxDynDmLen);
*p=0;
memset(conf->user_domain,'\0',sizeof(conf->user_domain));
strncpy(conf->user_domain,hostname,DDNS_MaxUserDmLen);
return DDNS_OK;
}
int CheckDDNSConf(ddns_conf *conf)
{
return DDNS_OK;
}
int SaveDDNSConf(ddns_conf *conf,int poe_acc_index)
{
multi_items all_items[DDNS_ITEM_NUM];
char domain[48];
int ret;
char no[3];
ret=CheckDDNSConf(conf);
if(ret)
return ret;
#ifdef _MULTI_PPPOE_
if(poe_acc_index>=0&&poe_acc_index<MAX_PPPOE_ACCOUNT)
sprintf(no,"%d",poe_acc_index+1);
else
#endif
no[0]='\0';
sprintf(all_items[DDNS_USER].key,"%sddns_name",no);
all_items[DDNS_USER].value=conf->ddns_user;
sprintf(all_items[DDNS_PWD].key,"%sddns_pwd",no);
all_items[DDNS_PWD].value=conf->ddns_pwd;
sprintf(all_items[DOMAIN_NAME].key,"%sdomain_name",no);
sprintf(domain,"%s.%s.%s",conf->user_domain,conf->dyn_domain,conf->tl_domain);
all_items[DOMAIN_NAME].value=domain;
ret=PRO_SetMultiItemStr("DDNS",all_items,DDNS_ITEM_NUM,SYSCONF);
if(ret)
return DDNS_SaveConfErr;
//system("/sbin/ez-ipupdate >/dev/null 2>&1");
StartDDNS(0);
return DDNS_OK;
}
int StartDDNS(int bg)
{
char cmd[128];
ddns_conf conf, *pConf;
ReadDDNSConf(&conf, 0);
pConf = &conf;
ReadSystemSettings(&system_conf);
if(pConf->ddns_user[0] && pConf->user_domain[0])
{
sprintf(cmd, "/sbin/ez-ipupdate -u %s:%s -h %s.%s.%s -S %s -i %s 2>/dev/null %s", pConf->ddns_user, pConf->ddns_pwd,
pConf->user_domain, pConf->dyn_domain, pConf->tl_domain,
(strcmp("3322", pConf->dyn_domain)==0)?"qdns":pConf->dyn_domain,
(system_conf.Connection == CONNECTION_SINGLE_PPPOE)?PPP0_WAN:ETH_WAN, (bg == 1)?"&":"");
system(cmd);
return 0;
}
return -1;
}
int StopDDNS()
{
system("/bin/killall -QUIT ez-ipupdate 2>/dev/null");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -