Qt 4.8
qunixsocket_p.h
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/legal
5 **
6 ** This file is part of the QtGui module of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and Digia. For licensing terms and
14 ** conditions see http://qt.digia.com/licensing. For further information
15 ** use the contact form at http://qt.digia.com/contact-us.
16 **
17 ** GNU Lesser General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU Lesser
19 ** General Public License version 2.1 as published by the Free Software
20 ** Foundation and appearing in the file LICENSE.LGPL included in the
21 ** packaging of this file. Please review the following information to
22 ** ensure the GNU Lesser General Public License version 2.1 requirements
23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 **
25 ** In addition, as a special exception, Digia gives you certain additional
26 ** rights. These rights are described in the Digia Qt LGPL Exception
27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 **
29 ** GNU General Public License Usage
30 ** Alternatively, this file may be used under the terms of the GNU
31 ** General Public License version 3.0 as published by the Free Software
32 ** Foundation and appearing in the file LICENSE.GPL included in the
33 ** packaging of this file. Please review the following information to
34 ** ensure the GNU General Public License version 3.0 requirements will be
35 ** met: http://www.gnu.org/copyleft/gpl.html.
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41 
42 #ifndef QUNIXSOCKET_P_H
43 #define QUNIXSOCKET_P_H
44 
45 //
46 // W A R N I N G
47 // -------------
48 //
49 // This file is not part of the Qt API. It exists purely as an
50 // implementation detail. This header file may change from version to
51 // version without notice, or even be removed.
52 //
53 // We mean it.
54 //
55 
56 #include <QtNetwork/qabstractsocket.h>
57 #include <QtCore/qiodevice.h>
58 #include <QtCore/qlist.h>
59 #include <QtCore/qshareddata.h>
60 
61 extern "C" {
62 #include <sys/types.h>
63 };
64 
66 
67 class QUnixSocketRights;
69 class QUnixSocketPrivate;
71 struct iovec;
72 
74 public:
75  QUnixSocketRights(int);
77 
79  QUnixSocketRights & operator=(const QUnixSocketRights &);
80 
81  bool isValid() const;
82 
83  int dupFd() const;
84  int peekFd() const;
85 
86 private:
87  friend class QUnixSocket;
88  QUnixSocketRights(int,int);
90 };
91 
93 public:
98  QUnixSocketMessage(const iovec*, int);
99  QUnixSocketMessage & operator=(const QUnixSocketMessage &);
101 
102  void setBytes(const QByteArray &);
103  void setRights(const QList<QUnixSocketRights> &);
104 
105  const QList<QUnixSocketRights> & rights() const;
106  bool rightsWereTruncated() const;
107 
108  const QByteArray & bytes() const;
109 
110  pid_t processId() const;
111  uid_t userId() const;
112  gid_t groupId() const;
113 
114  void setProcessId(pid_t);
115  void setUserId(uid_t);
116  void setGroupId(gid_t);
117 
118  bool isValid() const;
119 private:
120  friend class QUnixSocket;
121  friend class QUnixSocketPrivate;
123 };
124 
126 {
127  Q_OBJECT
128 public:
129  QUnixSocket(QObject * = 0);
130  QUnixSocket(qint64, qint64, QObject * = 0);
131  virtual ~QUnixSocket();
132 
133  enum SocketState {
141  };
142 
143  enum SocketError { NoError, InvalidPath, ResourceError,
144  NonexistentPath, ConnectionRefused, UnknownError,
145  ReadFailure, WriteFailure };
146 
147  bool connect(const QByteArray & path);
148  bool setSocketDescriptor(int socketDescriptor);
149  int socketDescriptor() const;
150  void abort();
151  void close();
152 
153  bool flush();
154 
155  SocketError error() const;
156 
157  SocketState state() const;
158  QByteArray address() const;
159 
160  qint64 bytesAvailable() const;
161  qint64 bytesToWrite() const;
162 
163  qint64 readBufferSize() const;
164  void setReadBufferSize(qint64 size);
165  qint64 rightsBufferSize() const;
166  void setRightsBufferSize(qint64 size);
167 
168  bool canReadLine() const;
169 
170  qint64 write(const char * data, qint64 maxSize)
171  { return QIODevice::write(data, maxSize); }
172  qint64 write(const QByteArray & byteArray)
173  { return QIODevice::write(byteArray); }
174  qint64 read(char * data, qint64 maxSize)
175  { return QIODevice::read(data, maxSize); }
177  { return QIODevice::read(maxSize); }
178 
181 
182  virtual bool isSequential() const;
183  virtual bool waitForReadyRead(int msec = 300);
184  virtual bool waitForBytesWritten(int msec = 300);
185 
186 Q_SIGNALS:
187  void stateChanged(SocketState socketState);
188 
189 protected:
190  virtual qint64 readData(char * data, qint64 maxSize);
191  virtual qint64 writeData (const char * data, qint64 maxSize);
192 
193 private:
194  QUnixSocket(const QUnixSocket &);
195  QUnixSocket & operator=(const QUnixSocket &);
196 
198 };
199 
201 
202 #endif // QUNIXSOCKET_P_H
qint64 write(const QByteArray &byteArray)
qint64 write(const char *data, qint64 maxSize)
#define QT_END_NAMESPACE
This macro expands to.
Definition: qglobal.h:90
The QUnixSocket class provides a Unix domain socket.
virtual bool waitForReadyRead(int msecs)
Blocks until new data is available for reading and the readyRead() signal has been emitted...
Definition: qiodevice.cpp:1616
qint64 read(char *data, qint64 maxSize)
virtual void close()
First emits aboutToClose(), then closes the device and sets its OpenMode to NotOpen.
Definition: qiodevice.cpp:590
QSharedDataPointer< QUnixSocketRightsPrivate > d
Definition: qunixsocket_p.h:89
#define Q_GUI_EXPORT
Definition: qglobal.h:1450
#define error(msg)
virtual qint64 writeData(const char *data, qint64 len)=0
Writes up to maxSize bytes from data to the device.
The QByteArray class provides an array of bytes.
Definition: qbytearray.h:135
QUnixSocketPrivate * d
SocketState
The SocketState enumeration represents the connection state of a QUnixSocket instance.
QByteArray read(qint64 maxSize)
The QObject class is the base class of all Qt objects.
Definition: qobject.h:111
#define Q_SIGNALS
Definition: qobjectdefs.h:72
The QUnixSocketRights class encapsulates QUnixSocket rights data.
Definition: qunixsocket_p.h:73
qint64 read(char *data, qint64 maxlen)
Reads at most maxSize bytes from the device into data, and returns the number of bytes read...
Definition: qiodevice.cpp:791
virtual qint64 bytesToWrite() const
For buffered devices, this function returns the number of bytes waiting to be written.
Definition: qiodevice.cpp:767
#define QT_BEGIN_NAMESPACE
This macro expands to.
Definition: qglobal.h:89
static bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
Creates a connection of the given type from the signal in the sender object to the method in the rece...
Definition: qobject.cpp:2580
static const char * data(const QByteArray &arr)
SocketError
The SocketError enumeration represents the various errors that can occur on a Unix domain socket...
__int64 qint64
Definition: qglobal.h:942
#define Q_OBJECT
Definition: qobjectdefs.h:157
virtual bool isSequential() const
Returns true if this device is sequential; otherwise returns false.
Definition: qiodevice.cpp:454
virtual qint64 readData(char *data, qint64 maxlen)=0
Reads up to maxSize bytes from the device into data, and returns the number of bytes read or -1 if an...
QSharedDataPointer< QUnixSocketMessagePrivate > d
virtual qint64 bytesAvailable() const
Returns the number of bytes that are available for reading.
Definition: qiodevice.cpp:752
virtual bool waitForBytesWritten(int msecs)
For buffered devices, this function waits until a payload of buffered written data has been written t...
Definition: qiodevice.cpp:1648
Q_CORE_EXPORT QTextStream & flush(QTextStream &s)
virtual bool canReadLine() const
Returns true if a complete line of data can be read from the device; otherwise returns false...
Definition: qiodevice.cpp:1330
qint64 write(const char *data, qint64 len)
Writes at most maxSize bytes of data from data to the device.
Definition: qiodevice.cpp:1342
The QIODevice class is the base interface class of all I/O devices in Qt.
Definition: qiodevice.h:66
The QUnixSocketMessage class encapsulates a message sent or received through the QUnixSocket class...
Definition: qunixsocket_p.h:92