Merge pull request #121 from Dima73/timer
[openblackhole/openblackhole-enigma2.git] / lib / network / socket.h
1 #ifndef __socket_h
2 #define __socket_h
3
4 #include <stdio.h>
5 #include <sys/types.h>
6 #include <sys/socket.h>
7 #include <netinet/in.h>
8 #include <sys/un.h>
9 #include <netdb.h>
10 #include <fcntl.h>
11
12 #include <lib/base/ebase.h>
13 #include <lib/base/eerror.h>
14 #include <lib/base/estring.h>
15 #include <libsig_comp.h>
16 #include <lib/base/buffer.h>
17
18 class eSocket: public Object
19 {
20 private:
21         int issocket;
22         int last_break;
23         eIOBuffer readbuffer;
24         eIOBuffer writebuffer;
25         int writebusy;
26 protected:
27         int socketdesc;
28         int mystate;
29         ePtr<eSocketNotifier> rsn;
30         eMainloop *mainloop;
31         virtual void notifier(int);
32         int connect(struct addrinfo *addr);
33 public:
34         eSocket(eMainloop *ml);
35         eSocket(int socket, int issocket, eMainloop *ml);
36         virtual ~eSocket();
37         int connectToHost(std::string hostname, int port);
38         int getDescriptor() const { return socketdesc; }
39         int writeBlock(const char *data, unsigned int len);
40         int setSocket(int socketfd, int issocket);
41         int bytesToWrite();
42         int readBlock(char *data, unsigned int maxlen);
43         int bytesAvailable();
44         bool canReadLine();
45         std::string readLine();
46         void close();
47                         // flow control: start/stop data delivery into read buffer.
48         void enableRead();
49         void disableRead();
50
51         void inject(const char *data, int len);
52
53         enum State { Invalid, Idle, HostLookup, Connecting,
54                         Listening, Connection, Closing };
55         int state();
56
57         Signal0<void> connectionClosed_;
58         Signal0<void> connected_;
59         Signal0<void> readyRead_;
60         Signal0<void> hangup;
61         Signal1<void,int> bytesWritten_;
62         Signal1<void,int> error_;
63 };
64
65 class eUnixDomainSocket: public eSocket
66 {
67 public:
68         eUnixDomainSocket(eMainloop *ml);
69         eUnixDomainSocket(int socket, int issocket, eMainloop *ml);
70         ~eUnixDomainSocket();
71         int connectToPath(std::string path);
72 };
73
74 #endif /* __socket_h */