Skip to content

Commit

Permalink
python: add SockAddr support
Browse files Browse the repository at this point in the history
  • Loading branch information
aberaud committed Mar 28, 2017
1 parent ff6e385 commit 768bfa5
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 6 deletions.
49 changes: 45 additions & 4 deletions python/opendht.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,23 @@ cdef class InfoHash(_WithID):
h._infohash = cpp.InfoHash.getRandom()
return h

cdef class SockAddr(object):
cdef cpp.SockAddr _addr
def toString(SockAddr self):
return self._addr.toString()
def getPort(SockAddr self):
return self._addr.getPort()
def getFamily(SockAddr self):
return self._addr.getFamily()
def setPort(SockAddr self, cpp.in_port_t port):
return self._addr.setPort(port)
def setFamily(SockAddr self, cpp.sa_family_t af):
return self._addr.setFamily(af)
def __str__(self):
return self.toString().decode()
def __repr__(self):
return "<%s '%s'>" % (self.__class__.__name__, str(self))

cdef class Node(_WithID):
cdef shared_ptr[cpp.Node] _node
def getId(self):
Expand Down Expand Up @@ -284,11 +301,31 @@ cdef class DhtRunner(_WithID):
return h
def getNodeId(self):
return self.thisptr.get().getNodeId().toString()
def bootstrap(self, str host, str port=None):
if port:
self.thisptr.get().bootstrap(host.encode(), port.encode())
def bootstrap(self, SockAddr addr, done_cb=None):
if done_cb:
cb_obj = {'done':done_cb}
ref.Py_INCREF(cb_obj)
self.thisptr.get().bootstrap(addr._addr, cpp.bindDoneCbSimple(done_callback_simple, <void*>cb_obj))
else:
self.thisptr.get().bootstrap(host.encode(), b'4222')
lock = threading.Condition()
pending = 0
ok = False
def tmp_done(ok_ret):
nonlocal pending, ok, lock
with lock:
ok = ok_ret
pending -= 1
lock.notify()
with lock:
pending += 1
self.bootstrap(addr, done_cb=tmp_done)
while pending > 0:
lock.wait()
return ok
def bootstrap(self, str host, str port=None):
host_bytes = host.encode()
port_bytes = port.encode() if port else b'4222'
self.thisptr.get().bootstrap(<cpp.const_char*>host_bytes, <cpp.const_char*>port_bytes)
def run(self, Identity id=None, is_bootstrap=False, cpp.in_port_t port=0, str ipv4="", str ipv6="", DhtConfig config=DhtConfig()):
if id:
config.setIdentity(id)
Expand All @@ -312,6 +349,10 @@ cdef class DhtRunner(_WithID):
cpp.enableFileLogging(self.thisptr.get()[0], path.encode())
def isRunning(self):
return self.thisptr.get().isRunning()
def getBound(self):
s = SockAddr()
s._addr = self.thisptr.get().getBound()
return s
def getStorageLog(self):
return self.thisptr.get().getStorageLog().decode()
def getRoutingTablesLog(self, cpp.sa_family_t af):
Expand Down
16 changes: 14 additions & 2 deletions python/opendht_cpp.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ from libcpp.string cimport string
from libcpp.vector cimport vector
from libcpp.utility cimport pair
from libcpp.map cimport map
from libc.string cimport const_char, const_uchar

ctypedef uint16_t in_port_t
ctypedef unsigned short int sa_family_t;
Expand Down Expand Up @@ -65,6 +66,15 @@ cdef extern from "opendht/infohash.h" namespace "dht":
bool operator==(InfoHash)
bool operator<(InfoHash)

cdef extern from "opendht/sockaddr.h" namespace "dht":
cdef cppclass SockAddr:
SockAddr() except +
string toString() const
in_port_t getPort() const
void setPort(in_port_t p)
sa_family_t getFamily() const
void setFamily(sa_family_t f)

cdef extern from "opendht/crypto.h" namespace "dht::crypto":
ctypedef pair[shared_ptr[PrivateKey], shared_ptr[Certificate]] Identity
cdef Identity generateIdentity(string name, Identity ca, unsigned bits)
Expand Down Expand Up @@ -140,12 +150,14 @@ cdef extern from "opendht/dhtrunner.h" namespace "dht":
bool threaded
InfoHash getId() const
InfoHash getNodeId() const
void bootstrap(const char*, const char*)
void bootstrap(const_char*, const_char*)
void bootstrap(const SockAddr&, DoneCallbackSimple done_cb)
void run(in_port_t, Config config)
void run(const char*, const char*, const char*, Config config)
void run(const_char*, const_char*, const_char*, Config config)
void join()
void shutdown(ShutdownCallback)
bool isRunning()
SockAddr getBound() const
string getStorageLog() const
string getRoutingTablesLog(sa_family_t af) const
string getSearchesLog(sa_family_t af) const
Expand Down

0 comments on commit 768bfa5

Please sign in to comment.