version 0.1.12
[fms.git] / src / freenet / messageinserter.cpp
index cc7cfd5..3d5af9a 100644 (file)
@@ -1,4 +1,5 @@
 #include "../../include/freenet/messageinserter.h"\r
+#include "../../include/freenet/messagexml.h"\r
 \r
 MessageInserter::MessageInserter()\r
 {\r
@@ -41,7 +42,7 @@ const bool MessageInserter::HandlePutFailed(FCPMessage &message)
        {\r
                SQLite3DB::Statement st=m_db->Prepare("INSERT INTO tblMessageInserts(LocalIdentityID,Day,InsertIndex,Inserted) VALUES(?,?,?,'true');");\r
                st.Bind(0,localidentityid);\r
-               st.Bind(1,idparts[5]);\r
+               st.Bind(1,idparts[6]);\r
                st.Bind(2,index);\r
                st.Step();\r
        }\r
@@ -53,6 +54,7 @@ const bool MessageInserter::HandlePutFailed(FCPMessage &message)
 \r
 const bool MessageInserter::HandlePutSuccessful(FCPMessage &message)\r
 {\r
+       MessageXML xml;\r
        DateTime date;\r
        int localidentityid;\r
        int index;\r
@@ -62,7 +64,7 @@ const bool MessageInserter::HandlePutSuccessful(FCPMessage &message)
        StringFunctions::Convert(idparts[2],localidentityid);\r
 \r
        SQLite3DB::Statement st=m_db->Prepare("UPDATE tblMessageInserts SET Day=?, InsertIndex=?, Inserted='true' WHERE MessageUUID=?;");\r
-       st.Bind(0,idparts[5]);\r
+       st.Bind(0,idparts[6]);\r
        st.Bind(1,index);\r
        st.Bind(2,idparts[1]);\r
        st.Step();\r
@@ -74,6 +76,24 @@ const bool MessageInserter::HandlePutSuccessful(FCPMessage &message)
        st.Bind(1,date.Format("%Y-%m-%d"));\r
        st.Step();\r
 \r
+       // update the messageuuid to the real messageuuid\r
+       st=m_db->Prepare("SELECT MessageXML FROM tblMessageInserts WHERE MessageUUID=?;");\r
+       st.Bind(0,idparts[1]);\r
+       st.Step();\r
+       if(st.RowReturned())\r
+       {\r
+               std::string xmldata="";\r
+               st.ResultText(0,xmldata);\r
+               xml.ParseXML(xmldata);\r
+               xml.SetMessageID(idparts[4]);\r
+\r
+               SQLite3DB::Statement st2=m_db->Prepare("UPDATE tblMessageInserts SET MessageUUID=?, MessageXML=? WHERE MessageUUID=?;");\r
+               st2.Bind(0,idparts[4]);\r
+               st2.Bind(1,xml.GetXML());\r
+               st2.Bind(2,idparts[1]);\r
+               st2.Step();\r
+       }\r
+\r
        RemoveFromInsertList(idparts[1]);\r
 \r
        m_log->WriteLog(LogFile::LOGLEVEL_DEBUG,"MessageInserter::HandlePutSuccessful successfully inserted message "+message["Identifier"]);\r
@@ -88,9 +108,10 @@ void MessageInserter::Initialize()
 \r
 void MessageInserter::StartInsert(const std::string &messageuuid)\r
 {\r
+       MessageXML xmlfile;\r
        DateTime now;\r
        now.SetToGMTime();\r
-       SQLite3DB::Statement st=m_db->Prepare("SELECT MessageXML,PrivateKey,tblLocalIdentity.LocalIdentityID FROM tblMessageInserts INNER JOIN tblLocalIdentity ON tblMessageInserts.LocalIdentityID=tblLocalIdentity.LocalIdentityID WHERE MessageUUID=?;");\r
+       SQLite3DB::Statement st=m_db->Prepare("SELECT MessageXML,PrivateKey,tblLocalIdentity.LocalIdentityID,PublicKey FROM tblMessageInserts INNER JOIN tblLocalIdentity ON tblMessageInserts.LocalIdentityID=tblLocalIdentity.LocalIdentityID WHERE MessageUUID=?;");\r
        st.Bind(0,messageuuid);\r
        st.Step();\r
 \r
@@ -101,6 +122,7 @@ void MessageInserter::StartInsert(const std::string &messageuuid)
                std::string xml;\r
                std::string xmlsizestr;\r
                std::string privatekey;\r
+               std::string publickey;\r
                FCPMessage message;\r
                std::string indexstr;\r
                int index=0;\r
@@ -108,7 +130,7 @@ void MessageInserter::StartInsert(const std::string &messageuuid)
                st.ResultText(0,xml);\r
                st.ResultText(1,privatekey);\r
                st.ResultInt(2,localidentityid);\r
-               StringFunctions::Convert(xml.size(),xmlsizestr);\r
+               st.ResultText(3,publickey);\r
                StringFunctions::Convert(localidentityid,idstr);\r
 \r
                st=m_db->Prepare("SELECT MAX(InsertIndex) FROM tblMessageInserts WHERE Day=? AND LocalIdentityID=?;");\r
@@ -123,9 +145,23 @@ void MessageInserter::StartInsert(const std::string &messageuuid)
                }\r
                StringFunctions::Convert(index,indexstr);\r
 \r
+               // recreate messageuuid in xml - UUID of message will not match entry in MessageInserts table until we successfully insert it\r
+               // see HandlePutSuccessful\r
+               xmlfile.ParseXML(xml);\r
+               // if we don't already have an @sskpart - add it\r
+               if(xmlfile.GetMessageID().find("@")==std::string::npos)\r
+               {\r
+                       // remove - and ~ from publickey part\r
+                       std::string publickeypart=StringFunctions::Replace(StringFunctions::Replace(publickey.substr(4,43),"-",""),"~","");\r
+                       xmlfile.SetMessageID(xmlfile.GetMessageID()+"@"+publickeypart);\r
+               }\r
+               xml=xmlfile.GetXML();\r
+\r
+               StringFunctions::Convert(xml.size(),xmlsizestr);\r
+\r
                message.SetName("ClientPut");\r
                message["URI"]=privatekey+m_messagebase+"|"+now.Format("%Y-%m-%d")+"|Message|"+indexstr+".xml";\r
-               message["Identifier"]=m_fcpuniquename+"|"+messageuuid+"|"+idstr+"|"+indexstr+"|"+message["URI"];\r
+               message["Identifier"]=m_fcpuniquename+"|"+messageuuid+"|"+idstr+"|"+indexstr+"|"+xmlfile.GetMessageID()+"|"+message["URI"];\r
                message["UploadFrom"]="direct";\r
                message["DataLength"]=xmlsizestr;\r
                m_fcp->SendMessage(message);\r