epics/trunk/epics_example/myexampleApp/src
--- epics/trunk/epics_example/myexampleApp/src/dbSubExample.c 2014-07-22 17:10:56 UTC (rev 815)
+++ epics/trunk/epics_example/myexampleApp/src/dbSubExample.c 2014-07-22 17:15:06 UTC (rev 816)
@@ -8,6 +8,7 @@
#include <tcpipExample.h>
#include <stringinRecord.h>
#include <longinRecord.h>
+#include <dbAccess.h>
#include <client_util.h>
@@ -43,6 +44,58 @@
return 0;
}
+static void getIpFromRecord(subRecord* precord, char value[], const int MAX) {
+ char inpa_val[40]; // 40 is maximum size of stringin/out records
+ memset(inpa_val,0,40);
+ snprintf( inpa_val, 40, "%s", (char*) ((precord->inpa).value.constantStr) ) ;
+ if(strlen(inpa_val)>0) {
+ dbAddr paddr;
+ if(dbNameToAddr(inpa_val,&paddr)!=0) {
+ printf("getIpFromRecord: dbNameToAddr for %s failed (paddr=%p)\n",inpa_val,&paddr);
+ }
+ struct stringinRecord* recA = (stringinRecord*)paddr.precord;
+ if (mySubDebug) printf("getIpFromRecord: recA at %p\n",recA);
+ if(recA!=NULL) {
+ if (mySubDebug) printf("getIpFromRecord: recA name %s val %p\n",recA->name,recA->val);
+ char inpa_val2[40];
+ memset(inpa_val2,0,40);
+ snprintf( inpa_val2, 40, "%s", recA->val ) ;
+ if (mySubDebug) printf("getIpFromRecord: got IP %s\n",inpa_val2);
+ if(strlen(inpa_val2)<MAX) {
+ strcpy(value,inpa_val2);
+ } else {
+ printf("getIpFromRecord: IP from DB is too long? %s \n",inpa_val2);
+ }
+ } else {
+ printf("getIpFromRecord: cannot get IP record %s \n",inpa_val);
+ }
+ } else {
+ printf("getIpFromRecord: INPA string has zero length \n");
+ }
+}
+static int getPortFromRecord(subRecord* precord) {
+ char inpb_val[40]; // 40 is maximum size of stringin/out records
+ memset(inpb_val,0,40);
+ snprintf( inpb_val, 40, "%s", (char*) ((precord->inpb).value.constantStr) ) ;
+ if(strlen(inpb_val)>0) {
+ dbAddr paddr;
+ if(dbNameToAddr(inpb_val,&paddr)!=0) {
+ printf("getPortFromRecord: dbNameToAddr for %s failed (paddr=%p)\n",inpb_val,&paddr);
+ }
+ struct longinRecord* recA = (longinRecord*)paddr.precord;
+ if (mySubDebug) printf("getPortFromRecord: recA at %p\n",recA);
+ if(recA!=NULL) {
+ if (mySubDebug) printf("getPortFromRecord: recA name %s val %d\n",recA->name,recA->val);
+ return recA->val;
+ } else {
+ printf("getPortFromRecord: cannot get port record %s \n",inpb_val);
+ }
+ } else {
+ printf("getIpFromRecord: INPB string has zero length \n");
+ }
+ return -1;
+}
+
static void setupSocket(subRecord *precord) {
process_order++;
if (mySubDebug) {
@@ -52,33 +105,16 @@
// only setup socket from DB if it's the poll record?
if(strcmp(precord->name,"SVT:poll_xml")==0) {
// look for host name and port in DB
- //initialize the string
- struct link* inpa;
- struct link* inpb;
- inpa = &precord->inpa;
- inpb = &precord->inpb;
- if (mySubDebug) {
- printf("inpa type %d value %p %s\n",inpa->type,inpa->value.constantStr,inpa->value.constantStr);
- printf("inpb type %d value %p %s\n",inpb->type,inpb->value.constantStr,inpb->value.constantStr);
- printf("inpa pv_link name %p\n",(inpa->value).pv_link.pvname);
- printf("inpa pv_link name %s\n",(inpa->value).pv_link.pvname);
- }
- if(inpa->value.pv_link.pvname && inpb->value.pv_link.pvname) {
- struct stringinRecord* recA = (stringinRecord*) ((inpa->value).pv_link).precord;
- if (mySubDebug) printf("inpa pv_link record %p name %s\n",recA, recA->name);
- char* stra = recA->val;
- if (mySubDebug) printf("stra %p %s '%c' '%c' '%c'\ \n",stra,stra,stra[0],stra[1],stra[2]);
- strcpy(hostName,stra);
- if (mySubDebug) printf("got hostname \"%s\"\n",hostName);
- struct longinRecord* recB = (longinRecord*) ((inpa->value).pv_link).precord;
- if (mySubDebug) printf("inpb pv_link record %p name %s\n",recB, recB->name);
- port = recB->val;
- } else {
- printf("inpa and inpb value are null when getting host and port\n");
- }
+ char host[40];
+ int p;
+ getIpFromRecord(precord,host,40);
+ p = getPortFromRecord(precord);
+ if (mySubDebug) printf("Got host \"%s\" port %d\n",host,p);
+ strcpy(hostName,host);
+ port = p;
}
- if(strlen(hostName)==0 || port==0) {
+ if(strlen(hostName)==0 || port<=0) {
printf("No hostname or port found in DB. Use default\n");
strcpy(hostName,hostNameDef);
port = portDef;