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); + } +} +