7689c570a2b6bbd480d09cdc162ba56d86426b07
kent
  Fri Dec 27 19:50:04 2013 -0800
Moving a couple of routines to library so they can be shared.
diff --git src/parasol/lib/paraMessage.c src/parasol/lib/paraMessage.c
index 4725711..db0d6e5 100644
--- src/parasol/lib/paraMessage.c
+++ src/parasol/lib/paraMessage.c
@@ -205,15 +205,46 @@
 return data + sizeof(val);
 }
 
 static bits32 getLongData(char **pData)
 /* Get val from data stream, converting from network to host format.
  * Update data stream position. */
 {
 bits32 val;
 memcpy(&val, *pData, sizeof(val));
 *pData += sizeof(val);
 val = ntohl(val);
 return val;
 }
 #endif
 
+void pmFetchOpenFile(struct paraMessage *pm, struct rudp *ru, char *fileName)
+/* Read everything you can from socket and output to file. */
+{
+struct paraMultiMessage pmm;
+FILE *f = mustOpen(fileName, "w");
+/* ensure the multi-message response comes from the correct ip and has no duplicate msgs*/
+pmmInit(&pmm, pm, pm->ipAddress.sin_addr);
+while (pmmReceive(&pmm, ru))
+    {
+    if (pm->size == 0)
+	break;
+    mustWrite(f, pm->data, pm->size);
+    }
+carefulClose(&f);
+}
+
+void pmFetchFile(char *host, char *sourceName, char *destName)
+/* Fetch small file. */
+{
+struct rudp *ru = rudpOpen();
+struct paraMessage pm;
+if (ru != NULL)
+    {
+    pmInitFromName(&pm, host, paraNodePort);
+    pmPrintf(&pm, "fetch %s %s", getUser(), sourceName);
+    if (pmSend(&pm, ru))
+	pmFetchOpenFile(&pm, ru, destName);
+    rudpClose(&ru);
+    }
+}
+