+\r
+ xml.SetMessageID(m_messageuuid);\r
+ xml.SetSubject(m_subject);\r
+ xml.SetBody(m_body);\r
+ xml.SetReplyBoard(m_replyboardname);\r
+ \r
+ for(std::vector<std::string>::iterator i=m_boards.begin(); i!=m_boards.end(); i++)\r
+ {\r
+ xml.AddBoard((*i));\r
+ }\r
+ \r
+ for(std::map<long,std::string>::iterator j=m_inreplyto.begin(); j!=m_inreplyto.end(); j++)\r
+ {\r
+ xml.AddInReplyTo((*j).first,(*j).second);\r
+ }\r
+\r
+ localidentityid=FindLocalIdentityID(m_fromname);\r
+ if(localidentityid==-1)\r
+ {\r
+ return false;\r
+ }\r
+\r
+ // add the message delay if there is one\r
+ SQLite3DB::Statement st=m_db->Prepare("SELECT MinMessageDelay,MaxMessageDelay FROM tblLocalIdentity WHERE LocalIdentityID=?;");\r
+ st.Bind(0,localidentityid);\r
+ st.Step();\r
+ if(st.RowReturned())\r
+ {\r
+ int min=0;\r
+ int max=0;\r
+ st.ResultInt(0,min);\r
+ st.ResultInt(1,max);\r
+\r
+ min<0 ? min=0 : false;\r
+ max<0 ? max=0 : false;\r
+ min>max ? min=max : false;\r
+\r
+ if(min==max)\r
+ {\r
+ m_datetime+=Poco::Timespan(0,0,min,0,0);\r
+ }\r
+ else if(max>min)\r
+ {\r
+ int delay=(rand()%(max-min))+min;\r
+ m_datetime+=Poco::Timespan(0,0,delay,0,0);\r
+ }\r
+\r
+ }\r
+ st.Finalize();\r
+\r
+ // set date in xml file AFTER we set the delay\r
+ xml.SetDate(Poco::DateTimeFormatter::format(m_datetime,"%Y-%m-%d"));\r
+ xml.SetTime(Poco::DateTimeFormatter::format(m_datetime,"%H:%M:%S"));\r
+\r
+ st=m_db->Prepare("INSERT INTO tblMessageInserts(LocalIdentityID,MessageUUID,MessageXML,SendDate) VALUES(?,?,?,?);");\r
+ st.Bind(0,localidentityid);\r
+ st.Bind(1,m_messageuuid);\r
+ st.Bind(2,xml.GetXML());\r
+ st.Bind(3,Poco::DateTimeFormatter::format(m_datetime,"%Y-%m-%d %H:%M:%S"));\r
+ st.Step();\r
+\r
+ // insert file attachments into database\r
+ st=m_db->Prepare("INSERT INTO tblFileInserts(MessageUUID,FileName,Size,MimeType,Data) VALUES(?,?,?,?,?);");\r
+ for(std::vector<fileattachment>::iterator i=m_fileattachments.begin(); i!=m_fileattachments.end(); i++)\r
+ {\r
+ st.Bind(0,m_messageuuid);\r
+ st.Bind(1,(*i).m_filename);\r
+ st.Bind(2,(long)(*i).m_data.size());\r
+ st.Bind(3,(*i).m_mimetype);\r
+ st.Bind(4,&((*i).m_data[0]),(*i).m_data.size());\r
+ st.Step();\r
+ st.Reset();\r
+ }\r
+\r
+ HandleChangeTrust();\r
+\r