]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - include/socket.h
Started removal of server linking code from core and implementation of socket API
[user/henk/code/inspircd.git] / include / socket.h
1 /*       +------------------------------------+
2  *       | Inspire Internet Relay Chat Daemon |
3  *       +------------------------------------+
4  *
5  *  Inspire is copyright (C) 2002-2004 ChatSpike-Dev.
6  *                       E-mail:
7  *                <brain@chatspike.net>
8  *                <Craig@chatspike.net>
9  *     
10  * Written by Craig Edwards, Craig McLure, and others.
11  * This program is free but copyrighted software; see
12  *            the file COPYING for details.
13  *
14  * ---------------------------------------------------
15  */
16
17 #include <sys/types.h>
18 #include <sys/socket.h>
19 #include <netinet/in.h>
20 #include <sstream>
21 #include <string>
22
23 enum InspSocketState { I_DISCONNECTED, I_CONNECTING, I_CONNECTED, I_LISTENING, I_ERROR };
24 enum InspSocketError { I_ERR_TIMEOUT, I_ERR_SOCKET, I_ERR_CONNECT };
25
26 class InspSocket
27 {
28 private:
29         int fd;
30         std::string host;
31         int port;
32         InspSocketState state;
33         sockaddr_in addr;
34         in_addr addy;
35         time_t timeout_end;
36         bool timeout;
37         pollfd polls;
38         char ibuf[1024];
39 public:
40         InspSocket();
41         InspSocket(std::string host, int port, bool listening, unsigned long maxtime);
42         virtual bool OnConnected();
43         virtual void OnError(InspSocketError e);
44         virtual int OnDisconnect();
45         virtual bool OnDataReady();
46         virtual void OnTimeout();
47         virtual void OnClose();
48         virtual char* Read();
49         virtual int Write(std::string data);
50         virtual int OnIncomingConnection();
51         void SetState(InspSocketState s);
52         bool Poll();
53         virtual void Close();
54         virtual ~InspSocket();
55 };