summaryrefslogtreecommitdiffstats
path: root/libksirtet/lib/socket.h
blob: a2f47a636e4b255cdda58b8c10c6c99e315eaab3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#ifndef SOCKET_H
#define SOCKET_H

#include <qsocketnotifier.h>

#include <kextsock.h>

#include "types.h"


class Socket
{
 public:
 	Socket(KExtendedSocket *, bool createNotifier = FALSE,
		   QObject *parent = 0, const char *name = 0);

	/** close the socket */
    ~Socket();

	int fd() const { return _socket->fd(); }

    /**
     * Accept a new socket.
     */
    int accept(KExtendedSocket *&);

	/**
	 * @return the socket notifier associated with the socket
	 * (0 if none).
	 */
	QSocketNotifier *notifier() const { return _notifier; }

	/**
	 * Write data contained in the writing stream to the socket.
	 * It clears the stream.
	 * @return TRUE if all was written without error.
	 */
	bool write();
	bool write(const QByteArray &a);

	/** @return the QDataStream for writing. */
	WritingStream &writingStream() { return writing; }

	/** @return the size of pending data. */
	int pendingData() const;

	/**
	 * Read data from socket and append them to reading stream for the specified socket.
	 * The portion of the stream that has been read is cleared.
	 * @return the read size or -1 on error
	 */
	int read();

	/** @return the reading stream. */
	ReadingStream &readingStream() { return reading; }

 private:
    KExtendedSocket *_socket;
	QSocketNotifier *_notifier;

	WritingStream writing;
	ReadingStream reading;
};

#endif // SOCKET_H