Commit in epics/trunk/epics_example/myexampleApp/src on MAIN
dbSubExample.c+61-25815 -> 816
Extract ip and port from epics db records on the fly.

epics/trunk/epics_example/myexampleApp/src
dbSubExample.c 815 -> 816
--- 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;
SVNspam 0.1