diff options
| author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-03-18 14:33:57 -0700 |
|---|---|---|
| committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2014-03-18 14:33:57 -0700 |
| commit | 0b7599273705328f81c5afe2721e76c007779a9c (patch) | |
| tree | 1a7d7c65188527dd161e5da85c6f34a9dbb69223 /node/Node.cpp | |
| parent | 91fef21973a3590ce37d1c2b126c4b8246d2fb1b (diff) | |
| download | infinitytier-0b7599273705328f81c5afe2721e76c007779a9c.tar.gz infinitytier-0b7599273705328f81c5afe2721e76c007779a9c.zip | |
Everything but the local config bus... blech.
Diffstat (limited to 'node/Node.cpp')
| -rw-r--r-- | node/Node.cpp | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/node/Node.cpp b/node/Node.cpp index 6d748798..ffd7568f 100644 --- a/node/Node.cpp +++ b/node/Node.cpp @@ -76,6 +76,7 @@ #include "SHA512.hpp" #include "Service.hpp" #include "SoftwareUpdater.hpp" +#include "Buffer.hpp" #include "../version.h" @@ -84,15 +85,20 @@ namespace ZeroTier { struct _LocalClientImpl { unsigned char key[32]; - UdpSocket *sock; + int sock; void (*resultHandler)(void *,unsigned long,const char *); void *arg; unsigned int controlPort; InetAddress localDestAddr; Mutex inUseLock; + + void threadMain() + throw() + { + } }; -static void _CBlocalClientHandler(UdpSocket *sock,void *arg,const InetAddress &remoteAddr,const void *data,unsigned int len) +static void _CBlocalClientHandler(const SharedPtr<Socket> &sock,void *arg,const InetAddress &from,Buffer<ZT_SOCKET_MAX_MESSAGE_LEN> &data) { _LocalClientImpl *impl = (_LocalClientImpl *)arg; if (!impl) @@ -100,11 +106,10 @@ static void _CBlocalClientHandler(UdpSocket *sock,void *arg,const InetAddress &r if (!impl->resultHandler) return; // sanity check Mutex::Lock _l(impl->inUseLock); - try { unsigned long convId = 0; std::vector<std::string> results; - if (!NodeConfig::decodeControlMessagePacket(impl->key,data,len,convId,results)) + if (!NodeConfig::decodeControlMessagePacket(impl->key,data.data(),data.size(),convId,results)) return; for(std::vector<std::string>::iterator r(results.begin());r!=results.end();++r) impl->resultHandler(impl->arg,convId,r->c_str()); @@ -117,18 +122,19 @@ Node::LocalClient::LocalClient(const char *authToken,unsigned int controlPort,vo { _LocalClientImpl *impl = new _LocalClientImpl; - UdpSocket *sock = (UdpSocket *)0; + impl->sock = + + SocketManager *sm = (SocketManager *)0; for(unsigned int i=0;i<5000;++i) { try { - sock = new UdpSocket(true,32768 + (rand() % 20000),false,&_CBlocalClientHandler,impl); + sm = new SocketManager(0,32768 + (rand() % 20000),&_CBlocalClientHandler,impl); break; } catch ( ... ) { - sock = (UdpSocket *)0; + sm = (SocketManager *)0; } } - // If socket fails to bind, there's a big problem like missing IPv4 stack - if (sock) { + if (sm) { { unsigned int csk[64]; SHA512::hash(csk,authToken,(unsigned int)strlen(authToken)); @@ -142,7 +148,7 @@ Node::LocalClient::LocalClient(const char *authToken,unsigned int controlPort,vo impl->localDestAddr = InetAddress::LO4; impl->localDestAddr.setPort(impl->controlPort); _impl = impl; - } else delete impl; + } else delete impl; // big problem, no ports? } Node::LocalClient::~LocalClient() |
