FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
chips/src/addrdb.cpp at master · https-github-com-goodman-ops/chips · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
https-github-com-goodman-ops
/
chips
Public
forked from
chips-blockchain/chips
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
chips
/
src
/
addrdb.cpp
Copy path
More file actions
More file actions
Latest commit
History
History
History
145 lines (121 loc) · 3.89 KB
Breadcrumbs
chips
/
src
/
addrdb.cpp
Copy path
File metadata and controls
145 lines (121 loc) · 3.89 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
//
Copyright (c) 2009-2010 Satoshi Nakamoto
//
Copyright (c) 2009-2017 The Bitcoin Core developers
//
Distributed under the MIT software license, see the accompanying
//
file COPYING or http://www.opensource.org/licenses/mit-license.php.
#
include
<
addrdb.h
>
#
include
<
addrman.h
>
#
include
<
chainparams.h
>
#
include
<
clientversion.h
>
#
include
<
hash.h
>
#
include
<
random.h
>
#
include
<
streams.h
>
#
include
<
tinyformat.h
>
#
include
<
util.h
>
namespace
{
template
<
typename
Stream,
typename
Data>
bool
SerializeDB
(Stream& stream,
const
Data& data)
{
//
Write and commit header, data
try
{
CHashWriter
hasher
(
SER_DISK
,
CLIENT_VERSION
);
stream <<
FLATDATA
(
Params
().
MessageStart
()) << data;
hasher <<
FLATDATA
(
Params
().
MessageStart
()) << data;
stream << hasher.
GetHash
();
}
catch
(
const
std::exception& e) {
return
error
(
"
%s: Serialize or I/O error - %s
"
, __func__, e.
what
());
}
return
true
;
}
template
<
typename
Data>
bool
SerializeFileDB
(
const
std::string& prefix,
const
fs::path& path,
const
Data& data)
{
//
Generate random temporary filename
unsigned
short
randv =
0
;
GetRandBytes
((
unsigned
char
*)&randv,
sizeof
(randv));
std::string tmpfn =
strprintf
(
"
%s.%04x
"
, prefix, randv);
//
open temp output file, and associate with CAutoFile
fs::path pathTmp =
GetDataDir
() / tmpfn;
FILE
*file =
fsbridge::fopen
(pathTmp,
"
wb
"
);
CAutoFile
fileout
(file,
SER_DISK
,
CLIENT_VERSION
);
if
(fileout.
IsNull
())
return
error
(
"
%s: Failed to open file %s
"
, __func__, pathTmp.
string
());
//
Serialize
if
(!
SerializeDB
(fileout, data))
return
false
;
FileCommit
(fileout.
Get
());
fileout.
fclose
();
//
replace existing file, if any, with new file
if
(!
RenameOver
(pathTmp, path))
return
error
(
"
%s: Rename-into-place failed
"
, __func__);
return
true
;
}
template
<
typename
Stream,
typename
Data>
bool
DeserializeDB
(Stream& stream, Data& data,
bool
fCheckSum
=
true
)
{
try
{
CHashVerifier<Stream>
verifier
(&stream);
//
de-serialize file header (network specific magic number) and ..
unsigned
char
pchMsgTmp[
4
];
verifier >>
FLATDATA
(pchMsgTmp);
//
... verify the network matches ours
if
(
memcmp
(pchMsgTmp,
Params
().
MessageStart
(),
sizeof
(pchMsgTmp)))
return
error
(
"
%s: Invalid network magic number
"
, __func__);
//
de-serialize data
verifier >> data;
//
verify checksum
if
(
fCheckSum
) {
uint256 hashTmp;
stream >> hashTmp;
if
(hashTmp != verifier.
GetHash
()) {
return
error
(
"
%s: Checksum mismatch, data corrupted
"
, __func__);
}
}
}
catch
(
const
std::exception& e) {
return
error
(
"
%s: Deserialize or I/O error - %s
"
, __func__, e.
what
());
}
return
true
;
}
template
<
typename
Data>
bool
DeserializeFileDB
(
const
fs::path& path, Data& data)
{
//
open input file, and associate with CAutoFile
FILE
*file =
fsbridge::fopen
(path,
"
rb
"
);
CAutoFile
filein
(file,
SER_DISK
,
CLIENT_VERSION
);
if
(filein.
IsNull
())
return
error
(
"
%s: Failed to open file %s
"
, __func__, path.
string
());
return
DeserializeDB
(filein, data);
}
}
CBanDB::CBanDB
()
{
pathBanlist =
GetDataDir
() /
"
banlist.dat
"
;
}
bool
CBanDB::Write
(
const
banmap_t
& banSet)
{
return
SerializeFileDB
(
"
banlist
"
, pathBanlist, banSet);
}
bool
CBanDB::Read
(
banmap_t
& banSet)
{
return
DeserializeFileDB
(pathBanlist, banSet);
}
CAddrDB::CAddrDB
()
{
pathAddr =
GetDataDir
() /
"
peers.dat
"
;
}
bool
CAddrDB::Write
(
const
CAddrMan& addr)
{
return
SerializeFileDB
(
"
peers
"
, pathAddr, addr);
}
bool
CAddrDB::Read
(CAddrMan& addr)
{
return
DeserializeFileDB
(pathAddr, addr);
}
bool
CAddrDB::Read
(CAddrMan& addr, CDataStream& ssPeers)
{
bool
ret =
DeserializeDB
(ssPeers, addr,
false
);
if
(!ret) {
//
Ensure addrman is left in a clean state
addr.
Clear
();
}
return
ret;
}
Back
|
FazBrowse Home
|
New Git URL