1 #include "../../include/freenet/fileinserter.h"
\r
7 FileInserter::FileInserter()
\r
12 FileInserter::FileInserter(FCPv2 *fcp):IIndexInserter<long>(fcp)
\r
17 void FileInserter::CheckForNeededInsert()
\r
19 // only do 1 insert at a time
\r
20 if(m_inserting.size()==0)
\r
22 SQLite3DB::Statement st=m_db->Prepare("SELECT FileInsertID FROM tblFileInserts WHERE Key IS NULL;");
\r
24 if(st.RowReturned())
\r
33 const bool FileInserter::HandlePutFailed(FCPMessage &message)
\r
35 std::vector<std::string> idparts;
\r
38 StringFunctions::Split(message["Identifier"],"|",idparts);
\r
39 StringFunctions::Convert(idparts[1],fileinsertid);
\r
41 RemoveFromInsertList(fileinsertid);
\r
43 m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"FileInserter::HandlePutFailed failed to insert "+message["Identifier"]);
\r
49 const bool FileInserter::HandlePutSuccessful(FCPMessage &message)
\r
51 std::vector<std::string> idparts;
\r
54 StringFunctions::Split(message["Identifier"],"|",idparts);
\r
55 StringFunctions::Convert(idparts[1],fileinsertid);
\r
57 SQLite3DB::Statement st=m_db->Prepare("UPDATE tblFileInserts SET Key=?, Data=NULL WHERE FileInsertID=?;");
\r
58 st.Bind(0,message["URI"]);
\r
59 st.Bind(1,fileinsertid);
\r
62 RemoveFromInsertList(fileinsertid);
\r
67 void FileInserter::Initialize()
\r
69 m_fcpuniquename="FileInserter";
\r
72 void FileInserter::StartInsert(const long &fileinsertid)
\r
75 std::string fileinsertidstr="";
\r
76 std::string sizestr="";
\r
77 std::string filename="";
\r
79 std::vector<char> data;
\r
81 StringFunctions::Convert(fileinsertid,fileinsertidstr);
\r
84 SQLite3DB::Statement st=m_db->Prepare("SELECT FileName,Size,Data FROM tblFileInserts WHERE FileInsertID=?;");
\r
85 st.Bind(0,fileinsertid);
\r
88 st.ResultText(0,filename);
\r
89 st.ResultInt(1,datalen);
\r
90 data.resize(datalen,0);
\r
91 st.ResultBlob(2,&data[0],datalen);
\r
92 data.resize(datalen);
\r
94 StringFunctions::Convert(data.size(),sizestr);
\r
96 message.SetName("ClientPut");
\r
97 message["URI"]="CHK@";
\r
98 message["TargetFilename"]=filename;
\r
99 message["Identifier"]=m_fcpuniquename+"|"+fileinsertidstr;
\r
100 message["UploadFrom"]="direct";
\r
101 message["DataLength"]=sizestr;
\r
102 m_fcp->SendMessage(message);
\r
103 m_fcp->SendRaw(&data[0],data.size());
\r
105 m_inserting.push_back(fileinsertid);
\r