diff options
author | tomsmeding <tom.smeding@gmail.com> | 2017-10-11 22:28:00 +0200 |
---|---|---|
committer | tomsmeding <tom.smeding@gmail.com> | 2017-10-11 22:28:00 +0200 |
commit | 54d371e4e897fa58c316fcc3b6dc7bde5af6868c (patch) | |
tree | d44b2cde84cf59ddf8f34fe2d59031dd3d46214f /controller/main.c | |
parent | 34b0e1a8adf19f695a85280ebb69b062d71b48f7 (diff) |
Diffstat (limited to 'controller/main.c')
-rw-r--r-- | controller/main.c | 76 |
1 files changed, 66 insertions, 10 deletions
diff --git a/controller/main.c b/controller/main.c index d289ce9..be13773 100644 --- a/controller/main.c +++ b/controller/main.c @@ -172,16 +172,7 @@ static void frame_data_sink(u8 *newdata,i64 newdatalen,void *payload){ bufferlen-=cursor; } -int main(int argc,char **argv){ - if(argc<3||argc>4){ - fprintf(stderr,"Usage: %s <logfile> <ip addr> [port=57575]\n",argv[0]); - return 1; - } - - const char *logfname=argv[1]; - const char *ipaddr=argv[2]; - const char *port=argc==4?argv[4]:"57575"; - +static int connect_server(const char *logfname,const char *ipaddr,const char *port){ logfile=fopen(logfname,"w"); if(logfile==NULL){ fprintf(stderr,"Cannot open log file '%s'\n",logfname); @@ -284,3 +275,68 @@ cleanup: if(haderror)return 1; return 0; } + +static int read_zz_file(const char *zzfname,const char *logfname){ + logfile=fopen(logfname,"w"); + if(logfile==NULL){ + fprintf(stderr,"Cannot open log file '%s'\n",logfname); + return 1; + } + + FILE *f=fopen(zzfname,"r"); + if(f==NULL){ + fprintf(stderr,"Cannot open zz file '%s'\n",zzfname); + return 1; + } + + struct unzbuffer *z=unzbuffer_init(frame_data_sink,NULL); + u8 buf[4096]; + while(true){ + i64 nr=fread(buf,1,sizeof buf,f); + if(nr<=0){ + if(ferror(f)){ + fprintf(stderr,"An error occurred reading the zz file '%s'\n",zzfname); + return 1; + } + break; + } + if(!unzbuffer_write(z,buf,nr)){ + return 1; + } + } + if(!unzbuffer_finish_destroy(z))return 1; + return 0; +} + +int main(int argc,char **argv){ + if(argc<=1){ + fprintf(stderr,"Usage:\n"); + fprintf(stderr," %s connect <logfile> <ip addr> [port=57575]\n",argv[0]); + fprintf(stderr," %s read <zzfile> <logfile>\n",argv[0]); + fprintf(stderr,"<logfile> will probably contain JSON.\n"); + fprintf(stderr,"<zzfile> should contain zlib-compressed protocol data.\n"); + return 1; + } + + if(strcmp(argv[1],"connect")==0){ + if(argc<4||argc>5){ + fprintf(stderr,"Invalid number of arguments, run without arguments for usage\n"); + return 1; + } + const char *logfname=argv[2]; + const char *ipaddr=argv[3]; + const char *port=argc==5?argv[4]:"57575"; + return connect_server(logfname,ipaddr,port); + } else if(strcmp(argv[1],"read")==0){ + if(argc!=4){ + fprintf(stderr,"Invalid number of arguments, run without arguments for usage\n"); + return 1; + } + const char *zzfname=argv[2]; + const char *logfname=argv[3]; + return read_zz_file(zzfname,logfname); + } else { + fprintf(stderr,"Invalid command '%s'; run without arguments for usage\n",argv[1]); + return 1; + } +} |