Browse Source

Merge branch 'master' into peercoin

peercoin
Intel 11 years ago
parent
commit
f14e829744
  1. 5
      src/server/poolserver/Stratum/Client.cpp
  2. 2
      src/server/poolserver/Stratum/Server.cpp
  3. 18
      src/server/poolserver/Stratum/Server.h

5
src/server/poolserver/Stratum/Client.cpp

@ -243,9 +243,12 @@ namespace Stratum
if (target <= job.blockTarget) { if (target <= job.blockTarget) {
sLog.Info(LOG_STRATUM, "We have found a block candidate!"); sLog.Info(LOG_STRATUM, "We have found a block candidate!");
// copy job diff because job will be deleted after submiting share by block template update
uint64 jobDiff = job.diff;
if (_server->SubmitBlock(block)) { if (_server->SubmitBlock(block)) {
std::string query("INSERT INTO `shares` (`rem_host`, `username`, `our_result`, `upstream_result`, `reason`, `solution`, `time`, `difficulty`) VALUES "); std::string query("INSERT INTO `shares` (`rem_host`, `username`, `our_result`, `upstream_result`, `reason`, `solution`, `time`, `difficulty`) VALUES ");
query += Util::FS("(INET_NTOA(%u), '%s', 1, 1, '', '%s', FROM_UNIXTIME(%u), %u)", _ip, username.c_str(), Util::BinToASCII(Util::Reverse(hash)).c_str(), Util::Date(), job.diff); query += Util::FS("(INET_NTOA(%u), '%s', 1, 1, '', '%s', FROM_UNIXTIME(%u), %u)", _ip, username.c_str(), Util::BinToASCII(Util::Reverse(hash)).c_str(), Util::Date(), jobDiff);
sDatabase.ExecuteAsync(query.c_str()); sDatabase.ExecuteAsync(query.c_str());
JSON response; JSON response;

2
src/server/poolserver/Stratum/Server.cpp

@ -16,6 +16,7 @@ namespace Stratum
void Server::SendToAll(JSON msg) void Server::SendToAll(JSON msg)
{ {
boost::lock_guard<boost::mutex> guard(_mtxClients);
std::set<ClientPtr>::iterator it; std::set<ClientPtr>::iterator it;
for (it = _clients.begin(); it != _clients.end(); ++it) for (it = _clients.begin(); it != _clients.end(); ++it)
_io_service.post(boost::bind(&Client::SendMessage, (*it), msg)); _io_service.post(boost::bind(&Client::SendMessage, (*it), msg));
@ -23,6 +24,7 @@ namespace Stratum
void Server::SendBlockTmpl(bool resetWork) void Server::SendBlockTmpl(bool resetWork)
{ {
boost::lock_guard<boost::mutex> guard(_mtxClients);
std::set<ClientPtr>::iterator it; std::set<ClientPtr>::iterator it;
for (it = _clients.begin(); it != _clients.end(); ++it) for (it = _clients.begin(); it != _clients.end(); ++it)
_io_service.post(boost::bind(&Client::SendJob, (*it), resetWork)); _io_service.post(boost::bind(&Client::SendJob, (*it), resetWork));

18
src/server/poolserver/Stratum/Server.h

@ -71,6 +71,7 @@ namespace Stratum
// Returns new extranonce // Returns new extranonce
uint32 GetExtranonce() uint32 GetExtranonce()
{ {
boost::lock_guard<boost::mutex> guard(_mtxExtranonce);
return _extranonce++; return _extranonce++;
} }
@ -100,7 +101,10 @@ namespace Stratum
// Disconnects client // Disconnects client
void Disconnect(ClientPtr client) void Disconnect(ClientPtr client)
{ {
_mtxClients.lock();
_clients.erase(client); _clients.erase(client);
_mtxClients.unlock();
client->CloseSocket(); client->CloseSocket();
sLog.Info(LOG_STRATUM, "Stratum client disconnected from %s. Total clients: %u", asio::ip::address_v4(client->GetIP()).to_string().c_str(), _clients.size()); sLog.Info(LOG_STRATUM, "Stratum client disconnected from %s. Total clients: %u", asio::ip::address_v4(client->GetIP()).to_string().c_str(), _clients.size());
} }
@ -110,11 +114,15 @@ namespace Stratum
BanInfo ban; BanInfo ban;
ban.ip = ip; ban.ip = ip;
ban.timestamp = Util::Date() + time; ban.timestamp = Util::Date() + time;
_mtxBans.lock();
_bans.push_back(ban); _bans.push_back(ban);
_mtxBans.unlock();
} }
bool IsBanned(uint32 ip) bool IsBanned(uint32 ip)
{ {
boost::lock_guard<boost::mutex> guard(_mtxBans);
for (int i = 0; i < _bans.size(); ++i) { for (int i = 0; i < _bans.size(); ++i) {
if (_bans[i].ip == ip) { if (_bans[i].ip == ip) {
if (_bans[i].timestamp > Util::Date()) if (_bans[i].timestamp > Util::Date())
@ -137,7 +145,10 @@ namespace Stratum
{ {
if (!error) { if (!error) {
if (client->Start()) { if (client->Start()) {
_mtxClients.lock();
_clients.insert(client); _clients.insert(client);
_mtxClients.unlock();
sLog.Info(LOG_STRATUM, "New stratum client accepted from %s. Total clients: %u", asio::ip::address_v4(client->GetIP()).to_string().c_str(), _clients.size()); sLog.Info(LOG_STRATUM, "New stratum client accepted from %s. Total clients: %u", asio::ip::address_v4(client->GetIP()).to_string().c_str(), _clients.size());
} }
} else { } else {
@ -154,13 +165,18 @@ namespace Stratum
// Clients // Clients
std::set<ClientPtr, ClientPtrCMP> _clients; std::set<ClientPtr, ClientPtrCMP> _clients;
std::vector<BanInfo> _bans; boost::mutex _mtxClients;
uint64 _clientId; uint64 _clientId;
// Bands
std::vector<BanInfo> _bans;
boost::mutex _mtxBans;
// Work // Work
Bitcoin::BlockPtr _currentWork; Bitcoin::BlockPtr _currentWork;
boost::mutex _mtxCurrentWork; boost::mutex _mtxCurrentWork;
uint32 _extranonce; uint32 _extranonce;
boost::mutex _mtxExtranonce;
}; };
} }

Loading…
Cancel
Save