ddc
CHost.h
Go to the documentation of this file.
1 //-*- Mode: C++ -*-
2 //
3 // DDC originally by Alexey Sokirko
4 // Changes and modifications 2011-2020 by Bryan Jurish
5 //
6 // This file is part of DDC (fomerly defined in string_socket.h)
7 //
8 // DDC is free software: you can redistribute it and/or modify
9 // it under the terms of the GNU Lesser General Public License as published by
10 // the Free Software Foundation, either version 3 of the License, or
11 // (at your option) any later version.
12 //
13 // DDC is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 // GNU Lesser General Public License for more details.
17 //
18 // You should have received a copy of the GNU Lesser General Public License
19 // along with DDC. If not, see <http://www.gnu.org/licenses/>.
20 //
21 #ifndef _DDC_CHOST_H
22 #define _DDC_CHOST_H
23 
24 #include "utilit.h"
25 #include "string_socket.h"
26 
27 //======================================================================
31 class CHost
32 {
33  bool m_bListen;
35 
36 protected:
39  bool m_bRespond;
40  bool m_bLogFinish;
41  string m_LocalPath;
42  uint32_t m_maxReceiveBytes;
44 
45  int CreateSocket(bool bBind, string& strError) const;
46  bool CheckValidAddr() const;
47  void StopListening ();
48 public:
49  string m_CorpusName;
50  string m_ShortName;
51 
52  CHost();
53  virtual ~CHost();
54  bool ReadFromString (string S);
55 
57  virtual void CreateListener();
58  void CopyAddressParametersFrom(const CHost& X);
59  bool CloseListenSocket(int timeout=0);
60 
62  virtual void RunThread();
63 
64  int CreateAndConnectSocket(string& strError) const;
65  string GetAddressStr() const;
66  const string& GetLocalPathOfIndex() const;
67 
68  inline const CSocketAddr& SocketAddr() const { return m_SockAddr; };
69  inline const string& HostAddr() const { return m_SockAddr.m_Addr; };
70  inline const int Port() const { return m_SockAddr.m_Port; };
71 
72 
73 
75  bool InitEmbedded(const CHost&);
76 
78  void InitShortName();
79 
80  bool IsListening () const {return m_bListen; };
81 
82 public:
89  bool GetRequest (SOCKET& rConnectedSocket, int TimeOut, string &Request);
90 
96  void SendResponse (SOCKET& rConnectedSocket, const string& Result);
97 
99  void HandleSocketError(SOCKET& rConnectedSocket, const string& ErrorStr="ERROR", const string& Where="CHost::HandleSocketError()");
100 
106  void HandleClientRequest(SOCKET& rConnectedSocket, int TimeOut);
107 
113  virtual void HandleClientConnection(SOCKET& rConnectedSocket);
114 
115 public:
120  virtual bool Close(SOCKET& rConnectedSocket, bool linger=false, int timeout=5);
121 
123  virtual string ProcessSocketString(const string& S, SOCKET& rConnectedSocket);
124 
130  virtual void ClientError(int code=-1, const string& msg="");
131  virtual void ClientError(int code, const string& msg, SOCKET& clientSocket);
132 
133 };
134 
135 //======================================================================
136 // load a DDC server config file
137 extern bool LoadHosts (string Path, vector<CHost>& Hosts);
138 
139 
140 #endif /* DDC_CHOST_H */
141 
142 /*--- emacs style variables ---
143  * Local Variables:
144  * mode: C++
145  * c-file-style: "ellemtel"
146  * c-basic-offset: 4
147  * tab-width: 8
148  * indent-tabs-mode: nil
149  * End:
150  */
virtual string ProcessSocketString(const string &S, int &rConnectedSocket)
Definition: CHost.cpp:239
bool m_bRespond
moo: whether current request has a real (possibly empty) response
Definition: CHost.h:39
bool IsListening() const
Definition: CHost.h:80
#define SOCKET
Definition: string_socket.h:66
mode_t m_UnixSocketPerms
permissions mask for unix socket (defualt=0: OS-default = 0777&~umask())
Definition: CHost.h:43
bool CloseListenSocket(int timeout=0)
Definition: CHost.cpp:211
virtual void CreateListener()
Definition: CHost.cpp:373
string m_LocalPath
path to local project-file (ddc_local_corpora.cfg) or label of parent branch node (ddc_server...
Definition: CHost.h:41
void CopyAddressParametersFrom(const CHost &X)
Definition: CHost.cpp:405
Definition: string_socket.h:81
bool m_bListen
Definition: CHost.h:33
virtual void HandleClientConnection(int &rConnectedSocket)
Definition: CHost.cpp:185
CSocketAddr m_SockAddr
socket address (tcp or UNIX); formerly m_HostAddr, m_Port, m_SocketPath
Definition: CHost.h:37
string m_CorpusName
full node label, including optional "server:" prefix
Definition: CHost.h:49
bool m_bExpectMore
moo: whether to expect more requests from current client
Definition: CHost.h:38
bool LoadHosts(string Path, vector< CHost > &Hosts)
Definition: CHost.cpp:418
const string & HostAddr() const
Definition: CHost.h:69
void HandleSocketError(int &rConnectedSocket, const string &ErrorStr="ERROR", const string &Where="CHost::HandleSocketError()")
Definition: CHost.cpp:164
virtual ~CHost()
Definition: CHost.cpp:44
bool GetRequest(int &rConnectedSocket, int TimeOut, string &Request)
Definition: CHost.cpp:115
void StopListening()
Definition: CHost.cpp:205
const CSocketAddr & SocketAddr() const
Definition: CHost.h:68
bool ReadFromString(string S)
Definition: CHost.cpp:58
generic socket host wrapper class irritatingly also used for client connections
Definition: CHost.h:31
void InitShortName()
Definition: CHost.cpp:395
virtual void RunThread()
Definition: CHost.cpp:276
int m_ListenSocket
Definition: CHost.h:34
bool InitEmbedded(const CHost &)
Definition: CHost.cpp:86
int CreateAndConnectSocket(string &strError) const
Definition: CHost.cpp:109
bool CheckValidAddr() const
Definition: CHost.cpp:52
void HandleClientRequest(int &rConnectedSocket, int TimeOut)
Definition: CHost.cpp:174
bool m_bLogFinish
moo: whether to log connection completion
Definition: CHost.h:40
uint32_t m_maxReceiveBytes
maximum receivable packet length (default=0: no limit)
Definition: CHost.h:42
const int Port() const
Definition: CHost.h:70
const string & GetLocalPathOfIndex() const
Definition: CHost.cpp:389
int CreateSocket(bool bBind, string &strError) const
Definition: CHost.cpp:96
virtual bool Close(int &rConnectedSocket, bool linger=false, int timeout=5)
Definition: CHost.cpp:270
virtual void ClientError(int code=-1, const string &msg="")
Definition: CHost.cpp:251
int m_Port
unix:filler, tcp:port number
Definition: string_socket.h:85
CHost()
Definition: CHost.cpp:31
string m_ShortName
short node label, without optional "server:" prefix
Definition: CHost.h:50
void SendResponse(int &rConnectedSocket, const string &Result)
Definition: CHost.cpp:140
string m_Addr
unix:filesystem path, tcp:host address
Definition: string_socket.h:84
string GetAddressStr() const
Definition: CHost.cpp:383