Browse Source

promoted posts implemented

miguelfreitas
Miguel Freitas 11 years ago
parent
commit
0df5c54166
  1. 14
      src/main.cpp
  2. 35
      src/twister.cpp
  3. 2
      src/twister.h

14
src/main.cpp

@ -12,6 +12,9 @@
#include "ui_interface.h" #include "ui_interface.h"
#include "checkqueue.h" #include "checkqueue.h"
#include "chainparams.h" #include "chainparams.h"
#include "twister.h"
#include <boost/algorithm/string/replace.hpp> #include <boost/algorithm/string/replace.hpp>
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp> #include <boost/filesystem/fstream.hpp>
@ -65,7 +68,7 @@ int64 nHPSTimerStart = 0;
// Settings // Settings
int64 nTransactionFee = 0; int64 nTransactionFee = 0;
string strSpamMessage = "spam message test [en]"; string strSpamMessage = "Promoted posts are needed to run the network infrastructure. If you want to help, start generating blocks and advertise. [en]";
string strSpamUser = "nobody"; // [MF] FIXME: authenticy check needed string strSpamUser = "nobody"; // [MF] FIXME: authenticy check needed
@ -1657,6 +1660,15 @@ bool ProcessBlock(CValidationState &state, CNode* pfrom, CBlock* pblock, CDiskBl
} }
printf("ProcessBlock: ACCEPTED\n"); printf("ProcessBlock: ACCEPTED\n");
if( pblock->vtx[0].IsSpamMessage() ) {
string msg = pblock->vtx[0].message.ExtractPushDataString(0);
string user = pblock->vtx[0].userName.ExtractPushDataString(0);
// [MF] FIXME: validate user properly
if( msg.length() <= 140 ) {
printf("ProcessBlock: msg='%s' user='%s'\n", msg.c_str(), user.c_str());
receivedSpamMessage(msg, user);
}
}
return true; return true;
} }

35
src/twister.cpp

@ -41,6 +41,9 @@ static map<sha1_hash, alert_manager*> m_dhtgetMap;
static map<std::string, bool> m_specialResources; static map<std::string, bool> m_specialResources;
static map<std::string, torrent_handle> m_userTorrent; static map<std::string, torrent_handle> m_userTorrent;
static std::set<std::string> m_following; static std::set<std::string> m_following;
static std::string preferredSpamLang = "[en]";
static std::string receivedSpamMsgStr;
static std::string receivedSpamUserStr;
sha1_hash dhtTargetHash(std::string const &username, std::string const &resource, std::string const &type) sha1_hash dhtTargetHash(std::string const &username, std::string const &resource, std::string const &type)
{ {
@ -715,6 +718,16 @@ int getBestHeight()
return nBestHeight; return nBestHeight;
} }
void receivedSpamMessage(std::string const &message, std::string const &user)
{
if( !receivedSpamMsgStr.length() ||
(preferredSpamLang.length() && message.find(preferredSpamLang) != string::npos) ) {
receivedSpamMsgStr = message;
receivedSpamUserStr = user;
}
}
Value dhtput(const Array& params, bool fHelp) Value dhtput(const Array& params, bool fHelp)
{ {
if (fHelp || params.size() < 5 || params.size() > 6) if (fHelp || params.size() < 5 || params.size() > 6)
@ -1020,6 +1033,28 @@ Value getposts(const Array& params, bool fHelp)
ret.push_back( entryToJson(rit->second) ); ret.push_back( entryToJson(rit->second) );
} }
if( receivedSpamMsgStr.length() ) {
// we must agree on an acceptable level here
if( rand() < (RAND_MAX/10) ) {
entry v;
entry &userpost = v["userpost"];
userpost["n"] = receivedSpamUserStr;
userpost["k"] = 1;
userpost["time"] = GetAdjustedTime();
userpost["height"] = getBestHeight();
userpost["msg"] = receivedSpamMsgStr;
unsigned char vchSig[65];
RAND_bytes(vchSig,sizeof(vchSig));
v["sig_userpost"] = std::string((const char *)vchSig, sizeof(vchSig));
ret.insert(ret.begin(),entryToJson(v));
}
receivedSpamMsgStr = "";
receivedSpamUserStr = "";
}
return ret; return ret;
} }

2
src/twister.h

@ -25,6 +25,8 @@ bool verifySignature(std::string const &strMessage, std::string const &strUserna
bool acceptSignedPost(char const *data, int data_size, std::string username, int seq, std::string &errmsg, boost::uint32_t *flags); bool acceptSignedPost(char const *data, int data_size, std::string username, int seq, std::string &errmsg, boost::uint32_t *flags);
bool validatePostNumberForUser(std::string const &username, int k); bool validatePostNumberForUser(std::string const &username, int k);
void receivedSpamMessage(std::string const &message, std::string const &user);
int getBestHeight(); int getBestHeight();
#endif // TWISTER_H #endif // TWISTER_H

Loading…
Cancel
Save