diff --git a/pvAccessApp/remoteClient/clientContextImpl.cpp b/pvAccessApp/remoteClient/clientContextImpl.cpp index 8f84113..7b617c8 100644 --- a/pvAccessApp/remoteClient/clientContextImpl.cpp +++ b/pvAccessApp/remoteClient/clientContextImpl.cpp @@ -548,7 +548,7 @@ namespace epics { virtual void send(ByteBuffer* buffer, TransportSendControl* control) { int32 pendingRequest = getPendingRequest(); - bool initStage = (pendingRequest & QOS_INIT); + bool initStage = ((pendingRequest & QOS_INIT) != 0); MB_POINT_CONDITIONAL(channelGet, 1, "client channelGet->serialize (start)", !initStage); diff --git a/pvAccessApp/server/beaconServerStatusProvider.cpp b/pvAccessApp/server/beaconServerStatusProvider.cpp index 358d6cf..cbdc302 100644 --- a/pvAccessApp/server/beaconServerStatusProvider.cpp +++ b/pvAccessApp/server/beaconServerStatusProvider.cpp @@ -4,8 +4,9 @@ * in file LICENSE that is included with this distribution. */ -#include +#define epicsExportSharedSymbols #include +#include using namespace epics::pvData; diff --git a/pvAccessApp/server/beaconServerStatusProvider.h b/pvAccessApp/server/beaconServerStatusProvider.h index 4273cf5..77a7ed1 100644 --- a/pvAccessApp/server/beaconServerStatusProvider.h +++ b/pvAccessApp/server/beaconServerStatusProvider.h @@ -7,10 +7,19 @@ #ifndef BEACONSERVERSTATUSPROVIDER_H #define BEACONSERVERSTATUSPROVIDER_H +#ifdef epicsExportSharedSymbols +# define beaconServerStatusProviderEpicsExportSharedSymbols +# undef epicsExportSharedSymbols +#endif + #include -//#include #include +#ifdef beaconServerStatusProviderEpicsExportSharedSymbols +# define epicsExportSharedSymbols +# undef beaconServerStatusProviderEpicsExportSharedSymbols +#endif + namespace epics { namespace pvAccess { @@ -19,7 +28,7 @@ namespace pvAccess { /** * BeaconServerStatusProvider */ - class BeaconServerStatusProvider + class epicsShareClass BeaconServerStatusProvider { public: typedef std::tr1::shared_ptr shared_pointer; @@ -36,7 +45,7 @@ namespace pvAccess { /** * DefaultBeaconServerStatusProvider */ - class DefaultBeaconServerStatusProvider : public BeaconServerStatusProvider + class epicsShareClass DefaultBeaconServerStatusProvider : public BeaconServerStatusProvider { public: /** diff --git a/pvAccessApp/server/serverContext.cpp b/pvAccessApp/server/serverContext.cpp index 7a733db..832067b 100644 --- a/pvAccessApp/server/serverContext.cpp +++ b/pvAccessApp/server/serverContext.cpp @@ -4,11 +4,12 @@ * in file LICENSE that is included with this distribution. */ -#include -#include #include +#define epicsExportSharedSymbols +#include #include +#include using namespace std; using namespace epics::pvData; diff --git a/pvAccessApp/server/serverContext.h b/pvAccessApp/server/serverContext.h index 99ffac9..79dd3d4 100644 --- a/pvAccessApp/server/serverContext.h +++ b/pvAccessApp/server/serverContext.h @@ -17,13 +17,15 @@ #include #include +#include + namespace epics { namespace pvAccess { /** * The class representing a PVA Server context. */ -class ServerContext +class epicsShareClass ServerContext { public: typedef std::tr1::shared_ptr shared_pointer; @@ -96,7 +98,7 @@ public: }; -class ServerContextImpl : +class epicsShareClass ServerContextImpl : public ServerContext, public Context, public ResponseHandlerFactory, @@ -412,7 +414,7 @@ private: Configuration::shared_pointer configuration; }; -extern ServerContext::shared_pointer startPVAServer( +epicsShareExtern ServerContext::shared_pointer startPVAServer( epics::pvData::String const & providerNames = PVACCESS_ALL_PROVIDERS, int timeToRun = 0, bool runInSeparateThread = false, diff --git a/pvAccessApp/utils/configuration.cpp b/pvAccessApp/utils/configuration.cpp index 32f1f3a..b9eecc0 100644 --- a/pvAccessApp/utils/configuration.cpp +++ b/pvAccessApp/utils/configuration.cpp @@ -4,10 +4,12 @@ * in file LICENSE that is included with this distribution. */ -#include +#include + #include -#include +#define epicsExportSharedSymbols +#include #if defined(__GNUC__) && __GNUC__ < 3 #define OLDGCC diff --git a/pvAccessApp/utils/configuration.h b/pvAccessApp/utils/configuration.h index 8ca29c5..3a5acf3 100644 --- a/pvAccessApp/utils/configuration.h +++ b/pvAccessApp/utils/configuration.h @@ -7,24 +7,34 @@ #ifndef CONFIGURATION_H #define CONFIGURATION_H -#include -#include -#include -#include - -#include - - #include #include #include #include #include +#ifdef epicsExportSharedSymbols +# define configurationEpicsExportSharedSymbols +# undef epicsExportSharedSymbols +#endif + +#include +#include +#include +#include + +#include +#ifdef configurationEpicsExportSharedSymbols +# define epicsExportSharedSymbols +# undef configurationEpicsExportSharedSymbols +#endif + +#include + namespace epics { namespace pvAccess { -class Properties +class epicsShareClass Properties { public: Properties(); @@ -66,7 +76,7 @@ private: /** * Configuration */ -class Configuration : private epics::pvData::NoDefaultMethods +class epicsShareClass Configuration : private epics::pvData::NoDefaultMethods { public: POINTER_DEFINITIONS(Configuration); @@ -129,7 +139,7 @@ public: virtual bool hasProperty(const std::string &name) = 0; }; -class SystemConfigurationImpl: public Configuration +class epicsShareClass SystemConfigurationImpl: public Configuration { public: SystemConfigurationImpl(); @@ -151,7 +161,7 @@ private: /** * Configuration provider. */ -class ConfigurationProvider : private epics::pvData::NoDefaultMethods +class epicsShareClass ConfigurationProvider : private epics::pvData::NoDefaultMethods { public: POINTER_DEFINITIONS(ConfigurationProvider); @@ -194,7 +204,7 @@ private: /** * Configuration factory. */ -class ConfigurationFactory : private epics::pvData::NoDefaultMethods +class epicsShareClass ConfigurationFactory : private epics::pvData::NoDefaultMethods { public: POINTER_DEFINITIONS(ConfigurationFactory); diff --git a/pvAccessApp/utils/hexDump.cpp b/pvAccessApp/utils/hexDump.cpp index ce70873..70a8b6b 100644 --- a/pvAccessApp/utils/hexDump.cpp +++ b/pvAccessApp/utils/hexDump.cpp @@ -4,11 +4,12 @@ * in file LICENSE that is included with this distribution. */ -#include - #include #include +#define epicsExportSharedSymbols +#include + using namespace epics::pvData; using std::stringstream; using std::endl; diff --git a/pvAccessApp/utils/hexDump.h b/pvAccessApp/utils/hexDump.h index f6782f5..09b0343 100644 --- a/pvAccessApp/utils/hexDump.h +++ b/pvAccessApp/utils/hexDump.h @@ -7,8 +7,20 @@ #ifndef HEXDUMP_H_ #define HEXDUMP_H_ +#ifdef epicsExportSharedSymbols +# define hexDumpEpicsExportSharedSymbols +# undef epicsExportSharedSymbols +#endif + #include +#ifdef hexDumpEpicsExportSharedSymbols +# define epicsExportSharedSymbols +# undef hexDumpEpicsExportSharedSymbols +#endif + +#include + namespace epics { namespace pvAccess { @@ -18,7 +30,7 @@ namespace pvAccess { * @param bs buffer to dump * @param len first bytes (length) to dump. */ - void hexDump(epics::pvData::String const & name, const epics::pvData::int8 *bs, int len); + epicsShareFunc void hexDump(epics::pvData::String const & name, const epics::pvData::int8 *bs, int len); /** * Output a buffer in hex format. @@ -27,7 +39,7 @@ namespace pvAccess { * @param[in] start dump message using given offset. * @param[in] len first bytes (length) to dump. */ - void hexDump(epics::pvData::String const & name, const epics::pvData::int8 *bs, int start, int len); + epicsShareFunc void hexDump(epics::pvData::String const & name, const epics::pvData::int8 *bs, int start, int len); /** * Output a buffer in hex format. @@ -37,7 +49,7 @@ namespace pvAccess { * @param[in] start dump message using given offset. * @param[in] len first bytes (length) to dump. */ - void hexDump(epics::pvData::String const & prologue, epics::pvData::String const & name, + epicsShareFunc void hexDump(epics::pvData::String const & prologue, epics::pvData::String const & name, const epics::pvData::int8 *bs, int start, int len); } diff --git a/pvAccessApp/utils/inetAddressUtil.cpp b/pvAccessApp/utils/inetAddressUtil.cpp index 9d3cb0c..bb03abe 100644 --- a/pvAccessApp/utils/inetAddressUtil.cpp +++ b/pvAccessApp/utils/inetAddressUtil.cpp @@ -4,20 +4,19 @@ * in file LICENSE that is included with this distribution. */ -#include -#include -#include - -#include -#include -#include -#include - #include #include #include #include +#include +#include +#include +#include + +#define epicsExportSharedSymbols +#include + using namespace std; using namespace epics::pvData; diff --git a/pvAccessApp/utils/inetAddressUtil.h b/pvAccessApp/utils/inetAddressUtil.h index 7c2c1d6..c33f086 100644 --- a/pvAccessApp/utils/inetAddressUtil.h +++ b/pvAccessApp/utils/inetAddressUtil.h @@ -7,11 +7,25 @@ #ifndef INETADDRESSUTIL_H_ #define INETADDRESSUTIL_H_ +#include + +#ifdef epicsExportSharedSymbols +# define inetAddressUtilExportSharedSymbols +# undef epicsExportSharedSymbols +#endif + #include #include #include -#include + +#ifdef inetAddressUtilExportSharedSymbols +# define epicsExportSharedSymbols +# undef inetAddressUtilExportSharedSymbols +#endif + +#include + // TODO implement using smart pointers @@ -26,28 +40,28 @@ namespace pvAccess { * Conversion of the defaultPort to network byte order performed by * the function. */ - InetAddrVector* getBroadcastAddresses(SOCKET sock, unsigned short defaultPort); + epicsShareFunc InetAddrVector* getBroadcastAddresses(SOCKET sock, unsigned short defaultPort); /** * Encode IPv4 address as IPv6 address. * @param buffer byte-buffer where to put encoded data. * @param address address to encode. */ - void encodeAsIPv6Address(epics::pvData::ByteBuffer* buffer, const osiSockAddr* address); + epicsShareFunc void encodeAsIPv6Address(epics::pvData::ByteBuffer* buffer, const osiSockAddr* address); /** * Convert an integer into an IPv4 INET address. * @param addr integer representation of a given address. * @return IPv4 INET address. */ - osiSockAddr* intToIPv4Address(epics::pvData::int32 addr); + epicsShareFunc osiSockAddr* intToIPv4Address(epics::pvData::int32 addr); /** * Convert an IPv4 INET address to an integer. * @param addr IPv4 INET address. * @return integer representation of a given address. */ - epics::pvData::int32 ipv4AddressToInt(const osiSockAddr& addr); + epicsShareFunc epics::pvData::int32 ipv4AddressToInt(const osiSockAddr& addr); /** * Parse space delimited addresss[:port] string and return array of InetSocketAddress. @@ -56,10 +70,10 @@ namespace pvAccess { * @param appendList list to be appended. * @return array of InetSocketAddress. */ - InetAddrVector* getSocketAddressList(epics::pvData::String list, int defaultPort, + epicsShareFunc InetAddrVector* getSocketAddressList(epics::pvData::String list, int defaultPort, const InetAddrVector* appendList = NULL); - const epics::pvData::String inetAddressToString(const osiSockAddr &addr, + epicsShareFunc const epics::pvData::String inetAddressToString(const osiSockAddr &addr, bool displayPort = true, bool displayHex = false); /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ diff --git a/testApp/remote/Makefile b/testApp/remote/Makefile index bfe4421..702d485 100644 --- a/testApp/remote/Makefile +++ b/testApp/remote/Makefile @@ -2,11 +2,11 @@ TOP=../.. include $(TOP)/configure/CONFIG -PROD_HOST += testBlockingUDPSrv +#PROD_HOST += testBlockingUDPSrv testBlockingUDPSrv_SRCS += testBlockingUDPSrv.cpp testBlockingUDPSrv_LIBS += pvData pvAccess pvMB Com -PROD_HOST += testBlockingUDPClnt +#PROD_HOST += testBlockingUDPClnt testBlockingUDPClnt_SRCS += testBlockingUDPClnt.cpp testBlockingUDPClnt_LIBS += pvData pvAccess pvMB Com @@ -30,11 +30,11 @@ testBeaconHandler_LIBS += pvData pvAccess Com #testChannelSearchManager_SRCS += testChannelSearchManager.cpp #testChannelSearchManager_LIBS += pvData pvAccess Com -PROD_HOST += testBlockingTCPSrv +#PROD_HOST += testBlockingTCPSrv testBlockingTCPSrv_SRCS += testBlockingTCPSrv.cpp testBlockingTCPSrv_LIBS += pvData pvAccess pvMB Com -PROD_HOST += testBlockingTCPClnt +#PROD_HOST += testBlockingTCPClnt testBlockingTCPClnt_SRCS += testBlockingTCPClnt.cpp testBlockingTCPClnt_LIBS += pvData pvAccess pvMB Com diff --git a/testApp/remote/eget.cpp b/testApp/remote/eget.cpp index bc0d91e..b5a4dc3 100644 --- a/testApp/remote/eget.cpp +++ b/testApp/remote/eget.cpp @@ -1,3 +1,7 @@ +#ifdef _WIN32 +#define NOMINMAX +#endif + #include #include #include @@ -40,6 +44,15 @@ bool transpose = false; bool dumpStructure = false; +#ifdef WIN32 +FILE *popen(const char *command, const char *mode) { + return _popen(command, mode); +} +int pclose(FILE *stream) { + return _pclose(stream); +} +#endif + void formatNTAny(std::ostream& o, PVStructurePtr const & pvStruct) { PVFieldPtr value = pvStruct->getSubField("value"); diff --git a/testApp/remote/testGetPerformance.cpp b/testApp/remote/testGetPerformance.cpp index 214ce11..b1d6ca7 100644 --- a/testApp/remote/testGetPerformance.cpp +++ b/testApp/remote/testGetPerformance.cpp @@ -7,15 +7,20 @@ #include #include #include +#include #include #include #include #include -#include #include + +#ifdef _WIN32 +#include +#else #include +#endif #include @@ -102,7 +107,7 @@ void reset() sum = 0; } -timeval startTime; +epicsTimeStamp startTime; void get_all() { @@ -191,16 +196,16 @@ public: if (iterationCount == iterations) { - timeval endTime; - gettimeofday(&endTime, NULL); + epicsTimeStamp endTime; + epicsTimeGetCurrent(&endTime); long seconds, nseconds; double duration; - seconds = endTime.tv_sec - startTime.tv_sec; - nseconds = endTime.tv_usec - startTime.tv_usec; + seconds = endTime.secPastEpoch - startTime.secPastEpoch; + nseconds = endTime.nsec - startTime.nsec; - duration = seconds + nseconds/1000000.0; + duration = seconds + nseconds/1000000000.0; double getPerSec = iterations*channels/duration; double gbit = getPerSec*arraySize*sizeof(double)*8/(1000*1000*1000); // * bits / giga; NO, it's really 1000 and not 102: @@ -210,7 +215,7 @@ public: sum += getPerSec; iterationCount = 0; - gettimeofday(&startTime, NULL); + epicsTimeGetCurrent(&startTime); runCount++; if (runs == 0 || runCount < runs) @@ -394,7 +399,7 @@ void runTest() Lock guard(waitLoopPtrMutex); waitLoopEvent.reset(new Event()); } - gettimeofday(&startTime, NULL); + epicsTimeGetCurrent(&startTime); get_all(); waitLoopEvent->wait();