1 #include "../../include/freenet/unkeyedidcreator.h"
\r
2 #include "../../include/stringfunctions.h"
\r
4 #include <Poco/Timestamp.h>
\r
12 UnkeyedIDCreator::UnkeyedIDCreator()
\r
17 UnkeyedIDCreator::UnkeyedIDCreator(FCPv2 *fcp):IFCPConnected(fcp)
\r
22 void UnkeyedIDCreator::FCPConnected()
\r
27 void UnkeyedIDCreator::FCPDisconnected()
\r
32 void UnkeyedIDCreator::CheckForUnkeyedID()
\r
34 SQLite3DB::Recordset rs=m_db->Query("SELECT LocalIdentityID FROM tblLocalIdentity WHERE PublicKey IS NULL OR PrivateKey IS NULL OR PublicKey='' OR PrivateKey='';");
\r
36 if(rs.Empty()==false)
\r
38 std::string idstring;
\r
39 StringFunctions::Convert(rs.GetInt(0),idstring);
\r
41 std::ostringstream idstr;
\r
42 long id=rs.GetInt(0);
\r
46 message.SetName("GenerateSSK");
\r
47 message["Identifier"]="UnkeyedIDRequest|"+idstr.str();
\r
48 m_fcp->SendMessage(message);
\r
54 // set last checked time to now
\r
55 m_lastchecked=Poco::Timestamp();
\r
59 const bool UnkeyedIDCreator::HandleMessage(FCPMessage &message)
\r
61 if(message["Identifier"].find("UnkeyedIDRequest")==0)
\r
64 if(message.GetName()=="SSKKeypair")
\r
68 std::vector<std::string> idparts;
\r
69 StringFunctions::Split(message["Identifier"],"|",idparts);
\r
71 if(idparts.size()>1)
\r
73 if(StringFunctions::Convert(idparts[1],id)==false)
\r
77 SaveKeys(id,message["RequestURI"],message["InsertURI"]);
\r
80 m_log->information("UnkeyedIDCreator::HandleMessage received keypair");
\r
92 void UnkeyedIDCreator::Initialize()
\r
95 m_lastchecked=Poco::Timestamp();
\r
98 void UnkeyedIDCreator::Process()
\r
100 Poco::DateTime now;
\r
102 // only perform check every minute (1/1440 of 1 day)
\r
103 if(m_waiting==false && m_lastchecked<(now-Poco::Timespan(0,0,1,0,0)))
\r
105 CheckForUnkeyedID();
\r
109 void UnkeyedIDCreator::RegisterWithThread(FreenetMasterThread *thread)
\r
111 thread->RegisterFCPConnected(this);
\r
112 thread->RegisterFCPMessageHandler(this);
\r
113 thread->RegisterPeriodicProcessor(this);
\r
116 void UnkeyedIDCreator::SaveKeys(const long localidentityid, const std::string &publickey, const std::string &privatekey)
\r
118 SQLite3DB::Statement st=m_db->Prepare("UPDATE tblLocalIdentity SET PublicKey=?, PrivateKey=? WHERE LocalIdentityID=?;");
\r
119 st.Bind(0,publickey);
\r
120 st.Bind(1,privatekey);
\r
121 st.Bind(2,localidentityid);
\r