You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I can use libtorrent's code to query DHT nodes and get/put items.
I haven't written test cases or cleaned up the code.
It needs a lot of work.
I have a tarball of some partially working code here. It's the repository + my files. It really is a work in progress -- nowhere near ready for integration right now. Some of the code is likely incorrect; I explain why below.
I've tested libtorrent against my code, and using libtorrent's standalone dht_put program, I can both put and get immutable data from my modified DHT code. Here's what I did:
I started dht/examples/router on a server that's reachable from the internet. It's a small program that starts a DHT on port 9882, does not announce itself with the public routers, and waits forever for connections. I started the router with ./router -v=5 -logtostederr=true so I could see all the activity.
I downloaded and unpacked libtorrent-rasterbar-1.0.1, and added dht_put.cpp to the tools directory. I modified the file to make it use only my router node. To compile it, you can either modify tools/Makefile.am to add a build target for dht_put (you'll need automake 1.14 installed) or compile it manually.
After compiling dht_put, type ./dht_put put "hello there". It should talk to the router, and do a get followed by a put (you'll see that in the router's output). It'll print out the SHA-1 hash for the string 11:hello there, and you'll see the router store the value hello there. Next, if you try ./dht_put get <the hash>, it should talk to the router and return the string hello there. If you give it a different hash, it won't be able to fetch anything.
One thing that I didn't pay attention to carefully is the argument for put as described in the spec. You have to give it a valid object that can be bencoded -- a string, an integer, a list, or a dictionary. The code on both sides (the sending node and the storage node) will bencode the object before calculating the SHA-1 hash.
I'm sort of aiming for the same public UI for the DHT Get and Put methods: GET takes an infohash, and PUT takes a bencodable object (maybe as a string?).
One thing I haven't had much success with is using the DHT's methods to actually get/put stuff. I wrote a small amount of code (not in the tarball) to operate the same way as dht_put, but it seems to spin after it receives the string to be sent out over the network, somewhere in the put method in getput.go.
A problem I have is that I haven't looked at the client code (Taipei) yet, so I don't have a good idea on how to integrate things properly. I mean to work on this today (Thursday), but stuff came up at home, and I've been busy.
The text was updated successfully, but these errors were encountered:
Summary of the changes so far:
I have a tarball of some partially working code here. It's the repository + my files. It really is a work in progress -- nowhere near ready for integration right now. Some of the code is likely incorrect; I explain why below.
I've tested libtorrent against my code, and using libtorrent's standalone
dht_put
program, I can both put and get immutable data from my modified DHT code. Here's what I did:I started
dht/examples/router
on a server that's reachable from the internet. It's a small program that starts a DHT on port 9882, does not announce itself with the public routers, and waits forever for connections. I started the router with./router -v=5 -logtostederr=true
so I could see all the activity.I downloaded and unpacked libtorrent-rasterbar-1.0.1, and added dht_put.cpp to the tools directory. I modified the file to make it use only my router node. To compile it, you can either modify
tools/Makefile.am
to add a build target fordht_put
(you'll needautomake 1.14
installed) or compile it manually.After compiling
dht_put
, type./dht_put put "hello there"
. It should talk to the router, and do aget
followed by aput
(you'll see that in the router's output). It'll print out the SHA-1 hash for the string11:hello there
, and you'll see the router store the value hello there. Next, if you try./dht_put get <the hash>
, it should talk to the router and return the string hello there. If you give it a different hash, it won't be able to fetch anything.One thing that I didn't pay attention to carefully is the argument for
put
as described in the spec. You have to give it a valid object that can be bencoded -- a string, an integer, a list, or a dictionary. The code on both sides (the sending node and the storage node) will bencode the object before calculating the SHA-1 hash.I'm sort of aiming for the same public UI for the DHT
Get
andPut
methods:GET
takes an infohash, andPUT
takes a bencodable object (maybe as a string?).One thing I haven't had much success with is using the DHT's methods to actually get/put stuff. I wrote a small amount of code (not in the tarball) to operate the same way as
dht_put
, but it seems to spin after it receives the string to be sent out over the network, somewhere in theput
method ingetput.go
.A problem I have is that I haven't looked at the client code (Taipei) yet, so I don't have a good idea on how to integrate things properly. I mean to work on this today (Thursday), but stuff came up at home, and I've been busy.
The text was updated successfully, but these errors were encountered: