Skip to content

Commit

Permalink
Swig refactor, removed dht_item type
Browse files Browse the repository at this point in the history
  • Loading branch information
aldenml committed Feb 4, 2016
1 parent f2156c2 commit ed62d05
Show file tree
Hide file tree
Showing 9 changed files with 883 additions and 1,204 deletions.
7 changes: 3 additions & 4 deletions src/main/java/com/frostwire/jlibtorrent/DHT.java
Expand Up @@ -2,8 +2,7 @@

import com.frostwire.jlibtorrent.alerts.Alert;
import com.frostwire.jlibtorrent.alerts.DhtImmutableItemAlert;
import com.frostwire.jlibtorrent.swig.char_vector;
import com.frostwire.jlibtorrent.swig.dht_item;
import com.frostwire.jlibtorrent.swig.libtorrent;
import com.frostwire.jlibtorrent.swig.settings_pack;
import com.frostwire.jlibtorrent.swig.sha1_hash;

Expand Down Expand Up @@ -164,8 +163,8 @@ public static Sha1Hash itemTargetId(Entry e) {
* @param pk
* @return
*/
public static Sha1Hash itemTargetId(String salt, byte[] pk) {
sha1_hash h = dht_item.item_target_id(Vectors.string2char_vector(salt), Vectors.bytes2char_vector(pk));
public static Sha1Hash itemTargetId(byte[] salt, byte[] pk) {
sha1_hash h = libtorrent.dht_item_target_id(Vectors.bytes2byte_vector(salt), Vectors.bytes2byte_vector(pk));
return new Sha1Hash(h);
}

Expand Down
62 changes: 0 additions & 62 deletions src/main/java/com/frostwire/jlibtorrent/swig/dht_item.java

This file was deleted.

20 changes: 20 additions & 0 deletions src/main/java/com/frostwire/jlibtorrent/swig/libtorrent.java
Expand Up @@ -217,6 +217,26 @@ public static void ed25519_key_exchange(byte_vector shared_secret, byte_vector p
libtorrent_jni.ed25519_key_exchange(byte_vector.getCPtr(shared_secret), shared_secret, byte_vector.getCPtr(public_key), public_key, byte_vector.getCPtr(private_key), private_key);
}

public static int dht_item_canonical_string(byte_vector v, int seq, String salt, byte_vector out) {
return libtorrent_jni.dht_item_canonical_string(byte_vector.getCPtr(v), v, seq, salt, byte_vector.getCPtr(out), out);
}

public static sha1_hash dht_item_target_id(byte_vector v) {
return new sha1_hash(libtorrent_jni.dht_item_target_id__SWIG_0(byte_vector.getCPtr(v), v), true);
}

public static sha1_hash dht_item_target_id(byte_vector salt, byte_vector pk) {
return new sha1_hash(libtorrent_jni.dht_item_target_id__SWIG_1(byte_vector.getCPtr(salt), salt, byte_vector.getCPtr(pk), pk), true);
}

public static boolean dht_verify_mutable_item(byte_vector v, String salt, int seq, byte_vector pk, byte_vector sig) {
return libtorrent_jni.dht_verify_mutable_item(byte_vector.getCPtr(v), v, salt, seq, byte_vector.getCPtr(pk), pk, byte_vector.getCPtr(sig), sig);
}

public static void dht_sign_mutable_item(byte_vector v, String salt, int seq, byte_vector pk, byte_vector sk, byte_vector sig) {
libtorrent_jni.dht_sign_mutable_item(byte_vector.getCPtr(v), v, salt, seq, byte_vector.getCPtr(pk), pk, byte_vector.getCPtr(sk), sk, byte_vector.getCPtr(sig), sig);
}

public static boolean add_files_cb(String p, add_files_listener listener) {
return libtorrent_jni.add_files_cb(p, add_files_listener.getCPtr(listener), listener);
}
Expand Down
Expand Up @@ -28,4 +28,5 @@ public interface libtorrentConstants {

public final static String LIBTORRENT_REVISION_SHA1 = libtorrent_jni.LIBTORRENT_REVISION_SHA1_get();
public final static String JLIBTORRENT_REVISION_SHA1 = libtorrent_jni.JLIBTORRENT_REVISION_SHA1_get();

}
12 changes: 5 additions & 7 deletions src/main/java/com/frostwire/jlibtorrent/swig/libtorrent_jni.java
Expand Up @@ -3056,13 +3056,6 @@ public class libtorrent_jni {
public final static native void delete_udp_endpoint(long jarg1);
public final static native boolean is_utp_stream_logging();
public final static native void set_utp_stream_logging(boolean jarg1);
public final static native int dht_item_canonical_string(long jarg1, char_vector jarg1_, int jarg2, String jarg3, long jarg4, char_vector jarg4_);
public final static native long dht_item_item_target_id__SWIG_0(long jarg1, char_vector jarg1_);
public final static native long dht_item_item_target_id__SWIG_1(long jarg1, char_vector jarg1_, long jarg2, char_vector jarg2_);
public final static native boolean dht_item_verify_mutable_item(long jarg1, char_vector jarg1_, String jarg2, int jarg3, long jarg4, char_vector jarg4_, long jarg5, char_vector jarg5_);
public final static native void dht_item_sign_mutable_item(long jarg1, char_vector jarg1_, String jarg2, int jarg3, long jarg4, char_vector jarg4_, long jarg5, char_vector jarg5_, long jarg6, char_vector jarg6_);
public final static native long new_dht_item();
public final static native void delete_dht_item(long jarg1);
public final static native String LIBTORRENT_REVISION_SHA1_get();
public final static native String JLIBTORRENT_REVISION_SHA1_get();
public final static native long to_seconds(long jarg1);
Expand All @@ -3076,6 +3069,11 @@ public class libtorrent_jni {
public final static native int ed25519_verify(long jarg1, byte_vector jarg1_, long jarg2, byte_vector jarg2_, long jarg3, byte_vector jarg3_);
public final static native void ed25519_add_scalar(long jarg1, byte_vector jarg1_, long jarg2, byte_vector jarg2_, long jarg3, byte_vector jarg3_);
public final static native void ed25519_key_exchange(long jarg1, byte_vector jarg1_, long jarg2, byte_vector jarg2_, long jarg3, byte_vector jarg3_);
public final static native int dht_item_canonical_string(long jarg1, byte_vector jarg1_, int jarg2, String jarg3, long jarg4, byte_vector jarg4_);
public final static native long dht_item_target_id__SWIG_0(long jarg1, byte_vector jarg1_);
public final static native long dht_item_target_id__SWIG_1(long jarg1, byte_vector jarg1_, long jarg2, byte_vector jarg2_);
public final static native boolean dht_verify_mutable_item(long jarg1, byte_vector jarg1_, String jarg2, int jarg3, long jarg4, byte_vector jarg4_, long jarg5, byte_vector jarg5_);
public final static native void dht_sign_mutable_item(long jarg1, byte_vector jarg1_, String jarg2, int jarg3, long jarg4, byte_vector jarg4_, long jarg5, byte_vector jarg5_, long jarg6, byte_vector jarg6_);
public final static native void delete_add_files_listener(long jarg1);
public final static native boolean add_files_listener_pred(long jarg1, add_files_listener jarg1_, String jarg2);
public final static native boolean add_files_listener_predSwigExplicitadd_files_listener(long jarg1, add_files_listener jarg1_, String jarg2);
Expand Down
62 changes: 62 additions & 0 deletions swig/libtorrent.h
Expand Up @@ -19,6 +19,7 @@
#include <libtorrent/kademlia/node_entry.hpp>
#include <libtorrent/kademlia/node.hpp>
#include <libtorrent/kademlia/get_peers.hpp>
#include <libtorrent/kademlia/item.hpp>

#define LIBTORRENT_REVISION_SHA1 _LIBTORRENT_REVISION_SHA1_
#define JLIBTORRENT_REVISION_SHA1 _JLIBTORRENT_REVISION_SHA1_
Expand Down Expand Up @@ -91,6 +92,67 @@ void ed25519_key_exchange(std::vector<int8_t>& shared_secret,
(unsigned char*)private_key.data());
}

// code copied from item.cpp
enum { dht_item_canonical_length = 1200 };
int dht_item_canonical_string0(std::pair<char const*, int> v, boost::uint64_t seq
, std::pair<char const*, int> salt, char out[dht_item_canonical_length])
{
int canonical_length = dht_item_canonical_length;
char* ptr = out;

int left = canonical_length - (ptr - out);
if (salt.second > 0)
{
ptr += snprintf(ptr, left, "4:salt%d:", salt.second);
left = canonical_length - (ptr - out);
memcpy(ptr, salt.first, (std::min)(salt.second, left));
ptr += (std::min)(salt.second, left);
left = canonical_length - (ptr - out);
}
ptr += snprintf(ptr, canonical_length - (ptr - out)
, "3:seqi%" PRId64 "e1:v", seq);
left = canonical_length - (ptr - out);
memcpy(ptr, v.first, (std::min)(v.second, left));
ptr += (std::min)(v.second, left);
TORRENT_ASSERT((ptr - out) <= canonical_length);
return ptr - out;
}

int dht_item_canonical_string(std::vector<int8_t>& v, long seq,
const std::string& salt, std::vector<int8_t>& out) {
return dht_item_canonical_string0(std::pair<char const*, int>((const char *)v.data(), v.size()),
seq,
std::pair<char const*, int>((const char *)salt.data(), salt.size()),
(char *)out.data());
}

libtorrent::sha1_hash dht_item_target_id(std::vector<int8_t>& v) {
return dht::item_target_id(std::pair<char const*, int>((const char *)v.data(), v.size()));
}

libtorrent::sha1_hash dht_item_target_id(std::vector<int8_t>& salt, std::vector<int8_t>& pk) {
return dht::item_target_id(std::pair<char const*, int>((const char *)salt.data(), salt.size()), (char *)pk.data());
}

bool dht_verify_mutable_item(std::vector<int8_t>& v, const std::string& salt, long seq,
std::vector<int8_t>& pk, std::vector<int8_t>& sig) {
return dht::verify_mutable_item(std::pair<char const*, int>((const char *)v.data(), v.size()),
std::pair<char const*, int>((const char *)salt.data(), salt.size()),
seq,
(char *)pk.data(),
(char *)sig.data());
}

void dht_sign_mutable_item(std::vector<int8_t>& v, const std::string& salt, long seq,
std::vector<int8_t>& pk, std::vector<int8_t>& sk, std::vector<int8_t>& sig) {
dht::sign_mutable_item(std::pair<char const*, int>((const char *)v.data(), v.size()),
std::pair<char const*, int>((const char *)salt.data(), salt.size()),
seq,
(char *)pk.data(),
(char *)sk.data(),
(char *)sig.data());
}

class add_files_listener {
public:
virtual ~add_files_listener() {
Expand Down
88 changes: 2 additions & 86 deletions swig/libtorrent.i
Expand Up @@ -81,85 +81,13 @@
#include "libtorrent/extensions/lt_trackers.hpp"
#include "libtorrent/extensions/smart_ban.hpp"

#include "libtorrent/kademlia/item.hpp"

// additional includes

using namespace boost;
using namespace boost::system;

using namespace libtorrent;

namespace libtorrent {
namespace dht {
// code copied from item.cpp
enum { canonical_length = 1200 };
int canonical_string(std::pair<char const*, int> v, boost::uint64_t seq
, std::pair<char const*, int> salt, char out[canonical_length])
{
// v must be valid bencoding!
#ifdef TORRENT_DEBUG
bdecode_node e;
error_code ec;
TORRENT_ASSERT(bdecode(v.first, v.first + v.second, e, ec) == 0);
#endif
char* ptr = out;

int left = canonical_length - (ptr - out);
if (salt.second > 0)
{
ptr += snprintf(ptr, left, "4:salt%d:", salt.second);
left = canonical_length - (ptr - out);
memcpy(ptr, salt.first, (std::min)(salt.second, left));
ptr += (std::min)(salt.second, left);
left = canonical_length - (ptr - out);
}
ptr += snprintf(ptr, canonical_length - (ptr - out)
, "3:seqi%" PRId64 "e1:v", seq);
left = canonical_length - (ptr - out);
memcpy(ptr, v.first, (std::min)(v.second, left));
ptr += (std::min)(v.second, left);
TORRENT_ASSERT((ptr - out) <= canonical_length);
return ptr - out;
}
}
}

class dht_item {
public:

static int canonical_string(std::vector<char>& v, long seq, const std::string& salt, std::vector<char>& out) {
return dht::canonical_string(std::pair<char const*, int>(v.data(), v.size()),
seq,
std::pair<char const*, int>(salt.data(), salt.size()),
out.data());
}

static sha1_hash item_target_id(std::vector<char>& v) {
return dht::item_target_id(std::pair<char const*, int>(v.data(), v.size()));
}

static sha1_hash item_target_id(std::vector<char>& salt, std::vector<char>& pk) {
return dht::item_target_id(std::pair<char const*, int>(salt.data(), salt.size()), pk.data());
}

static bool verify_mutable_item(std::vector<char>& v, const std::string& salt, long seq, std::vector<char>& pk, std::vector<char>& sig) {
return dht::verify_mutable_item(std::pair<char const*, int>(v.data(), v.size()),
std::pair<char const*, int>(salt.data(), salt.size()),
seq,
pk.data(),
sig.data());
}

static void sign_mutable_item(std::vector<char>& v, const std::string& salt, long seq, std::vector<char>& pk, std::vector<char>& sk, std::vector<char>& sig) {
dht::sign_mutable_item(std::pair<char const*, int>(v.data(), v.size()),
std::pair<char const*, int>(salt.data(), salt.size()),
seq,
pk.data(),
sk.data(),
sig.data());
}
};

#include "libtorrent.h"
%}
Expand Down Expand Up @@ -588,6 +516,8 @@ namespace std {
%ignore ed25519_add_scalar(unsigned char *, unsigned char *, const unsigned char *);
%ignore ed25519_key_exchange(unsigned char *, const unsigned char *, const unsigned char *);

%ignore dht_item_canonical_length;
%ignore dht_item_canonical_string0;

%ignore operator=;
%ignore operator!;
Expand Down Expand Up @@ -1098,20 +1028,6 @@ void set_utp_stream_logging(bool enable);

}

class dht_item {
public:

static int canonical_string(std::vector<char>& v, long seq, const std::string& salt, std::vector<char>& out);

static libtorrent::sha1_hash item_target_id(std::vector<char>& v);

static libtorrent::sha1_hash item_target_id(std::vector<char>& salt, std::vector<char>& pk);

static bool verify_mutable_item(std::vector<char>& v, const std::string& salt, long seq, std::vector<char>& pk, std::vector<char>& sig);

static void sign_mutable_item(std::vector<char>& v, const std::string& salt, long seq, std::vector<char>& pk, std::vector<char>& sk, std::vector<char>& sig);
};

%feature("director") add_files_listener;
%feature("director") set_piece_hashes_listener;

Expand Down

0 comments on commit ed62d05

Please sign in to comment.