1 #include "../../include/freenet/unkeyedidcreator.h"
\r
2 #include "../../include/stringfunctions.h"
\r
10 UnkeyedIDCreator::UnkeyedIDCreator()
\r
15 UnkeyedIDCreator::UnkeyedIDCreator(FCPv2 *fcp):IFCPConnected(fcp)
\r
20 void UnkeyedIDCreator::FCPConnected()
\r
25 void UnkeyedIDCreator::FCPDisconnected()
\r
30 void UnkeyedIDCreator::CheckForUnkeyedID()
\r
32 SQLite3DB::Recordset rs=m_db->Query("SELECT LocalIdentityID FROM tblLocalIdentity WHERE PublicKey IS NULL OR PrivateKey IS NULL OR PublicKey='' OR PrivateKey='';");
\r
34 if(rs.Empty()==false)
\r
36 std::string idstring;
\r
37 StringFunctions::Convert(rs.GetInt(0),idstring);
\r
39 std::ostringstream idstr;
\r
40 long id=rs.GetInt(0);
\r
44 message.SetName("GenerateSSK");
\r
45 message["Identifier"]="UnkeyedIDRequest|"+idstr.str();
\r
46 m_fcp->SendMessage(message);
\r
52 // set last checked time to now
\r
53 m_lastchecked.SetToGMTime();
\r
57 const bool UnkeyedIDCreator::HandleMessage(FCPMessage &message)
\r
59 if(message["Identifier"].find("UnkeyedIDRequest")==0)
\r
62 if(message.GetName()=="SSKKeypair")
\r
66 std::vector<std::string> idparts;
\r
67 StringFunctions::Split(message["Identifier"],"|",idparts);
\r
69 if(idparts.size()>1)
\r
71 if(StringFunctions::Convert(idparts[1],id)==false)
\r
75 SaveKeys(id,message["RequestURI"],message["InsertURI"]);
\r
78 m_log->WriteLog(LogFile::LOGLEVEL_INFO,"UnkeyedIDCreator::HandleMessage received keypair");
\r
90 void UnkeyedIDCreator::Initialize()
\r
93 m_lastchecked.SetToGMTime();
\r
96 void UnkeyedIDCreator::Process()
\r
101 // only perform check every minute (1/1440 of 1 day)
\r
102 if(m_waiting==false && m_lastchecked<(now-(1.0/1440.0)))
\r
104 CheckForUnkeyedID();
\r
108 void UnkeyedIDCreator::RegisterWithThread(FreenetMasterThread *thread)
\r
110 thread->RegisterFCPConnected(this);
\r
111 thread->RegisterFCPMessageHandler(this);
\r
112 thread->RegisterPeriodicProcessor(this);
\r
115 void UnkeyedIDCreator::SaveKeys(const long localidentityid, const std::string &publickey, const std::string &privatekey)
\r
117 SQLite3DB::Statement st=m_db->Prepare("UPDATE tblLocalIdentity SET PublicKey=?, PrivateKey=? WHERE LocalIdentityID=?;");
\r
118 st.Bind(0,publickey);
\r
119 st.Bind(1,privatekey);
\r
120 st.Bind(2,localidentityid);
\r