}\r
else\r
{\r
- origmessagetrust=m_minlocalmessagetrust;\r
+ //origmessagetrust=m_minlocalmessagetrust;\r
+ origmessagetrust=50;\r
}\r
if(origmess.ResultNull(3)==false)\r
{\r
}\r
else\r
{\r
- origtrustlisttrust=m_minlocaltrustlisttrust;\r
+ //origtrustlisttrust=m_minlocaltrustlisttrust;\r
+ origtrustlisttrust=50;\r
}\r
\r
origmessagetrust+=changemessagetrust;\r
}\r
else\r
{\r
- localmessagetrust=m_minlocalmessagetrust;\r
+ //localmessagetrust=m_minlocalmessagetrust;\r
+ localmessagetrust=50;\r
}\r
\r
localmessagetrust+=m_changemessagetrustonreply;\r
m_fromname="";\r
m_boards.clear();\r
m_inreplyto.clear();\r
+ m_fileattachments.clear();\r
m_changemessagetrustonreply=0;\r
Option::Instance()->Get("ChangeMessageTrustOnReply",tempval);\r
StringFunctions::Convert(tempval,m_changemessagetrustonreply);\r
m_fromname=mime.GetFieldValue("From");\r
// remove any path folding\r
m_fromname=StringFunctions::Replace(m_fromname,"\r\n","");\r
+ m_fromname=StringFunctions::Replace(m_fromname,"\t","");\r
// strip off everything between () and <> and any whitespace\r
std::string::size_type startpos=m_fromname.find("(");\r
std::string::size_type endpos;\r
std::string temp=mime.GetFieldValue("Newsgroups");\r
// remove any path folding\r
temp=StringFunctions::Replace(temp,"\r\n","");\r
+ temp=StringFunctions::Replace(temp,"\t","");\r
std::vector<std::string> parts;\r
StringFunctions::SplitMultiple(temp,", \t",parts);\r
for(std::vector<std::string>::iterator i=parts.begin(); i!=parts.end(); i++)\r
m_replyboardname=mime.GetFieldValue("Followup-To");\r
// remove any path folding\r
m_replyboardname=StringFunctions::Replace(m_replyboardname,"\r\n","");\r
+ m_replyboardname=StringFunctions::Replace(m_replyboardname,"\t","");\r
}\r
else\r
{\r
m_subject=mime.GetFieldValue("Subject");\r
// remove any path folding\r
m_subject=StringFunctions::Replace(m_subject,"\r\n","");\r
+ m_subject=StringFunctions::Replace(m_subject,"\t","");\r
#if DO_CHARSET_CONVERSION\r
if(mime.GetFieldCharset("Subject"))\r
{\r
std::string temp=mime.GetFieldValue("References");\r
// remove any path folding\r
temp=StringFunctions::Replace(temp,"\r\n","");\r
+ temp=StringFunctions::Replace(temp,"\t","");\r
std::vector<std::string> parts;\r
int count=0;\r
StringFunctions::SplitMultiple(temp,", \t",parts);\r
#endif\r
m_body+=bodypart;\r
}\r
+ // add a binary file attachment\r
+ else if(((*i)->GetName()!="" || (*i)->GetFilename()!="") && (*i)->GetLength()>0 && (*i)->GetContent())\r
+ {\r
+ std::string filename="";\r
+ std::string contenttype="";\r
+ std::vector<unsigned char> data((*i)->GetContent(),(*i)->GetContent()+(*i)->GetContentLength());\r
+ if((*i)->GetContentType())\r
+ {\r
+ contenttype=(*i)->GetContentType();\r
+ // find first ; tab cr or lf and erase it and everything after it\r
+ std::string::size_type endpos=contenttype.find_first_of(";\t\r\n ");\r
+ if(endpos!=std::string::npos)\r
+ {\r
+ contenttype.erase(endpos);\r
+ }\r
+ }\r
+ filename=(*i)->GetFilename();\r
+ if(filename=="")\r
+ {\r
+ filename=(*i)->GetName();\r
+ }\r
+ m_fileattachments.push_back(fileattachment(filename,contenttype,data));\r
+ }\r
}\r
\r
return true;\r
MessageXML xml;\r
int localidentityid=-1;\r
\r
- xml.SetMessageID(m_messageuuid);\r
- xml.SetSubject(m_subject);\r
- xml.SetBody(m_body);\r
- xml.SetReplyBoard(m_replyboardname);\r
- xml.SetDate(m_datetime.Format("%Y-%m-%d"));\r
- xml.SetTime(m_datetime.Format("%H:%M:%S"));\r
- \r
StripAdministrationBoards();\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
+ if(m_boards.size()>0)\r
{\r
- return false;\r
- }\r
\r
- SQLite3DB::Statement st=m_db->Prepare("INSERT INTO tblMessageInserts(LocalIdentityID,MessageUUID,MessageXML) VALUES(?,?,?);");\r
- st.Bind(0,localidentityid);\r
- st.Bind(1,m_messageuuid);\r
- st.Bind(2,xml.GetXML());\r
- st.Step();\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
- HandleChangeTrust();\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.Add(0,min);\r
+ }\r
+ else if(max>min)\r
+ {\r
+ int delay=(rand()%(max-min))+min;\r
+ m_datetime.Add(0,delay);\r
+ }\r
+\r
+ }\r
+ st.Finalize();\r
+\r
+ // set date in xml file AFTER we set the delay\r
+ xml.SetDate(m_datetime.Format("%Y-%m-%d"));\r
+ xml.SetTime(m_datetime.Format("%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,m_datetime.Format("%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
+ }\r
\r
return true;\r
\r
st.Step();\r
if(st.RowReturned())\r
{\r
+ if(m_replyboardname==(*i))\r
+ {\r
+ m_replyboardname="";\r
+ }\r
i=m_boards.erase(i);\r
}\r
else\r
}\r
st.Reset();\r
}\r
+ if(m_replyboardname=="" && m_boards.begin()!=m_boards.end())\r
+ {\r
+ m_replyboardname=(*m_boards.begin());\r
+ }\r
}\r