Electroneum
Toggle main menu visibility
Loading...
Searching...
No Matches
updates.cpp
Go to the documentation of this file.
1
// Copyright (c) 2017-Present, Electroneum
2
// Copyright (c) 2017-2019, The Monero Project
3
//
4
// All rights reserved.
5
//
6
// Redistribution and use in source and binary forms, with or without modification, are
7
// permitted provided that the following conditions are met:
8
//
9
// 1. Redistributions of source code must retain the above copyright notice, this list of
10
// conditions and the following disclaimer.
11
//
12
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
13
// of conditions and the following disclaimer in the documentation and/or other
14
// materials provided with the distribution.
15
//
16
// 3. Neither the name of the copyright holder nor the names of its contributors may be
17
// used to endorse or promote products derived from this software without specific
18
// prior written permission.
19
//
20
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
21
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
22
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
23
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
27
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
28
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
30
#include <boost/algorithm/string.hpp>
31
#include "
misc_log_ex.h
"
32
#include "
util.h
"
33
#include "
dns_utils.h
"
34
#include "
updates.h
"
35
36
#undef ELECTRONEUM_DEFAULT_LOG_CATEGORY
37
#define ELECTRONEUM_DEFAULT_LOG_CATEGORY "updates"
38
39
namespace
tools
40
{
41
bool
check_updates
(
const
std::string &software,
const
std::string &buildtag, std::string &
version
, std::string &hash)
42
{
43
std::vector<std::string> records;
44
bool
found =
false
;
45
46
MDEBUG
(
"Checking updates for "
<< buildtag <<
" "
<< software);
47
48
// All four ElectroneumPulse domains have DNSSEC on and valid
49
static
const
std::vector<std::string> dns_urls = {
50
"updates.electroneumpulse.com"
,
51
"updates.electroneumpulse.info"
,
52
"updates.electroneumpulse.net"
,
53
"updates.electroneumpulse.org"
54
};
55
56
if
(!
tools::dns_utils::load_txt_records_from_dns
(records, dns_urls,
"update"
))
57
return
false
;
58
59
for
(
const
auto
& record : records)
60
{
61
std::vector<std::string> fields;
62
boost::split(fields, record, boost::is_any_of(
":"
));
63
if
(fields.size() != 4)
64
{
65
MWARNING
(
"Updates record does not have 4 fields: "
<< record);
66
continue
;
67
}
68
69
if
(software != fields[0] || buildtag != fields[1])
70
continue
;
71
72
bool
alnum =
true
;
73
for
(
auto
c: fields[3])
74
if
(!isalnum(c))
75
alnum =
false
;
76
if
(fields[3].size() != 64 && !alnum)
77
{
78
MWARNING
(
"Invalid hash: "
<< fields[3]);
79
continue
;
80
}
81
82
// use highest version
83
if
(found)
84
{
85
int
cmp =
vercmp
(
version
.c_str(), fields[2].c_str());
86
if
(cmp > 0)
87
continue
;
88
if
(cmp == 0 && hash != fields[3])
89
MWARNING
(
"Two matches found for "
<< software <<
" version "
<<
version
<<
" on "
<< buildtag);
90
}
91
92
version
= fields[2];
93
hash = fields[3];
94
95
MINFO
(
"Found new version "
<<
version
<<
" with hash "
<< hash);
96
found =
true
;
97
}
98
return
found;
99
}
100
101
std::string
get_update_url
(
const
std::string &software,
const
std::string &subdir,
const
std::string &buildtag,
const
std::string &
version
,
bool
user)
102
{
103
const
char
*base = user ?
"http://s3-eu-west-1.amazonaws.com/updates.electroneum.com/releases/download/v"
:
"http://s3-eu-west-1.amazonaws.com/updates.electroneum.com/releases/download/v"
;
104
#ifdef _WIN32
105
static
const
char
*extension = strncmp(buildtag.c_str(),
"install-"
, 8) ?
".zip"
:
".exe"
;
106
#else
107
static
const
char
extension[] =
".tar.bz2"
;
108
#endif
109
110
std::string url;
111
112
url = base;
113
// if (!subdir.empty())
114
// url += subdir + "/";
115
url = url +
version
+
"/"
+ software +
"-"
+ buildtag +
"-v"
+
version
+ extension;
116
return
url;
117
}
118
}
version
uint8_t version
Definition
blockchain.cpp:90
dns_utils.h
misc_log_ex.h
MWARNING
#define MWARNING(x)
Definition
misc_log_ex.h:74
MDEBUG
#define MDEBUG(x)
Definition
misc_log_ex.h:76
MINFO
#define MINFO(x)
Definition
misc_log_ex.h:75
tools::dns_utils::load_txt_records_from_dns
bool load_txt_records_from_dns(std::vector< std::string > &good_records, const std::vector< std::string > &dns_urls, std::string type)
Definition
dns_utils.cpp:515
tools
Various Tools.
Definition
tools.cpp:31
tools::vercmp
int vercmp(const char *v0, const char *v1)
Definition
util.cpp:915
tools::get_update_url
std::string get_update_url(const std::string &software, const std::string &subdir, const std::string &buildtag, const std::string &version, bool user)
Definition
updates.cpp:101
tools::check_updates
bool check_updates(const std::string &software, const std::string &buildtag, std::string &version, std::string &hash)
Definition
updates.cpp:41
util.h
updates.h
src
common
updates.cpp
Generated on
for Electroneum by
1.17.0