#include "../../include/nntp/nntplistener.h"\r
#include "../../include/nntp/nntpconnection.h"\r
#include "../../include/option.h"\r
-#include "../../include/logfile.h"\r
#include "../../include/global.h"\r
#include "../../include/stringfunctions.h"\r
\r
+#include <Poco/Net/SocketAddress.h>\r
+\r
+#include <cstring>\r
+\r
#ifdef _WIN32\r
#include <winsock2.h>\r
#include <ws2tcpip.h>\r
\r
}\r
\r
-void NNTPListener::Run()\r
+void NNTPListener::run()\r
{\r
int rval;\r
fd_set readfs;\r
std::vector<SOCKET>::iterator listeni;\r
SOCKET highsocket;\r
\r
- LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"NNTPListener::run thread started.");\r
+ m_log->debug("NNTPListener::run thread started.");\r
\r
StartListen();\r
\r
struct sockaddr_storage addr;\r
socklen_t addrlen=sizeof(addr);\r
newsock=accept((*listeni),(struct sockaddr *)&addr,&addrlen);\r
- LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_INFO,"NNTPListener::run NNTP client connected");\r
- //m_connections.execute(new NNTPConnection(newsock));\r
- //m_connectionthreads.push_back(new PThread::Thread(new NNTPConnection(newsock)));\r
- m_connections.Execute(new NNTPConnection(newsock));\r
+ m_log->information("NNTPListener::run NNTP client connected");\r
+ m_connections.Start(new NNTPConnection(newsock));\r
}\r
}\r
}\r
-/*\r
- // check for any non-running connection threads that we can delete\r
- for(std::vector<PThread::Thread *>::iterator i=m_connectionthreads.begin(); i!=m_connectionthreads.end(); )\r
- {\r
- if((*i)->IsRunning()==false)\r
- {\r
- delete (*i);\r
- i=m_connectionthreads.erase(i);\r
- }\r
- if(i!=m_connectionthreads.end())\r
- {\r
- i++;\r
- }\r
- }\r
-*/\r
\r
- //}while(!ZThread::Thread::interrupted() && m_listensockets.size()>0);\r
}while(!IsCancelled() && m_listensockets.size()>0);\r
\r
- // see if any threads are still running - just calling interrupt without check would cause assert in debug mode\r
- /*\r
- if(m_connections.wait(1)==false)\r
- {\r
- LogFile::instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"NNTPListener::run interrupting connection threads and waiting 60 seconds for exit.");\r
- try\r
- {\r
- m_connections.interrupt();\r
- }\r
- catch(...)\r
- {\r
- LogFile::instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"NNTPListener::run caught unhandled exception.");\r
- }\r
- if(m_connections.wait(60000)==false)\r
- {\r
- LogFile::instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"NNTPListener::run connection threads did not exit after 60 seconds.");\r
- }\r
- }\r
- */\r
- /*\r
- for(std::vector<PThread::Thread *>::iterator i=m_connectionthreads.begin(); i!=m_connectionthreads.end(); i++)\r
- {\r
- if((*i)->IsRunning())\r
- {\r
- LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"NNTPListener::Run waiting for connection thread to exit.");\r
- (*i)->Cancel();\r
- (*i)->Join();\r
- }\r
- delete (*i);\r
- }\r
- */\r
m_connections.Cancel();\r
m_connections.Join();\r
\r
}\r
m_listensockets.clear();\r
\r
- LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_DEBUG,"NNTPListener::run thread exiting.");\r
+ m_log->debug("NNTPListener::run thread exiting.");\r
\r
}\r
\r
{\r
for(current=result; current!=NULL; current=current->ai_next)\r
{\r
+ Poco::Net::SocketAddress sa(current->ai_addr,current->ai_addrlen);\r
+ m_log->debug("NNTPListener::StartListen trying to create socket, bind, and listen on "+sa.toString());\r
+\r
sock=socket(current->ai_family,current->ai_socktype,current->ai_protocol);\r
if(sock!=INVALID_SOCKET)\r
{\r
#ifndef _WIN32\r
const char optval='1';\r
- setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&optval,1);\r
+ setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&optval,sizeof(optval));\r
#endif\r
if(bind(sock,current->ai_addr,current->ai_addrlen)==0)\r
{\r
if(listen(sock,10)==0)\r
{\r
- LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_INFO,"NNTPListener::StartListen started listening at "+(*i)+":"+nntpport);\r
+ m_log->information("NNTPListener::StartListen started listening on "+sa.toString());\r
m_listensockets.push_back(sock);\r
}\r
else\r
{\r
- LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_ERROR,"NNTPListener::StartListen socket listen failed");\r
+ m_log->error("NNTPListener::StartListen socket listen failed");\r
#ifdef _WIN32\r
closesocket(sock);\r
#else\r
}\r
else\r
{\r
- LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_ERROR,"NNTPListener::StartListen socket bind failed");\r
+ m_log->error("NNTPListener::StartListen socket bind failed");\r
#ifdef _WIN32\r
closesocket(sock);\r
#else\r
}\r
else\r
{\r
- LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_ERROR,"NNTPListener::StartListen couldn't create socket");\r
+ m_log->error("NNTPListener::StartListen couldn't create socket");\r
}\r
}\r
}\r
}\r
if(m_listensockets.size()==0)\r
{\r
- LogFile::Instance()->WriteLog(LogFile::LOGLEVEL_FATAL,"NNTPListener::StartListen couldn't start listening on any sockets");\r
+ m_log->fatal("NNTPListener::StartListen couldn't start listening on any sockets");\r
}\r
}\r