From 57d8730f1b3da3f9fe23a9fa02c8557b80bf6716 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 25 Jul 2013 17:53:57 -0400 Subject: Wire up RPC plugin loading to Node. --- node/RPC.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'node/RPC.cpp') diff --git a/node/RPC.cpp b/node/RPC.cpp index e6591d7d..5a9cd719 100644 --- a/node/RPC.cpp +++ b/node/RPC.cpp @@ -37,6 +37,8 @@ namespace ZeroTier { +#ifndef __WINDOWS__ + RPC::LocalService::LocalService(const char *dllPath) throw(std::invalid_argument) : _handle((void *)0), @@ -111,6 +113,8 @@ std::pair< int,std::vector > RPC::LocalService::operator()(const st return std::pair< int,std::vector >(rcount,results); } +#endif // __WINDOWS__ + RPC::RPC(const RuntimeEnvironment *renv) : _r(renv) { @@ -123,17 +127,35 @@ RPC::~RPC() co->second.handler(co->second.arg,co->first,co->second.peer,ZT_RPC_ERROR_CANCELLED,std::vector()); } +#ifndef __WINDOWS__ for(std::map::iterator s(_rpcServices.begin());s!=_rpcServices.end();++s) delete s->second; +#endif } std::pair< int,std::vector > RPC::callLocal(const std::string &name,const std::vector &args) { +#ifdef __WINDOWS__ + return std::pair< int,std::vector >(ZT_RPC_ERROR_NOT_FOUND,std::vector()); +#else Mutex::Lock _l(_rpcServices_m); std::map::iterator s(_rpcServices.find(name)); if (s == _rpcServices.end()) return std::pair< int,std::vector >(ZT_RPC_ERROR_NOT_FOUND,std::vector()); return ((*(s->second))(args)); +#endif +} + +void RPC::loadLocal(const char *name,const char *path) + throw(std::invalid_argument) +{ +#ifdef __WINDOWS__ + throw std::invalid_argument("RPC plugins not supported on Windows (yet?)"); +#else + LocalService *s = new LocalService(path); + Mutex::Lock _l(_rpcServices_m); + _rpcServices[std::string(name)] = s; +#endif } uint64_t RPC::callRemote( -- cgit v1.2.3