| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #include "config.h"
- #include <ctype.h>
- AppConfig g_cfg;
- size_t safe_strcpy(char*dest,const char*src,size_t size){
- if(!dest||size==0) return 0;
- dest[0]=0; if(!src) return 0;
- size_t i=0; for(;i<size-1 && src[i];i++) dest[i]=src[i];
- dest[i]=0; return i;
- }
- char* str_trim(char*s){
- if(!s) return s;
- while(*s && isspace((unsigned char)*s)) s++;
- char*e=s+strlen(s); while(e>s && isspace((unsigned char)e[-1])) *--e=0;
- return s;
- }
- void config_defaults(AppConfig*c){
- memset(c,0,sizeof(*c));
- safe_strcpy(c->cms_ip, "117.131.63.98", sizeof(c->cms_ip)); /* from screenshot */
- c->cms_port = DEFAULT_CMS_PORT; /* 7031 */
- safe_strcpy(c->device_id,"AX5324540", sizeof(c->device_id));
- safe_strcpy(c->license, "abc12345", sizeof(c->license));
- safe_strcpy(c->proto_version, ISUP_PROTO_VERSION, sizeof(c->proto_version));
- c->sms_port = DEFAULT_SMS_PORT; /* 7660 */
- c->alarm_port = 7200;
- safe_strcpy(c->rtmp_host,"127.0.0.1",sizeof(c->rtmp_host));
- c->rtmp_port = DEFAULT_RTMP_PORT; /* 1935 */
- safe_strcpy(c->rtmp_app, "live", sizeof(c->rtmp_app));
- c->fps=SIM_FPS; c->width=SIM_IMAGE_WIDTH; c->height=SIM_IMAGE_HEIGHT; c->bitrate_kbps=SIM_BITRATE/1000;
- safe_strcpy(c->log_file,"./isup.log",sizeof(c->log_file));
- c->log_level=LOG_INFO; c->simulate=0;
- }
- int config_load(const char*path,AppConfig*c){
- config_defaults(c);
- FILE*f=fopen(path,"r"); if(!f){ LOG_WARN("config '%s' not found, using defaults",path); return SUCCESS; }
- char line[512];
- while(fgets(line,sizeof(line),f)){
- if(line[0]=='#'||line[0]==';'||line[0]=='\n') continue;
- char*val=strchr(line,':'); if(!val) val=strchr(line,'='); if(!val) continue;
- *val=0; char*k=str_trim(line); char*v=str_trim(val+1);
- #define EQ(x) (strcmp(k,x)==0)
- if(EQ("cms_ip")) safe_strcpy(c->cms_ip,v,sizeof(c->cms_ip));
- else if(EQ("cms_port")) c->cms_port=atoi(v);
- else if(EQ("device_id")) safe_strcpy(c->device_id,v,sizeof(c->device_id));
- else if(EQ("license")) safe_strcpy(c->license,v,sizeof(c->license));
- else if(EQ("proto_version")) safe_strcpy(c->proto_version,v,sizeof(c->proto_version));
- else if(EQ("sms_port")) c->sms_port=atoi(v);
- else if(EQ("alarm_port")) c->alarm_port=atoi(v);
- else if(EQ("rtmp_host")) safe_strcpy(c->rtmp_host,v,sizeof(c->rtmp_host));
- else if(EQ("rtmp_port")) c->rtmp_port=atoi(v);
- else if(EQ("rtmp_app")) safe_strcpy(c->rtmp_app,v,sizeof(c->rtmp_app));
- else if(EQ("fps")) c->fps=atoi(v);
- else if(EQ("width")) c->width=atoi(v);
- else if(EQ("height")) c->height=atoi(v);
- else if(EQ("bitrate_kbps")) c->bitrate_kbps=atoi(v);
- else if(EQ("log_file")) safe_strcpy(c->log_file,v,sizeof(c->log_file));
- else if(EQ("log_level")) c->log_level=atoi(v);
- else if(EQ("simulate")) c->simulate=atoi(v);
- }
- fclose(f);
- if(c->fps<=0){ LOG_WARN("invalid fps<=0, reset to %d",SIM_FPS); c->fps=SIM_FPS; } /* FIX: div-by-zero */
- return SUCCESS;
- }
- int config_save(const char*path,const AppConfig*c){
- FILE*f=fopen(path,"w"); if(!f) return FAILURE;
- fprintf(f,"# Hikvision ISUP client config (generated)\n");
- fprintf(f,"cms_ip=%s\ncms_port=%d\ndevice_id=%s\nlicense=%s\nproto_version=%s\n",
- c->cms_ip,c->cms_port,c->device_id,c->license,c->proto_version);
- fprintf(f,"sms_port=%d\nalarm_port=%d\nrtmp_host=%s\nrtmp_port=%d\nrtmp_app=%s\n",
- c->sms_port,c->alarm_port,c->rtmp_host,c->rtmp_port,c->rtmp_app);
- fprintf(f,"fps=%d\nwidth=%d\nheight=%d\nbitrate_kbps=%d\nlog_file=%s\nlog_level=%d\nsimulate=%d\n",
- c->fps,c->width,c->height,c->bitrate_kbps,c->log_file,c->log_level,c->simulate);
- fclose(f); return SUCCESS;
- }
- void config_print(const AppConfig*c){
- LOG_INFO("config: platform=%s:%d dev=%s proto=%s rtmp=%s:%d/%s fps=%d %dx%d @%dkbps",
- c->cms_ip,c->cms_port,c->device_id,c->proto_version,c->rtmp_host,c->rtmp_port,
- c->rtmp_app,c->fps,c->width,c->height,c->bitrate_kbps);
- }
|