diff options
Diffstat (limited to 'service')
| -rw-r--r-- | service/ControlPlane.cpp | 6 | ||||
| -rw-r--r-- | service/ControlPlane.hpp | 1 | ||||
| -rw-r--r-- | service/OneService.cpp | 47 |
3 files changed, 35 insertions, 19 deletions
diff --git a/service/ControlPlane.cpp b/service/ControlPlane.cpp index b075e706..e40aad9b 100644 --- a/service/ControlPlane.cpp +++ b/service/ControlPlane.cpp @@ -26,6 +26,7 @@ */ #include "ControlPlane.hpp" +#include "ControlPlaneSubsystem.hpp" #include "OneService.hpp" #include "../version.h" @@ -241,10 +242,9 @@ static void _jsonAppend(unsigned int depth,std::string &buf,const ZT1_Peer *peer buf.append(json); } -ControlPlane::ControlPlane(OneService *svc,Node *n,SqliteNetworkController *nc) : +ControlPlane::ControlPlane(OneService *svc,Node *n) : _svc(svc), - _node(n), - _controller(nc) + _node(n) { } diff --git a/service/ControlPlane.hpp b/service/ControlPlane.hpp index 7e0d7dc3..3db1ddd0 100644 --- a/service/ControlPlane.hpp +++ b/service/ControlPlane.hpp @@ -40,6 +40,7 @@ namespace ZeroTier { class OneService; class Node; +class ControlPlaneSubsystem; struct InetAddress; /** diff --git a/service/OneService.cpp b/service/OneService.cpp index 551dc486..bff70500 100644 --- a/service/OneService.cpp +++ b/service/OneService.cpp @@ -53,6 +53,10 @@ #include "OneService.hpp" #include "ControlPlane.hpp" +#ifdef __WINDOWS__ +#include <ShlObj.h> +#endif + // Include the right tap device driver for this platform -- add new platforms here #ifdef __APPLE__ #include "../osdep/OSXEthernetTap.hpp" @@ -62,6 +66,10 @@ namespace ZeroTier { typedef OSXEthernetTap EthernetTap; } #include "../osdep/LinuxEthernetTap.hpp" namespace ZeroTier { typedef LinuxEthernetTap EthernetTap; } #endif +#ifdef __WINDOWS__ +#include "../osdep/WindowsEthernetTap.hpp" +namespace ZeroTier { typedef WindowsEthernetTap EthernetTap; } +#endif // Sanity limits for HTTP #define ZT_MAX_HTTP_MESSAGE_SIZE (1024 * 1024 * 8) @@ -214,7 +222,7 @@ public: _controlPlane = new ControlPlane(this,_node); _controlPlane->addAuthToken(authToken.c_str()); if (_master) - _controlPlane->mount("controller",_master); + _controlPlane->mount("controller",reinterpret_cast<ControlPlaneSubsystem *>(_master)); { // Remember networks from previous session std::vector<std::string> networksDotD(OSUtils::listDirectory((_homePath + ZT_PATH_SEPARATOR_S + "networks.d").c_str())); @@ -384,7 +392,7 @@ public: inline void phyOnTcpWritable(PhySocket *sock,void **uptr) { HttpConnection *htc = reinterpret_cast<HttpConnection *>(*uptr); - long sent = _phy.tcpSend(sock,htc->body.data() + htc->writePtr,htc->body.length() - htc->writePtr,true); + long sent = _phy.tcpSend(sock,htc->body.data() + htc->writePtr,(unsigned long)htc->body.length() - htc->writePtr,true); if (sent < 0) { return; // close handler will have been called, so everything's dead } else { @@ -395,7 +403,7 @@ public: if (htc->shouldKeepAlive) { htc->writing = false; htc->writePtr = 0; - htc->body.assign("",0); + htc->body = ""; } else { _phy.close(sock); // will call close handler to delete from _httpConnections } @@ -417,7 +425,7 @@ public: _homePath.c_str(), MAC(nwc->mac), nwc->mtu, - ZT_IF_METRIC, + (unsigned int)ZT_IF_METRIC, nwid, friendlyName, StapFrameHandler, @@ -453,9 +461,16 @@ public: case ZT1_VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN: case ZT1_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY: if (t != _taps.end()) { +#ifdef __WINDOWS__ + std::string winInstanceId(t->second->instanceId()); +#endif delete t->second; _taps.erase(t); _tapAssignedIps.erase(nwid); +#ifdef __WINDOWS__ + if ((op == ZT1_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY)&&(winInstanceId.length() > 0)) + WindowsEthernetTap::deletePersistentTapDevice(_homePath.c_str(),winInstanceId.c_str()); +#endif } break; } @@ -683,19 +698,19 @@ static void StapFrameHandler(void *uptr,uint64_t nwid,const MAC &from,const MAC static int ShttpOnMessageBegin(http_parser *parser) { HttpConnection *htc = reinterpret_cast<HttpConnection *>(parser->data); - htc->currentHeaderField.assign("",0); - htc->currentHeaderValue.assign("",0); + htc->currentHeaderField = ""; + htc->currentHeaderValue = ""; htc->messageSize = 0; - htc->url.assign("",0); - htc->status.assign("",0); + htc->url = ""; + htc->status = ""; htc->headers.clear(); - htc->body.assign("",0); + htc->body = ""; return 0; } static int ShttpOnUrl(http_parser *parser,const char *ptr,size_t length) { HttpConnection *htc = reinterpret_cast<HttpConnection *>(parser->data); - htc->messageSize += length; + htc->messageSize += (unsigned long)length; if (htc->messageSize > ZT_MAX_HTTP_MESSAGE_SIZE) return -1; htc->url.append(ptr,length); @@ -704,7 +719,7 @@ static int ShttpOnUrl(http_parser *parser,const char *ptr,size_t length) static int ShttpOnStatus(http_parser *parser,const char *ptr,size_t length) { HttpConnection *htc = reinterpret_cast<HttpConnection *>(parser->data); - htc->messageSize += length; + htc->messageSize += (unsigned long)length; if (htc->messageSize > ZT_MAX_HTTP_MESSAGE_SIZE) return -1; htc->status.append(ptr,length); @@ -713,13 +728,13 @@ static int ShttpOnStatus(http_parser *parser,const char *ptr,size_t length) static int ShttpOnHeaderField(http_parser *parser,const char *ptr,size_t length) { HttpConnection *htc = reinterpret_cast<HttpConnection *>(parser->data); - htc->messageSize += length; + htc->messageSize += (unsigned long)length; if (htc->messageSize > ZT_MAX_HTTP_MESSAGE_SIZE) return -1; if ((htc->currentHeaderField.length())&&(htc->currentHeaderValue.length())) { htc->headers[htc->currentHeaderField] = htc->currentHeaderValue; - htc->currentHeaderField.assign("",0); - htc->currentHeaderValue.assign("",0); + htc->currentHeaderField = ""; + htc->currentHeaderValue = ""; } for(size_t i=0;i<length;++i) htc->currentHeaderField.push_back(OSUtils::toLower(ptr[i])); @@ -728,7 +743,7 @@ static int ShttpOnHeaderField(http_parser *parser,const char *ptr,size_t length) static int ShttpOnValue(http_parser *parser,const char *ptr,size_t length) { HttpConnection *htc = reinterpret_cast<HttpConnection *>(parser->data); - htc->messageSize += length; + htc->messageSize += (unsigned long)length; if (htc->messageSize > ZT_MAX_HTTP_MESSAGE_SIZE) return -1; htc->currentHeaderValue.append(ptr,length); @@ -744,7 +759,7 @@ static int ShttpOnHeadersComplete(http_parser *parser) static int ShttpOnBody(http_parser *parser,const char *ptr,size_t length) { HttpConnection *htc = reinterpret_cast<HttpConnection *>(parser->data); - htc->messageSize += length; + htc->messageSize += (unsigned long)length; if (htc->messageSize > ZT_MAX_HTTP_MESSAGE_SIZE) return -1; htc->body.append(ptr,length); |
