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,StringFunctions::UriDecode(message["URI"]));
\r
59 st.Bind(1,fileinsertid);
\r
62 RemoveFromInsertList(fileinsertid);
\r
67 void FileInserter::Initialize()
\r
69 m_fcpuniquename="FileInserter";
\r
72 const bool FileInserter::StartInsert(const long &fileinsertid)
\r
75 std::string fileinsertidstr="";
\r
76 std::string sizestr="";
\r
77 std::string filename="";
\r
78 std::string mimetype="";
\r
80 std::vector<char> data;
\r
82 StringFunctions::Convert(fileinsertid,fileinsertidstr);
\r
85 SQLite3DB::Statement st=m_db->Prepare("SELECT FileName,Size,Data,MimeType FROM tblFileInserts WHERE FileInsertID=?;");
\r
86 st.Bind(0,fileinsertid);
\r
89 st.ResultText(0,filename);
\r
90 st.ResultInt(1,datalen);
\r
91 data.resize(datalen,0);
\r
92 st.ResultBlob(2,&data[0],datalen);
\r
93 data.resize(datalen);
\r
94 st.ResultText(3,mimetype);
\r
96 StringFunctions::Convert(data.size(),sizestr);
\r
98 message.SetName("ClientPut");
\r
99 message["URI"]="CHK@";
\r
100 message["TargetFilename"]=filename;
\r
103 message["Metadata.ContentType"]=mimetype;
\r
105 message["Identifier"]=m_fcpuniquename+"|"+fileinsertidstr;
\r
106 message["UploadFrom"]="direct";
\r
107 message["DataLength"]=sizestr;
\r
108 m_fcp->SendMessage(message);
\r
109 m_fcp->SendRaw(&data[0],data.size());
\r
111 m_inserting.push_back(fileinsertid);
\r