Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
L
libdap-chain-net
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
cellframe
libdap-chain-net
Commits
554850a5
Commit
554850a5
authored
5 years ago
by
dmitriy.gerasimov
Browse files
Options
Downloads
Patches
Plain Diff
[+] Networking FSM, lot of additional information for hold and parse
parent
b6726042
No related branches found
No related tags found
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
dap_chain_net.c
+54
-13
54 additions, 13 deletions
dap_chain_net.c
dap_chain_net.h
+8
-4
8 additions, 4 deletions
dap_chain_net.h
dap_chain_node_cli_cmd.c
+20
-18
20 additions, 18 deletions
dap_chain_node_cli_cmd.c
dap_chain_node_cli_cmd.h
+4
-0
4 additions, 0 deletions
dap_chain_node_cli_cmd.h
with
86 additions
and
35 deletions
dap_chain_net.c
+
54
−
13
View file @
554850a5
...
...
@@ -30,11 +30,15 @@
#include
"utlist.h"
#include
"dap_common.h"
#include
"dap_string.h"
#include
"dap_strfuncs.h"
#include
"dap_config.h"
#include
"dap_chain_utxo.h"
#include
"dap_chain_net.h"
#include
"dap_chain_node_client.h"
#include
"dap_chain_node_cli.h"
#include
"dap_chain_node_cli_cmd.h"
#include
"dap_module.h"
#define _XOPEN_SOURCE 700
...
...
@@ -76,21 +80,27 @@ typedef struct dap_chain_net_item{
static
dap_chain_net_item_t
*
s_net_items
=
NULL
;
static
dap_chain_net_item_t
*
s_net_items_ids
=
NULL
;
static
size_t
s_net_configs_count
=
0
;
static
pthread_cond_t
s_net_proc_loop_cond
=
PTHREAD_COND_INITIALIZER
;
static
pthread_mutex_t
s_net_proc_loop_mutex
=
PTHREAD_MUTEX_INITIALIZER
;
int
s_net_states_proc
(
dap_chain_net_t
*
l_net
);
static
const
char
*
c_net_states
[]
=
{
[
NET_STATE_BEGIN
]
=
"NET_STATE_BEGIN"
,
[
NET_STATE_LINKS_CONNECTING
]
=
"NET_STATE_LINKS_CONNECTING"
,
[
NET_STATE_LINKS_ESTABLISHED
]
=
"NET_STATE_LINKS_ESTABLISHED"
,
[
NET_STATE_SYNC_GDB
]
=
"NET_STATE_SYNC_GDB"
,
[
NET_STATE_SYNC_CHAINS
]
=
"NET_STATE_SYNC_CHAINS"
,
[
NET_STATE_S
TAND_BY
]
=
"NET_STATE_STAND_BY"
[
NET_STATE_S
YNC_ALL
]
=
"NET_STATE_STAND_BY"
};
static
dap_chain_net_t
*
s_net_new
(
const
char
*
a_id
,
const
char
*
a_name
,
const
char
*
a_node_role
);
inline
static
const
char
*
s_net_state_to_str
(
dap_chain_net_state_t
l_state
);
static
int
s_net_states_proc
(
dap_chain_net_t
*
l_net
);
static
void
*
s_net_proc_thread
(
void
*
a_net
);
static
void
s_net_proc_thread_start
(
dap_chain_net_t
*
a_net
);
static
void
s_net_proc_kill
(
dap_chain_net_t
*
a_net
);
static
int
s_cli_net
(
int
argc
,
const
char
**
argv
,
char
**
str_reply
);
/**
* @brief s_net_state_to_str
* @param l_state
...
...
@@ -120,13 +130,14 @@ int dap_chain_net_state_go_to(dap_chain_net_t * a_net, dap_chain_net_state_t a_n
* @brief s_net_states_proc
* @param l_net
*/
int
s_net_states_proc
(
dap_chain_net_t
*
l_net
)
static
int
s_net_states_proc
(
dap_chain_net_t
*
l_net
)
{
int
ret
=
0
;
switch
(
PVT
(
l_net
)
->
state
){
case
NET_STATE_BEGIN
:{
if
(
PVT
(
l_net
)
->
state_target
!=
NET_STATE_BEGIN
)
dap_chain_net_links_establish
(
l_net
);
if
(
PVT
(
l_net
)
->
state_target
!=
NET_STATE_BEGIN
){
}
}
break
;
case
NET_STATE_LINKS_CONNECTING
:{
...
...
@@ -142,7 +153,7 @@ int s_net_states_proc(dap_chain_net_t * l_net)
case
NET_STATE_SYNC_CHAINS
:{
}
break
;
case
NET_STATE_S
TAND_BY
:{
case
NET_STATE_S
YNC_ALL
:{
}
break
;
}
...
...
@@ -203,7 +214,7 @@ static void s_net_proc_kill( dap_chain_net_t * a_net )
* @param a_node_name
* @return
*/
dap_chain_net_t
*
dap_chain
_net_new
(
const
char
*
a_id
,
const
char
*
a_name
,
static
dap_chain_net_t
*
s
_net_new
(
const
char
*
a_id
,
const
char
*
a_name
,
const
char
*
a_node_role
)
{
dap_chain_net_t
*
ret
=
DAP_NEW_Z_SIZE
(
dap_chain_net_t
,
sizeof
(
ret
->
pub
)
+
sizeof
(
dap_chain_net_pvt_t
)
);
...
...
@@ -266,13 +277,40 @@ void dap_chain_net_delete( dap_chain_net_t * a_net )
* @return
*/
int
dap_chain_net_init
()
{
dap_chain_node_cli_cmd_item_create
(
"net"
,
s_cli_net
,
"Network commands"
,
"net -net <chain net name> sync < all | gdb | chains >
\n
"
"
\t
Syncronyze gdb, chains or everything
\n\n
"
);
return
dap_chain_net_load
(
"default"
);
}
/**
* @brief s_cli_net
* @param argc
* @param argv
* @param str_reply
* @return
*/
static
int
s_cli_net
(
int
argc
,
const
char
**
argv
,
char
**
str_reply
)
{
}
int
dap_chain_net_load
(
const
char
*
a_net_name
)
{
static
dap_config_t
*
l_cfg
=
NULL
;
if
((
l_cfg
=
dap_config_open
(
"network/default"
)
)
==
NULL
)
{
dap_string_t
*
l_cfg_path
=
dap_string_new
(
"network/"
);
dap_string_append
(
l_cfg_path
,
a_net_name
);
if
(
(
l_cfg
=
dap_config_open
(
l_cfg_path
->
str
)
)
==
NULL
)
{
log_it
(
L_ERROR
,
"Can't open default network config"
);
dap_string_free
(
l_cfg_path
,
true
);
return
-
1
;
}
else
{
dap_chain_net_t
*
l_net
=
dap_chain_net_new
(
}
else
{
dap_string_free
(
l_cfg_path
,
true
);
dap_chain_net_t
*
l_net
=
s_net_new
(
dap_config_get_item_str
(
l_cfg
,
"general"
,
"id"
),
dap_config_get_item_str
(
l_cfg
,
"general"
,
"name"
),
dap_config_get_item_str
(
l_cfg
,
"general"
,
"node-role"
)
...
...
@@ -322,8 +360,11 @@ int dap_chain_net_init()
// Create chain object
dap_chain_t
*
l_chain
=
dap_chain_load_from_cfg
(
l_net
->
pub
.
name
,
l_net
->
pub
.
id
,
l_chains_path
);
if
(
l_chain
)
if
(
l_chain
)
{
DL_APPEND
(
l_net
->
pub
.
chains
,
l_chain
);
if
(
l_chain
->
callback_created
)
l_chain
->
callback_created
(
l_chain
,
l_cfg
);
}
free
(
l_entry_name
);
}
}
...
...
This diff is collapsed.
Click to expand it.
dap_chain_net.h
+
8
−
4
View file @
554850a5
...
...
@@ -39,13 +39,14 @@ typedef enum dap_chain_net_state{
NET_STATE_LINKS_ESTABLISHED
,
NET_STATE_SYNC_GDB
,
NET_STATE_SYNC_CHAINS
,
NET_STATE_S
TAND_BY
,
NET_STATE_S
YNC_ALL
,
}
dap_chain_net_state_t
;
typedef
struct
dap_chain_net
{
struct
{
dap_chain_net_id_t
id
;
dap_chain_cell_id_t
cell_id
;
// Cell where the node is connected to. {{0}} if not celled(sharder) blockchain
char
*
name
;
char
*
gdb_groups_prefix
;
dap_chain_t
*
chains
;
// double-linked list of chains
...
...
@@ -53,17 +54,20 @@ typedef struct dap_chain_net{
uint8_t
pvt
[];
}
dap_chain_net_t
;
int
dap_chain_net_init
(
void
);
void
dap_chain_net_deinit
(
void
);
dap_chain_net_t
*
dap_chain_net_new
(
const
char
*
a_id
,
const
char
*
a_name
,
const
char
*
a_node_role
);
int
dap_chain_net_load
(
const
char
*
a_net_name
);
int
dap_chain_net_state_go_to
(
dap_chain_net_t
*
a_net
,
dap_chain_net_state_t
a_new_state
);
inline
static
int
dap_chain_net_start
(
dap_chain_net_t
*
a_net
){
return
dap_chain_net_state_go_to
(
a_net
,
NET_STATE_S
TAND_BY
);
}
inline
static
int
dap_chain_net_start
(
dap_chain_net_t
*
a_net
){
return
dap_chain_net_state_go_to
(
a_net
,
NET_STATE_S
YNC_ALL
);
}
inline
static
int
dap_chain_net_stop
(
dap_chain_net_t
*
a_net
)
{
return
dap_chain_net_state_go_to
(
a_net
,
NET_STATE_BEGIN
);
}
inline
static
int
dap_chain_net_links_establish
(
dap_chain_net_t
*
a_net
)
{
return
dap_chain_net_state_go_to
(
a_net
,
NET_STATE_LINKS_ESTABLISHED
);
}
inline
static
int
dap_chain_net_sync_chains
(
dap_chain_net_t
*
a_net
)
{
return
dap_chain_net_state_go_to
(
a_net
,
NET_STATE_SYNC_CHAINS
);
}
inline
static
int
dap_chain_net_sync_gdb
(
dap_chain_net_t
*
a_net
)
{
return
dap_chain_net_state_go_to
(
a_net
,
NET_STATE_SYNC_GDB
);
}
inline
static
int
dap_chain_net_sync_all
(
dap_chain_net_t
*
a_net
)
{
return
dap_chain_net_state_go_to
(
a_net
,
NET_STATE_SYNC_ALL
);
}
void
dap_chain_net_delete
(
dap_chain_net_t
*
a_net
);
void
dap_chain_net_proc_datapool
(
dap_chain_net_t
*
a_net
);
...
...
This diff is collapsed.
Click to expand it.
dap_chain_node_cli_cmd.c
+
20
−
18
View file @
554850a5
...
...
@@ -1382,33 +1382,35 @@ int com_tx_wallet(int argc, const char ** argv, char **str_reply)
* @param l_net
* @return
*/
int
s
_values_parse_net_chain
(
int
*
a_arg_index
,
int
argc
,
const
char
**
argv
,
char
**
a_str_reply
,
int
dap_chain_node_cli_cmd
_values_parse_net_chain
(
int
*
a_arg_index
,
int
argc
,
const
char
**
argv
,
char
**
a_str_reply
,
dap_chain_t
**
a_chain
,
dap_chain_net_t
**
a_net
)
{
const
char
*
l_chain_str
=
NULL
;
const
char
*
l_net_str
=
NULL
;
// Net name
dap_chain_node_cli_find_option_val
(
argv
,
*
a_arg_index
,
argc
,
"-net"
,
&
l_net_str
);
// Chain name
dap_chain_node_cli_find_option_val
(
argv
,
*
a_arg_index
,
argc
,
"-chain"
,
&
l_chain_str
);
// Net name
if
(
a_net
)
dap_chain_node_cli_find_option_val
(
argv
,
*
a_arg_index
,
argc
,
"-net"
,
&
l_net_str
);
else
return
-
100
;
// Select chain network
if
(
!
l_net_str
)
{
dap_chain_node_cli_set_reply_text
(
a_str_reply
,
"%s requires parameter 'net'"
,
argv
[
0
]);
return
-
42
;
}
else
{
if
(
(
*
a_net
=
dap_chain_net_by_name
(
l_net_str
)
)
==
NULL
){
// Can't find such network
dap_chain_node_cli_set_reply_text
(
a_str_reply
,
"%s cand find network
\"
%s
\"
"
,
argv
[
0
],
l_net_str
);
return
-
43
;
}
}
// Chain name
if
(
a_chain
)
dap_chain_node_cli_find_option_val
(
argv
,
*
a_arg_index
,
argc
,
"-chain"
,
&
l_chain_str
);
if
(
(
*
a_net
=
dap_chain_net_by_name
(
l_net_str
)
)
==
NULL
){
// Can't find such network
dap_chain_node_cli_set_reply_text
(
a_str_reply
,
"%s cand find network
\"
%s
\"
"
,
argv
[
0
],
l_net_str
);
return
-
43
;
}
// Select chain
if
(
!
l_chain_str
)
{
dap_chain_node_cli_set_reply_text
(
a_str_reply
,
"%s requires parameter 'chain'"
,
argv
[
0
]);
return
-
44
;
}
else
{
if
(
l_chain_str
)
{
if
(
(
*
a_chain
=
dap_chain_net_get_chain_by_name
(
*
a_net
,
l_chain_str
)
)
==
NULL
){
// Can't find such chain
dap_chain_node_cli_set_reply_text
(
a_str_reply
,
"%s requires parameter 'chain' to be valid chain name in chain net %s"
,
argv
[
0
]
,
l_net_str
);
...
...
@@ -1442,7 +1444,7 @@ int com_token_decl_sign(int argc, const char ** argv, char ** a_str_reply)
dap_chain_net_t
*
l_net
=
NULL
;
if
(
s
_values_parse_net_chain
(
&
arg_index
,
argc
,
argv
,
a_str_reply
,
&
l_chain
,
&
l_net
)
<
0
)
if
(
dap_chain_node_cli_cmd
_values_parse_net_chain
(
&
arg_index
,
argc
,
argv
,
a_str_reply
,
&
l_chain
,
&
l_net
)
<
0
)
return
-
1
;
// Load certs lists
...
...
@@ -1597,7 +1599,7 @@ int com_mempool_list(int argc, const char ** argv, char ** a_str_reply)
dap_chain_t
*
l_chain
;
dap_chain_net_t
*
l_net
=
NULL
;
if
(
s
_values_parse_net_chain
(
&
arg_index
,
argc
,
argv
,
a_str_reply
,
&
l_chain
,
&
l_net
)
<
0
)
if
(
dap_chain_node_cli_cmd
_values_parse_net_chain
(
&
arg_index
,
argc
,
argv
,
a_str_reply
,
&
l_chain
,
&
l_net
)
<
0
)
return
-
1
;
char
*
l_gdb_group_mempool
=
dap_chain_net_get_gdb_group_mempool
(
l_chain
);
...
...
@@ -1632,7 +1634,7 @@ int com_mempool_proc(int argc, const char ** argv, char ** a_str_reply)
dap_chain_t
*
l_chain
;
dap_chain_net_t
*
l_net
=
NULL
;
if
(
s
_values_parse_net_chain
(
&
arg_index
,
argc
,
argv
,
a_str_reply
,
&
l_chain
,
&
l_net
)
<
0
)
if
(
dap_chain_node_cli_cmd
_values_parse_net_chain
(
&
arg_index
,
argc
,
argv
,
a_str_reply
,
&
l_chain
,
&
l_net
)
<
0
)
return
-
1
;
char
*
l_gdb_group_mempool
=
dap_chain_net_get_gdb_group_mempool
(
l_chain
);
...
...
@@ -1702,7 +1704,7 @@ int com_token_decl(int argc, const char ** argv, char ** str_reply)
dap_chain_t
*
l_chain
;
dap_chain_net_t
*
l_net
=
NULL
;
if
(
s
_values_parse_net_chain
(
&
arg_index
,
argc
,
argv
,
str_reply
,
&
l_chain
,
&
l_net
)
<
0
)
if
(
dap_chain_node_cli_cmd
_values_parse_net_chain
(
&
arg_index
,
argc
,
argv
,
str_reply
,
&
l_chain
,
&
l_net
)
<
0
)
return
-
1
;
...
...
This diff is collapsed.
Click to expand it.
dap_chain_node_cli_cmd.h
+
4
−
0
View file @
554850a5
...
...
@@ -24,6 +24,8 @@
#pragma once
#include
"dap_chain.h"
#include
"dap_chain_net.h"
#include
"dap_chain_node.h"
#include
"dap_chain_node_cli.h"
...
...
@@ -35,6 +37,8 @@
dap_chain_node_addr_t
*
dap_chain_node_addr_get_by_alias
(
const
char
*
alias
);
int
dap_chain_node_cli_cmd_values_parse_net_chain
(
int
*
a_arg_index
,
int
argc
,
const
char
**
argv
,
char
**
a_str_reply
,
dap_chain_t
**
a_chain
,
dap_chain_net_t
**
a_net
);
/**
* global_db command
...
...
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