diff --git a/python/opendht.pyx b/python/opendht.pyx
index a8b3e08d..bc2f619e 100644
--- a/python/opendht.pyx
+++ b/python/opendht.pyx
@@ -27,9 +27,6 @@
# along with OpenDHT Python Wrapper. If not, see .
#
-from libc.stdint cimport *
-from libcpp.string cimport string
-from libcpp.vector cimport vector
from libcpp.map cimport map as map
from libcpp cimport bool
from libcpp.utility cimport pair
@@ -38,116 +35,18 @@ from cython.parallel import parallel, prange
from cython.operator cimport dereference as deref, preincrement as inc, predecrement as dec
from cpython cimport ref
-ctypedef uint16_t in_port_t
-ctypedef unsigned short int sa_family_t;
+cimport opendht_cpp as cpp
-cdef extern from "" namespace "std" nogil:
- cdef cppclass shared_ptr[T]:
- shared_ptr() except +
- T* get()
- T operator*()
- void reset(T*);
-
-cdef extern from "" namespace "std" nogil:
- cdef cppclass shared_future[T]:
- shared_future() except +
- bool valid() const
-
- cdef cppclass future[T]:
- future() except +
- bool valid() const
- shared_future[T] share()
-
-cdef extern from "opendht/infohash.h" namespace "dht":
- cdef cppclass InfoHash:
- InfoHash() except +
- InfoHash(string s) except +
- string toString() const
- bool getBit(unsigned bit) const
- void setBit(unsigned bit, bool b)
- double toFloat() const
- @staticmethod
- unsigned commonBits(InfoHash a, InfoHash b)
- @staticmethod
- InfoHash get(string s)
- @staticmethod
- InfoHash getRandom()
-
-cdef extern from "opendht/value.h" namespace "dht":
- cdef cppclass Value:
- Value() except +
- Value(vector[uint8_t]) except +
- Value(const uint8_t* dat_ptr, size_t dat_len) except +
- string toString() const
-
-cdef extern from "opendht/dht.h" namespace "dht":
- cdef cppclass Node:
- Node() except +
- InfoHash getId() const
- string getAddrStr() const
- bool isExpired() const
- ctypedef bool (*GetCallbackRaw)(shared_ptr[Value] values, void *user_data)
- ctypedef void (*DoneCallbackRaw)(bool done, vector[shared_ptr[Node]]* nodes, void *user_data)
- cdef cppclass Dht:
- cppclass GetCallback:
- GetCallback() except +
- #GetCallback(GetCallbackRaw cb, void *user_data) except +
- cppclass DoneCallback:
- DoneCallback() except +
- #DoneCallback(DoneCallbackRaw, void *user_data) except +
- Dht() except +
- InfoHash getNodeId() const
- @staticmethod
- GetCallback bindGetCb(GetCallbackRaw cb, void *user_data)
- @staticmethod
- DoneCallback bindDoneCb(DoneCallbackRaw cb, void *user_data)
-
-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)
-
- cdef cppclass PrivateKey:
- PrivateKey()
- PublicKey getPublicKey() const
-
- cdef cppclass PublicKey:
- PublicKey()
- InfoHash getId() const
-
- cdef cppclass Certificate:
- Certificate()
- InfoHash getId() const
-
-cdef extern from "opendht/dhtrunner.h" namespace "dht":
- ctypedef future[size_t] ListenToken
- ctypedef shared_future[size_t] SharedListenToken
- cdef cppclass DhtRunner:
- DhtRunner() except +
- InfoHash getId() const
- InfoHash getNodeId() const
- void bootstrap(const char*, const char*)
- void run(in_port_t, const Identity, bool threaded, bool b)
- void run(const char*, const char*, const char*, const Identity, bool threaded, bool b)
- void join()
- bool isRunning()
- string getStorageLog() const
- string getRoutingTablesLog(sa_family_t af) const
- string getSearchesLog(sa_family_t af) const
- void get(InfoHash key, Dht.GetCallback get_cb, Dht.DoneCallback done_cb)
- void put(InfoHash key, shared_ptr[Value] val, Dht.DoneCallback done_cb)
- ListenToken listen(InfoHash key, Dht.GetCallback get_cb)
- void cancelListen(InfoHash key, SharedListenToken token)
-
-cdef bool py_get_callback(shared_ptr[Value] value, void *user_data) with gil:
+cdef inline bool get_callback(cpp.shared_ptr[cpp.Value] value, void *user_data) with gil:
cb = (