version 0.1.7
[fms.git] / src / nntp / nntpconnection.cpp
index 5ee9776..d7eaa70 100644 (file)
@@ -7,7 +7,10 @@
 #include "../../include/messagelist.h"\r
 #include "../../include/option.h"\r
 \r
-#include <zthread/Thread.h>\r
+#include <algorithm>\r
+\r
+//#include <zthread/Thread.h>\r
+#include "../../include/pthreadwrapper/thread.h"\r
 \r
 #ifdef XMEM\r
        #include <xmem.h>\r
@@ -24,9 +27,9 @@ NNTPConnection::NNTPConnection(SOCKET sock)
        m_status.m_allowpost=false;\r
        m_status.m_boardid=-1;\r
        m_status.m_messageid=-1;\r
-       m_status.m_mode=ClientMode::MODE_NONE;\r
+       m_status.m_mode=MODE_NONE;\r
 \r
-       Option::instance()->Get("NNTPAllowPost",tempval);\r
+       Option::Instance()->Get("NNTPAllowPost",tempval);\r
        if(tempval=="true")\r
        {\r
                m_status.m_allowpost=true;\r
@@ -230,7 +233,7 @@ const bool NNTPConnection::HandleLastCommand(const NNTPCommand &command)
                {\r
                        Message mess;\r
 \r
-                       if(mess.Load(m_status.m_messageid,m_status.m_boardid))\r
+                       if(mess.LoadPrevious(m_status.m_messageid,m_status.m_boardid))\r
                        {\r
                                std::ostringstream tempstr;\r
 \r
@@ -316,7 +319,7 @@ const bool NNTPConnection::HandleListCommand(const NNTPCommand &command)
 \r
                        if(show==true)\r
                        {\r
-                               tempstr << (*i).GetBoardName() << "\t" << (*i).GetHighMessageID() << "\t" << (*i).GetLowMessageID() << "\t" << (m_status.m_allowpost ? "y" : "n");\r
+                               tempstr << (*i).GetBoardName() << " " << (*i).GetHighMessageID() << " " << (*i).GetLowMessageID() << " " << (m_status.m_allowpost ? "y" : "n");\r
                                SendBufferedLine(tempstr.str());\r
                        }\r
                }\r
@@ -479,7 +482,7 @@ const bool NNTPConnection::HandleModeCommand(const NNTPCommand &command)
                StringFunctions::UpperCase(arg,arg);\r
                if(arg=="READER")\r
                {\r
-                       m_status.m_mode=ClientMode::MODE_READER;\r
+                       m_status.m_mode=MODE_READER;\r
                        if(m_status.m_allowpost==true)\r
                        {\r
                                SendBufferedLine("200 Posting allowed");\r
@@ -583,7 +586,7 @@ const bool NNTPConnection::HandleNextCommand(const NNTPCommand &command)
                {\r
                        Message mess;\r
 \r
-                       if(mess.Load(m_status.m_messageid,m_status.m_boardid))\r
+                       if(mess.LoadNext(m_status.m_messageid,m_status.m_boardid))\r
                        {\r
                                std::ostringstream tempstr;\r
 \r
@@ -633,6 +636,11 @@ const bool NNTPConnection::HandleOverCommand(const NNTPCommand &command)
                        messageuuid=command.m_arguments[0];\r
                        messageuuid=StringFunctions::Replace(messageuuid,"<","");\r
                        messageuuid=StringFunctions::Replace(messageuuid,">","");\r
+                       // get rid of @ and everything after\r
+                       if(messageuuid.find("@")!=std::string::npos)\r
+                       {\r
+                               messageuuid.erase(messageuuid.find("@"));\r
+                       }\r
                }\r
                // single article or range\r
                else\r
@@ -862,10 +870,10 @@ const bool NNTPConnection::HandleQuitCommand(const NNTPCommand &command)
        return true;\r
 }\r
 \r
-void NNTPConnection::run()\r
+void NNTPConnection::Run()\r
 {\r
        struct timeval tv;\r
-       FD_SET writefs,readfs;\r
+       fd_set writefs,readfs;\r
        int rval;\r
 \r
        // seed random number generater for this thread\r
@@ -908,18 +916,19 @@ void NNTPConnection::run()
                                SocketSend();\r
                        }\r
                }\r
-               else if(rval==-1)\r
+               else if(rval==SOCKET_ERROR)\r
                {\r
                        m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"NNTPConnection::run select returned -1 : "+GetSocketErrorMessage());   \r
                }\r
 \r
-       }while(!Disconnected() && !ZThread::Thread::interrupted());\r
-       \r
+//     }while(!Disconnected() && !ZThread::Thread::interrupted());\r
+       }while(!Disconnected() && !IsCancelled());\r
+\r
        Disconnect();\r
-       \r
+\r
 }\r
 \r
-void NNTPConnection::SendArticleOverInfo(const Message &message)\r
+void NNTPConnection::SendArticleOverInfo(Message &message)\r
 {\r
        std::string tempval;\r
        std::string line;\r
@@ -934,13 +943,13 @@ void NNTPConnection::SendArticleOverInfo(const Message &message)
        references=message.GetInReplyTo();\r
        if(references.size()>0)\r
        {\r
-               for(std::map<long,std::string>::const_reverse_iterator i=references.rbegin(); i!=references.rend(); i++)\r
+               for(std::map<long,std::string>::reverse_iterator i=references.rbegin(); i!=references.rend(); i++)\r
                {\r
                        if(i!=references.rbegin())\r
                        {\r
                                line+=" ";\r
                        }\r
-                       line+="<"+(*i).second+">";\r
+                       line+="<"+(*i).second+"@freenetproject.org>";\r
                }\r
                line+="\t";\r
        }\r
@@ -1163,9 +1172,11 @@ void NNTPConnection::SocketReceive()
        }\r
        else if(rval==-1)\r
        {\r
+               std::string errnostr;\r
+               StringFunctions::Convert(GetSocketErrorNumber(),errnostr);\r
                // error on receive - close the connection\r
                Disconnect();\r
-               m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"NNTPConnection::SocketReceive recv returned -1 : "+GetSocketErrorMessage());\r
+               m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"NNTPConnection::SocketReceive recv returned -1 : "+errnostr+" - "+GetSocketErrorMessage());\r
        }\r
 }\r
 \r
@@ -1180,7 +1191,9 @@ void NNTPConnection::SocketSend()
                }\r
                else if(rval==-1)\r
                {\r
-                       m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"NNTPConnection::SocketSend returned -1 : "+GetSocketErrorMessage());\r
+                       std::string errnostr;\r
+                       StringFunctions::Convert(GetSocketErrorNumber(),errnostr);\r
+                       m_log->WriteLog(LogFile::LOGLEVEL_ERROR,"NNTPConnection::SocketSend returned -1 : "+errnostr+" - "+GetSocketErrorMessage());\r
                }\r
        }\r
 }\r