version 0.3.31
[fms.git] / src / freenet / messageinserter.cpp
index 0c03204..a378ee1 100644 (file)
@@ -5,12 +5,12 @@
 #include <Poco/DateTimeFormatter.h>\r
 #include <Poco/Timestamp.h>\r
 \r
-MessageInserter::MessageInserter()\r
+MessageInserter::MessageInserter(SQLite3DB::DB *db):IIndexInserter<std::string>(db)\r
 {\r
        Initialize();\r
 }\r
 \r
-MessageInserter::MessageInserter(FCPv2 *fcp):IIndexInserter<std::string>(fcp)\r
+MessageInserter::MessageInserter(SQLite3DB::DB *db, FCPv2::Connection *fcp):IIndexInserter<std::string>(db,fcp)\r
 {\r
        Initialize();\r
 }\r
@@ -46,31 +46,44 @@ void MessageInserter::CheckForNeededInsert()
        }\r
 }\r
 \r
-const bool MessageInserter::HandlePutFailed(FCPMessage &message)\r
+const bool MessageInserter::HandlePutFailed(FCPv2::Message &message)\r
 {\r
        int index;\r
        int localidentityid;\r
        std::vector<std::string> idparts;\r
-       StringFunctions::Split(message["Identifier"],"|",idparts);\r
-       StringFunctions::Convert(idparts[2],localidentityid);\r
-       StringFunctions::Convert(idparts[3],index);\r
 \r
-       // fatal put - or data exists - insert bogus index into database so we'll try to insert this message again\r
-       if(message["Fatal"]=="true" || message["Code"]=="9")\r
+       // do check to make sure this is the non-editioned SSK - we ignore failure/success for editioned SSK for now\r
+       if(message["Identifier"].find(".xml")!=std::string::npos)\r
        {\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[6]);\r
-               st.Bind(2,index);\r
-               st.Step();\r
-       }\r
 \r
-       RemoveFromInsertList(idparts[1]);\r
+               StringFunctions::Split(message["Identifier"],"|",idparts);\r
+               StringFunctions::Convert(idparts[2],localidentityid);\r
+               StringFunctions::Convert(idparts[3],index);\r
+\r
+               // fatal put - or data exists - insert bogus index into database so we'll try to insert this message again\r
+               if(message["Fatal"]=="true" || message["Code"]=="9")\r
+               {\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[6]);\r
+                       st.Bind(2,index);\r
+                       st.Step();\r
+               }\r
+\r
+               m_log->trace("MessageInserter::HandlePutFailed error code "+message["Code"]+" fatal="+message["Fatal"]);\r
+\r
+               RemoveFromInsertList(idparts[1]);\r
+\r
+       }\r
+       else\r
+       {\r
+               m_log->trace("MessageInserter::HandlePutFailed for editioned SSK error code "+message["Code"]+ " id "+message["Identifier"]);\r
+       }\r
 \r
        return true;\r
 }\r
 \r
-const bool MessageInserter::HandlePutSuccessful(FCPMessage &message)\r
+const bool MessageInserter::HandlePutSuccessful(FCPv2::Message &message)\r
 {\r
        MessageXML xml;\r
        Poco::DateTime date;\r
@@ -78,50 +91,60 @@ const bool MessageInserter::HandlePutSuccessful(FCPMessage &message)
        int index;\r
        std::vector<std::string> idparts;\r
 \r
-       StringFunctions::Split(message["Identifier"],"|",idparts);\r
-       StringFunctions::Convert(idparts[3],index);\r
-       StringFunctions::Convert(idparts[2],localidentityid);\r
+       // do check to make sure this is the non-editioned SSK - we ignore failure/success for editioned SSK for now\r
+       if(message["Identifier"].find(".xml")!=std::string::npos)\r
+       {\r
 \r
-       SQLite3DB::Statement st=m_db->Prepare("UPDATE tblMessageInserts SET Day=?, InsertIndex=?, Inserted='true' WHERE MessageUUID=?;");\r
-       st.Bind(0,idparts[6]);\r
-       st.Bind(1,index);\r
-       st.Bind(2,idparts[1]);\r
-       st.Step();\r
+               StringFunctions::Split(message["Identifier"],"|",idparts);\r
+               StringFunctions::Convert(idparts[3],index);\r
+               StringFunctions::Convert(idparts[2],localidentityid);\r
 \r
-       // insert record into temp table so MessageList will be inserted ASAP\r
-       date=Poco::Timestamp();\r
-       st=m_db->Prepare("INSERT INTO tmpMessageListInsert(LocalIdentityID,Date) VALUES(?,?);");\r
-       st.Bind(0,localidentityid);\r
-       st.Bind(1,Poco::DateTimeFormatter::format(date,"%Y-%m-%d"));\r
-       st.Step();\r
+               SQLite3DB::Statement st=m_db->Prepare("UPDATE tblMessageInserts SET Day=?, InsertIndex=?, Inserted='true' WHERE MessageUUID=?;");\r
+               st.Bind(0,idparts[6]);\r
+               st.Bind(1,index);\r
+               st.Bind(2,idparts[1]);\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
-               //update file insert MessageUUID as well\r
-               st2=m_db->Prepare("UPDATE tblFileInserts SET MessageUUID=? WHERE MessageUUID=?;");\r
-               st2.Bind(0,idparts[4]);\r
-               st2.Bind(1,idparts[1]);\r
-               st2.Step();\r
-       }\r
+               // insert record into temp table so MessageList will be inserted ASAP\r
+               date=Poco::Timestamp();\r
+               st=m_db->Prepare("INSERT INTO tmpMessageListInsert(LocalIdentityID,Date) VALUES(?,?);");\r
+               st.Bind(0,localidentityid);\r
+               st.Bind(1,Poco::DateTimeFormatter::format(date,"%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
+                       //update file insert MessageUUID as well\r
+                       st2=m_db->Prepare("UPDATE tblFileInserts SET MessageUUID=? WHERE MessageUUID=?;");\r
+                       st2.Bind(0,idparts[4]);\r
+                       st2.Bind(1,idparts[1]);\r
+                       st2.Step();\r
+               }\r
+\r
+               RemoveFromInsertList(idparts[1]);\r
 \r
-       RemoveFromInsertList(idparts[1]);\r
+               m_log->debug("MessageInserter::HandlePutSuccessful successfully inserted message "+message["Identifier"]);\r
 \r
-       m_log->debug("MessageInserter::HandlePutSuccessful successfully inserted message "+message["Identifier"]);\r
+       }\r
+       else\r
+       {\r
+               m_log->debug("MessageInserter::HandlePutSuccessful for editioned SSK "+message["Identifier"]);\r
+       }\r
 \r
        return true;\r
 }\r
@@ -147,7 +170,7 @@ const bool MessageInserter::StartInsert(const std::string &messageuuid)
                std::string xmlsizestr;\r
                std::string privatekey;\r
                std::string publickey;\r
-               FCPMessage message;\r
+               FCPv2::Message message;\r
                std::string indexstr;\r
                int index=0;\r
                \r
@@ -206,8 +229,18 @@ const bool MessageInserter::StartInsert(const std::string &messageuuid)
                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
-               m_fcp->SendRaw(xml.c_str(),xml.size());\r
+               m_fcp->Send(message);\r
+               m_fcp->Send(std::vector<char>(xml.begin(),xml.end()));\r
+\r
+               // test insert as editioned SSK\r
+               message.Clear();\r
+               message.SetName("ClientPut");\r
+               message["URI"]=privatekey+m_messagebase+"|"+Poco::DateTimeFormatter::format(now,"%Y-%m-%d")+"|Message|-"+indexstr;\r
+               message["Identifier"]=m_fcpuniquename+"|"+message["URI"];\r
+               message["UploadFrom"]="direct";\r
+               message["DataLength"]=xmlsizestr;\r
+               m_fcp->Send(message);\r
+               m_fcp->Send(std::vector<char>(xml.begin(),xml.end()));\r
 \r
                m_inserting.push_back(messageuuid);\r
 \r