From 6931273fef7e36bbf8fbf400a990ebb1062ff7b2 Mon Sep 17 00:00:00 2001 From: Jim Kowalkowski Date: Wed, 13 Sep 1995 18:27:48 +0000 Subject: [PATCH] New utilities to list PVs on an IOC and loaded applications. --- src/dbtools/rdbapplist.c | 116 +++++++++++++++++++++++++++++++++++ src/dbtools/rdbls.c | 128 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 244 insertions(+) create mode 100644 src/dbtools/rdbapplist.c create mode 100644 src/dbtools/rdbls.c diff --git a/src/dbtools/rdbapplist.c b/src/dbtools/rdbapplist.c new file mode 100644 index 000000000..9adf4380b --- /dev/null +++ b/src/dbtools/rdbapplist.c @@ -0,0 +1,116 @@ + +/* only runable on work station now */ + +#include "PVS.h" + +#include +#include +#include +#include + +static int read_pvs(BSDATA* info,int serv,char* sname); + +int main(int argc,char** argv) +{ + BSDATA info; + int rc; + + if(argc<2) + { + fprintf(stderr,"usage: %s IOC-ip-address\n",argv[0]); + return -1; + } + + if(BSsetAddress(&info,argv[1])<0) + { + fprintf(stderr,"Cannot determine address for %s\n",argv[1]); + return -1; + } + + rc=read_pvs(&info,PVS_AppList,(char*)NULL); + + if(rc<0) fprintf(stderr,"read of data failed horribly\n"); + return 0; +} + +static int read_pvs(BSDATA* info,int serv,char* sname) +{ + BS* bs; + int verb,size,done,len,i,port,rsize; + char* buffer; + char ip_from[40]; + FILE* fd; + + BSgetAddressPort(info,ip_from,&port); + + /* verify ioc not already added */ + if(access(ip_from,F_OK)==0) + { + /* delete the existing file for this IOC */ + unlink(ip_from); + } + + done=0; + BSsetPort(info,PVS_TCP_PORT); + + if((bs=BSipOpenData(info))==NULL) + { + fprintf(stderr,"Open of socket to IOC failed\n"); + return -1; + } + + if(serv>PVS_LAST_VERB) + rsize=strlen(sname)+1; + else + rsize=0; + + if(BSsendHeader(bs,serv,rsize)<0) + { + fprintf(stderr,"Command send failed\n"); + return -1; + } + + if(rsize>0) + { + if(BSsendData(bs,sname,rsize)<0) + { + fprintf(stderr,"send of command name failed\n"); + return -1; + } + } + + fd=stdout; + buffer=(char*)malloc(PVS_TRANSFER_SIZE+2); + + while(done==0) + { + if(BSreceiveHeader(bs,&verb,&size)<0) + { + fprintf(stderr,"Receive header failed\n"); + done=-1; + } + else + { + switch(verb) + { + case PVS_Data: /* read a block of names */ + if((len=BSreceiveData(bs,buffer,size))<0) + fprintf(stderr,"Receive data failed\n"); + else + fputs(buffer,fd); + fputc('\n',fd); + break; + case BS_Done: /* transfers complete */ + BSclose(bs); + done=-1; + break; + default: + if(size>0) done=-1; + break; + } + } + } + free(buffer); + return 0; +} + diff --git a/src/dbtools/rdbls.c b/src/dbtools/rdbls.c new file mode 100644 index 000000000..3d3b13eb0 --- /dev/null +++ b/src/dbtools/rdbls.c @@ -0,0 +1,128 @@ + +/* only runable on work station now */ + +#include "PVS.h" + +#include +#include +#include +#include + +static int read_pvs(BSDATA* info,int serv,char* sname); + +int main(int argc,char** argv) +{ + BSDATA info; + int rc; + + if(argc<2) + { + fprintf(stderr,"usage: %s IOC-ip-address\n",argv[0]); + return -1; + } + + if(BSsetAddress(&info,argv[1])<0) + { + fprintf(stderr,"Cannot determine address for %s\n",argv[1]); + return -1; + } + + rc=read_pvs(&info,PVS_RecList,(char*)NULL); + + if(rc<0) fprintf(stderr,"read of data failed horribly\n"); + return 0; +} + +static int read_pvs(BSDATA* info,int serv,char* sname) +{ + BS* bs; + int verb,size,done,len,i,port,rsize; + char* buffer; + char ip_from[40]; + FILE* fd; + + BSgetAddressPort(info,ip_from,&port); + + /* printf("IOC %s starting\n",ip_from); */ + + /* verify ioc not already added */ + if(access(ip_from,F_OK)==0) + { + /* delete the existing file for this IOC */ + unlink(ip_from); + } + + done=0; + BSsetPort(info,PVS_TCP_PORT); + + if((bs=BSipOpenData(info))==NULL) + { + fprintf(stderr,"Open of socket to IOC failed\n"); + return -1; + } + + if(serv>PVS_LAST_VERB) + rsize=strlen(sname)+1; + else + rsize=0; + + if(BSsendHeader(bs,serv,rsize)<0) + { + fprintf(stderr,"Command send failed\n"); + return -1; + } + + if(rsize>0) + { + if(BSsendData(bs,sname,rsize)<0) + { + fprintf(stderr,"send of command name failed\n"); + return -1; + } + } + + fd=stdout; + buffer=(char*)malloc(PVS_TRANSFER_SIZE+2); + + while(done==0) + { + if(BSreceiveHeader(bs,&verb,&size)<0) + { + fprintf(stderr,"Receive header failed\n"); + done=-1; + } + else + { + switch(verb) + { + case PVS_Data: /* read a block of names */ + if((len=BSreceiveData(bs,buffer,size))<0) + { + fprintf(stderr,"Receive data failed\n"); + } + else + { + for(i=0;i0) done=-1; + break; + } + } + } + free(buffer); + return 0; +} +