diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-07-25 17:53:57 -0400 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-07-25 17:53:57 -0400 |
| commit | 57d8730f1b3da3f9fe23a9fa02c8557b80bf6716 (patch) | |
| tree | 3ac70dfd9d3ecabcb90a18b2aff4a5a2e5d43db4 /node/RPC.cpp | |
| parent | af8fcac0fcfd64600a442dc4d633601e29e611ea (diff) | |
| download | infinitytier-57d8730f1b3da3f9fe23a9fa02c8557b80bf6716.tar.gz infinitytier-57d8730f1b3da3f9fe23a9fa02c8557b80bf6716.zip | |
Wire up RPC plugin loading to Node.
Diffstat (limited to 'node/RPC.cpp')
| -rw-r--r-- | node/RPC.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
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<std::string> > RPC::LocalService::operator()(const st return std::pair< int,std::vector<std::string> >(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<std::string>()); } +#ifndef __WINDOWS__ for(std::map<std::string,LocalService *>::iterator s(_rpcServices.begin());s!=_rpcServices.end();++s) delete s->second; +#endif } std::pair< int,std::vector<std::string> > RPC::callLocal(const std::string &name,const std::vector<std::string> &args) { +#ifdef __WINDOWS__ + return std::pair< int,std::vector<std::string> >(ZT_RPC_ERROR_NOT_FOUND,std::vector<std::string>()); +#else Mutex::Lock _l(_rpcServices_m); std::map<std::string,LocalService *>::iterator s(_rpcServices.find(name)); if (s == _rpcServices.end()) return std::pair< int,std::vector<std::string> >(ZT_RPC_ERROR_NOT_FOUND,std::vector<std::string>()); 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( |
