summaryrefslogtreecommitdiffstats
path: root/debian/htdig/htdig-3.2.0b6/htnet/Connection.h
diff options
context:
space:
mode:
Diffstat (limited to 'debian/htdig/htdig-3.2.0b6/htnet/Connection.h')
-rw-r--r--debian/htdig/htdig-3.2.0b6/htnet/Connection.h146
1 files changed, 146 insertions, 0 deletions
diff --git a/debian/htdig/htdig-3.2.0b6/htnet/Connection.h b/debian/htdig/htdig-3.2.0b6/htnet/Connection.h
new file mode 100644
index 00000000..6a352230
--- /dev/null
+++ b/debian/htdig/htdig-3.2.0b6/htnet/Connection.h
@@ -0,0 +1,146 @@
+//
+// Connection.h
+//
+// Connection: This class forms a easy to use interface to the berkeley
+// tcp socket library. All the calls are basically the same,
+// but the parameters do not have any stray _addr or _in
+// mixed in...
+//
+// Part of the ht://Dig package <http://www.htdig.org/>
+// Copyright (c) 1995-2004 The ht://Dig Group
+// For copyright details, see the file COPYING in your distribution
+// or the GNU Library General Public License (LGPL) version 2 or later
+// <http://www.gnu.org/copyleft/lgpl.html>
+//
+// $Id: Connection.h,v 1.10 2004/05/28 13:15:22 lha Exp $
+//
+
+#ifndef _Connection_h_
+#define _Connection_h_
+
+#include "Object.h"
+#include "htString.h"
+
+#include <stdlib.h>
+#include <sys/types.h>
+
+#ifdef _MSC_VER /* _WIN32 */
+#include <winsock.h>
+#else
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#endif
+
+class Connection : public Object
+{
+public:
+ // Constructors & Destructors
+ Connection(int socket = -1); // Default constructor
+ Connection(const Connection& rhs); // Copy constructor
+ ~Connection();
+
+ // (De)initialization
+ int Win32Socket_Init(void);
+ int Open(int priv = 0);
+ virtual int Close();
+ int Ndelay();
+ int Nondelay();
+ int Timeout(int value);
+ int Retries(int value);
+ int WaitTime(unsigned int _wt);
+
+ // Port stuff
+ int Assign_Port(int port = 0);
+ int Assign_Port(const String& service);
+ int Get_Port();
+ inline int Is_Privileged();
+
+ // Host stuff
+ int Assign_Server(const String& name);
+ int Assign_Server(unsigned int addr = INADDR_ANY);
+ const String &Get_Server() const { return server_name; }
+ const String &Get_Server_IPAddress() const { return server_ip_address; }
+
+ // Connection establishment
+ virtual int Connect();
+ Connection *Accept(int priv = 0);
+ Connection *Accept_Privileged();
+
+ // Registration things
+ int Bind();
+ int Listen(int n = 5);
+
+ // IO
+ String* Read_Line(String &, char *terminator = (char *)"\n");
+ char* Read_Line(char *buffer, int maxlength, char *terminator=(char *)"\n");
+ String* Read_Line(char *terminator = (char *)"\n");
+ virtual int Read_Char();
+ int Write_Line(char *buffer, char *eol = (char *)"\n");
+
+ int Write(char *buffer, int maxlength = -1);
+ int Read(char *buffer, int maxlength);
+
+ virtual int Read_Partial(char *buffer, int maxlength);
+ virtual int Write_Partial(char *buffer, int maxlength);
+ void Stop_IO() {need_io_stop = 1;}
+
+ // Access to socket number
+ char *Socket_as_String();
+ int Get_Socket() { return sock; }
+ int IsOpen() { return sock >= 0; }
+ int IsConnected() { return connected; }
+
+ // Access to info about remote socket
+ const char* Get_PeerIP() const;
+ const char* Get_Peername();
+
+ // A method to re-initialize the buffer
+ virtual void Flush();
+
+private:
+ //
+ // For buffered IO we will need a buffer
+ //
+ enum {BUFFER_SIZE = 8192};
+ char buffer[BUFFER_SIZE];
+ int pos, pos_max;
+ // Assignment operator declared private for preventing any use
+ Connection& operator+ (const Connection& rhs) { return *this; }
+
+protected:
+ int sock;
+ struct sockaddr_in server;
+ int connected;
+ String peer;
+ String server_name;
+ String server_ip_address;
+ int need_io_stop;
+ int timeout_value;
+ int retry_value;
+ unsigned int wait_time; // time to wait after an
+ // unsuccessful connection
+};
+
+
+//*************************************************************************
+// inline int Connection::Is_Privileged()
+// PURPOSE:
+// Return whether the port is priveleged or not.
+//
+inline int Connection::Is_Privileged()
+{
+ return server.sin_port < 1023;
+}
+
+
+//
+// Get arround the lack of gethostip() library call... There is a gethostname()
+// call but we want the IP address, not the name!
+// The call will put the ASCII string representing the IP address in the supplied
+// buffer and it will also return the 4 byte unsigned long equivalent of it.
+// The ip buffer can be null...
+//
+unsigned int gethostip(char *ip = 0, int length = 0);
+
+#endif