Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
opendht
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Locked files
Deploy
Model registry
Analyze
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
savoirfairelinux
opendht
Commits
2b1d2fc3
Commit
2b1d2fc3
authored
5 years ago
by
Adrien Béraud
Browse files
Options
Downloads
Patches
Plain Diff
c wrapper: use shared_ptr for dht_privatekey
parent
a0566cf6
No related branches found
No related tags found
No related merge requests found
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
c/opendht.cpp
+38
-5
38 additions, 5 deletions
c/opendht.cpp
c/opendht_c.h
+38
-0
38 additions, 0 deletions
c/opendht_c.h
with
76 additions
and
5 deletions
c/opendht.cpp
+
38
−
5
View file @
2b1d2fc3
...
@@ -2,6 +2,8 @@
...
@@ -2,6 +2,8 @@
#include
"opendht.h"
#include
"opendht.h"
using
ValueSp
=
std
::
shared_ptr
<
dht
::
Value
>
;
using
ValueSp
=
std
::
shared_ptr
<
dht
::
Value
>
;
using
PrivkeySp
=
std
::
shared_ptr
<
dht
::
crypto
::
PrivateKey
>
;
using
CertSp
=
std
::
shared_ptr
<
dht
::
crypto
::
Certificate
>
;
#ifdef __cplusplus
#ifdef __cplusplus
extern
"C"
{
extern
"C"
{
...
@@ -119,23 +121,30 @@ dht_blob* dht_publickey_encrypt(const dht_publickey* pk, const char* data, size_
...
@@ -119,23 +121,30 @@ dht_blob* dht_publickey_encrypt(const dht_publickey* pk, const char* data, size_
dht_privatekey
*
dht_privatekey_generate
(
unsigned
key_length_bits
)
{
dht_privatekey
*
dht_privatekey_generate
(
unsigned
key_length_bits
)
{
if
(
key_length_bits
==
0
)
if
(
key_length_bits
==
0
)
key_length_bits
=
4096
;
key_length_bits
=
4096
;
return
reinterpret_cast
<
dht_privatekey
*>
(
new
dht
::
crypto
::
PrivateKey
(
dht
::
crypto
::
PrivateKey
::
generate
(
key_length_bits
)));
return
reinterpret_cast
<
dht_privatekey
*>
(
new
PrivkeySp
(
std
::
make_shared
<
dht
::
crypto
::
PrivateKey
>
(
dht
::
crypto
::
PrivateKey
::
generate
(
key_length_bits
)))
)
;
}
}
dht_privatekey
*
dht_privatekey_import
(
const
uint8_t
*
dat
,
size_t
dat_size
,
const
char
*
password
)
{
dht_privatekey
*
dht_privatekey_import
(
const
uint8_t
*
dat
,
size_t
dat_size
,
const
char
*
password
)
{
try
{
try
{
return
reinterpret_cast
<
dht_privatekey
*>
(
new
dht
::
crypto
::
PrivateKey
(
dat
,
dat_size
,
password
));
return
reinterpret_cast
<
dht_privatekey
*>
(
new
PrivkeySp
(
std
::
make_shared
<
dht
::
crypto
::
PrivateKey
>
(
dat
,
dat_size
,
password
))
)
;
}
catch
(
const
dht
::
crypto
::
CryptoException
&
e
)
{
}
catch
(
const
dht
::
crypto
::
CryptoException
&
e
)
{
return
nullptr
;
return
nullptr
;
}
}
}
}
dht_publickey
*
dht_privatekey_get_publickey
(
const
dht_privatekey
*
key
)
{
dht_publickey
*
dht_privatekey_get_publickey
(
const
dht_privatekey
*
k
)
{
return
reinterpret_cast
<
dht_publickey
*>
(
new
dht
::
crypto
::
PublicKey
(
reinterpret_cast
<
const
dht
::
crypto
::
PrivateKey
*>
(
key
)
->
getPublicKey
()));
const
auto
&
key
=
*
reinterpret_cast
<
const
PrivkeySp
*>
(
k
);
return
reinterpret_cast
<
dht_publickey
*>
(
new
dht
::
crypto
::
PublicKey
(
key
->
getPublicKey
()));
}
}
void
dht_privatekey_delete
(
dht_privatekey
*
pk
)
{
void
dht_privatekey_delete
(
dht_privatekey
*
pk
)
{
delete
reinterpret_cast
<
dht
::
crypto
::
PrivateKey
*>
(
pk
);
delete
reinterpret_cast
<
PrivkeySp
*>
(
pk
);
}
// config
void
dht_runner_config_default
(
dht_runner_config
*
config
)
{
bzero
(
config
,
sizeof
(
dht_runner_config
));
config
->
threaded
=
true
;
}
}
// dht::DhtRunner
// dht::DhtRunner
...
@@ -152,6 +161,30 @@ void dht_runner_run(dht_runner* r, in_port_t port) {
...
@@ -152,6 +161,30 @@ void dht_runner_run(dht_runner* r, in_port_t port) {
runner
->
run
(
port
,
{},
true
);
runner
->
run
(
port
,
{},
true
);
}
}
void
dht_runner_run_config
(
dht_runner
*
r
,
in_port_t
port
,
const
dht_runner_config
*
conf
)
{
auto
runner
=
reinterpret_cast
<
dht
::
DhtRunner
*>
(
r
);
dht
::
DhtRunner
::
Config
config
;
config
.
dht_config
.
node_config
.
is_bootstrap
=
conf
->
dht_config
.
node_config
.
is_bootstrap
;
config
.
dht_config
.
node_config
.
maintain_storage
=
conf
->
dht_config
.
node_config
.
maintain_storage
;
config
.
dht_config
.
node_config
.
node_id
=
*
reinterpret_cast
<
const
dht
::
InfoHash
*>
(
&
conf
->
dht_config
.
node_config
.
node_id
);
config
.
dht_config
.
node_config
.
network
=
conf
->
dht_config
.
node_config
.
network
;
config
.
dht_config
.
node_config
.
persist_path
=
conf
->
dht_config
.
node_config
.
persist_path
;
if
(
conf
->
dht_config
.
id
.
privkey
)
config
.
dht_config
.
id
.
first
=
*
reinterpret_cast
<
const
PrivkeySp
*>
(
conf
->
dht_config
.
id
.
privkey
);
if
(
conf
->
dht_config
.
id
.
certificate
)
config
.
dht_config
.
id
.
second
=
*
reinterpret_cast
<
const
CertSp
*>
(
conf
->
dht_config
.
id
.
certificate
);
config
.
threaded
=
conf
->
threaded
;
config
.
proxy_server
=
conf
->
proxy_server
;
config
.
push_node_id
=
conf
->
push_node_id
;
config
.
push_token
=
conf
->
push_token
;
config
.
peer_discovery
=
conf
->
peer_discovery
;
config
.
peer_publish
=
conf
->
peer_publish
;
runner
->
run
(
port
,
config
);
}
void
dht_runner_ping
(
dht_runner
*
r
,
struct
sockaddr
*
addr
,
socklen_t
addr_len
)
{
void
dht_runner_ping
(
dht_runner
*
r
,
struct
sockaddr
*
addr
,
socklen_t
addr_len
)
{
auto
runner
=
reinterpret_cast
<
dht
::
DhtRunner
*>
(
r
);
auto
runner
=
reinterpret_cast
<
dht
::
DhtRunner
*>
(
r
);
runner
->
bootstrap
(
dht
::
SockAddr
(
addr
,
addr_len
));
runner
->
bootstrap
(
dht
::
SockAddr
(
addr
,
addr_len
));
...
...
This diff is collapsed.
Click to expand it.
c/opendht_c.h
+
38
−
0
View file @
2b1d2fc3
...
@@ -70,6 +70,12 @@ OPENDHT_C_PUBLIC void dht_privatekey_delete(dht_privatekey*);
...
@@ -70,6 +70,12 @@ OPENDHT_C_PUBLIC void dht_privatekey_delete(dht_privatekey*);
struct
OPENDHT_C_PUBLIC
dht_certificate
;
struct
OPENDHT_C_PUBLIC
dht_certificate
;
typedef
struct
dht_certificate
dht_certificate
;
typedef
struct
dht_certificate
dht_certificate
;
struct
OPENDHT_PUBLIC
dht_identity
{
dht_privatekey
*
privkey
;
dht_certificate
*
certificate
;
};
typedef
struct
dht_identity
dht_identity
;
// callbacks
// callbacks
typedef
bool
(
*
dht_get_cb
)(
const
dht_value
*
value
,
void
*
user_data
);
typedef
bool
(
*
dht_get_cb
)(
const
dht_value
*
value
,
void
*
user_data
);
typedef
bool
(
*
dht_value_cb
)(
const
dht_value
*
value
,
bool
expired
,
void
*
user_data
);
typedef
bool
(
*
dht_value_cb
)(
const
dht_value
*
value
,
bool
expired
,
void
*
user_data
);
...
@@ -80,12 +86,44 @@ struct OPENDHT_C_PUBLIC dht_op_token;
...
@@ -80,12 +86,44 @@ struct OPENDHT_C_PUBLIC dht_op_token;
typedef
struct
dht_op_token
dht_op_token
;
typedef
struct
dht_op_token
dht_op_token
;
OPENDHT_C_PUBLIC
void
dht_op_token_delete
(
dht_op_token
*
token
);
OPENDHT_C_PUBLIC
void
dht_op_token_delete
(
dht_op_token
*
token
);
// config
struct
OPENDHT_PUBLIC
dht_node_config
{
dht_infohash
node_id
;
uint32_t
network
;
bool
is_bootstrap
;
bool
maintain_storage
;
const
char
*
persist_path
;
};
typedef
struct
dht_node_config
dht_node_config
;
struct
OPENDHT_PUBLIC
dht_secure_config
{
dht_node_config
node_config
;
dht_identity
id
;
};
typedef
struct
dht_secure_config
dht_secure_config
;
struct
OPENDHT_PUBLIC
dht_runner_config
{
dht_secure_config
dht_config
;
bool
threaded
;
const
char
*
proxy_server
;
const
char
*
push_node_id
;
const
char
*
push_token
;
bool
peer_discovery
;
bool
peer_publish
;
dht_certificate
*
server_ca
;
dht_identity
client_identity
;
};
typedef
struct
dht_runner_config
dht_runner_config
;
OPENDHT_C_PUBLIC
void
dht_runner_config_default
(
dht_runner_config
*
config
);
// dht::DhtRunner
// dht::DhtRunner
struct
OPENDHT_C_PUBLIC
dht_runner
;
struct
OPENDHT_C_PUBLIC
dht_runner
;
typedef
struct
dht_runner
dht_runner
;
typedef
struct
dht_runner
dht_runner
;
OPENDHT_C_PUBLIC
dht_runner
*
dht_runner_new
();
OPENDHT_C_PUBLIC
dht_runner
*
dht_runner_new
();
OPENDHT_C_PUBLIC
void
dht_runner_delete
(
dht_runner
*
runner
);
OPENDHT_C_PUBLIC
void
dht_runner_delete
(
dht_runner
*
runner
);
OPENDHT_C_PUBLIC
void
dht_runner_run
(
dht_runner
*
runner
,
in_port_t
port
);
OPENDHT_C_PUBLIC
void
dht_runner_run
(
dht_runner
*
runner
,
in_port_t
port
);
OPENDHT_C_PUBLIC
void
dht_runner_run_config
(
dht_runner
*
runner
,
in_port_t
port
,
const
dht_runner_config
*
config
);
OPENDHT_C_PUBLIC
void
dht_runner_ping
(
dht_runner
*
runner
,
struct
sockaddr
*
addr
,
socklen_t
addr_len
);
OPENDHT_C_PUBLIC
void
dht_runner_ping
(
dht_runner
*
runner
,
struct
sockaddr
*
addr
,
socklen_t
addr_len
);
OPENDHT_C_PUBLIC
void
dht_runner_bootstrap
(
dht_runner
*
runner
,
const
char
*
host
,
const
char
*
service
);
OPENDHT_C_PUBLIC
void
dht_runner_bootstrap
(
dht_runner
*
runner
,
const
char
*
host
,
const
char
*
service
);
OPENDHT_C_PUBLIC
void
dht_runner_get
(
dht_runner
*
runner
,
const
dht_infohash
*
hash
,
dht_get_cb
cb
,
dht_done_cb
done_cb
,
void
*
cb_user_data
);
OPENDHT_C_PUBLIC
void
dht_runner_get
(
dht_runner
*
runner
,
const
dht_infohash
*
hash
,
dht_get_cb
cb
,
dht_done_cb
done_cb
,
void
*
cb_user_data
);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment