Qt Cryptographic Architecture
qpipe.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2003-2007 Justin Karneges <justin@affinix.com>
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17 * 02110-1301 USA
18 *
19 */
20
31#ifndef QPIPE_H
32#define QPIPE_H
33
34#ifndef DOXYGEN_SHOULD_SKIP_THIS
35
36#ifndef QPIPE_NO_SECURE
37#define QPIPE_SECURE
38#endif
39
40#ifdef QPIPE_SECURE
41#include "QtCrypto"
42#else
43#define QCA_EXPORT
44#endif
45
46// defs adapted qprocess_p.h
47#ifdef Q_OS_WIN
48#include <windows.h>
49typedef HANDLE Q_PIPE_ID;
50#define INVALID_Q_PIPE_ID INVALID_HANDLE_VALUE
51#else
52typedef int Q_PIPE_ID;
53#define INVALID_Q_PIPE_ID -1
54#endif
55
56#endif
57
58// Note: for Windows console, I/O must be in UTF-8. Reads are guaranteed to
59// to completely decode (no partial characters). Likewise, writes must
60// not contain partial characters.
61
62namespace QCA {
63
74class QCA_EXPORT QPipeDevice : public QObject
75{
76 Q_OBJECT
77public:
81 enum Type
82 {
84 Write
85 };
86
92 QPipeDevice(QObject *parent = nullptr);
93 ~QPipeDevice() override;
94
98 Type type() const;
99
103 bool isValid() const;
104
114 Q_PIPE_ID id() const;
115
123 int idAsInt() const;
124
131 void take(Q_PIPE_ID id, Type t);
132
136 void enable();
137
141 void close();
142
146 void release();
147
155 bool setInheritable(bool enabled);
156
160 int bytesAvailable() const;
161
170 int read(char *data, int maxsize);
171
182 int write(const char *data, int size);
183
192 int writeResult(int *written) const;
193
194Q_SIGNALS:
198 void notify();
199
200private:
201 Q_DISABLE_COPY(QPipeDevice)
202
203 class Private;
204 friend class Private;
205 Private *d;
206};
207
217class QCA_EXPORT QPipeEnd : public QObject
218{
219 Q_OBJECT
220public:
224 enum Error
225 {
227 ErrorBroken
228 };
229
235 QPipeEnd(QObject *parent = nullptr);
236
237 ~QPipeEnd() override;
238
242 void reset();
243
248
255 bool isValid() const;
256
260 Q_PIPE_ID id() const;
261
265 int idAsInt() const;
266
273 void take(Q_PIPE_ID id, QPipeDevice::Type t);
274
275#ifdef QPIPE_SECURE
284 void setSecurityEnabled(bool secure);
285#endif
286
293 void enable();
294
300 void close();
301
308 void release();
309
318 bool setInheritable(bool enabled);
319
323 void finalize();
324
329
338 int bytesAvailable() const;
339
348 int bytesToWrite() const;
349
360 QByteArray read(int bytes = -1);
361
371 void write(const QByteArray &a);
372
373#ifdef QPIPE_SECURE
384 SecureArray readSecure(int bytes = -1);
385
395 void writeSecure(const SecureArray &a);
396#endif
397
404 QByteArray takeBytesToWrite();
405
406#ifdef QPIPE_SECURE
414#endif
415
416Q_SIGNALS:
423 void readyRead();
424
431 void bytesWritten(int bytes);
432
444 void closed();
445
453
454private:
455 Q_DISABLE_COPY(QPipeEnd)
456
457 class Private;
458 friend class Private;
459 Private *d;
460};
461
478class QCA_EXPORT QPipe
479{
480public:
488 QPipe(QObject *parent = nullptr);
489
490 ~QPipe();
491
498 void reset();
499
500#ifdef QPIPE_SECURE
506 bool create(bool secure = false);
507#else
511 bool create();
512#endif
513
518 {
519 return i;
520 }
521
526 {
527 return o;
528 }
529
530private:
531 Q_DISABLE_COPY(QPipe)
532
533 QPipeEnd i, o;
534};
535
536}
537
538#endif
Unbuffered direct pipe.
Definition qpipe.h:75
void release()
Release the pipe end, but do not close it.
QPipeDevice(QObject *parent=nullptr)
Standard constructor.
int idAsInt() const
The low level identification for this pipe, returned as an integer.
void take(Q_PIPE_ID id, Type t)
Take over an existing pipe id, closing the old pipe if any.
void notify()
Emitted when the pipe end can be read from or written to (depending on its Type).
bool setInheritable(bool enabled)
Set the pipe end to be inheritable.
int bytesAvailable() const
Obtain the number of bytes available to be read.
int write(const char *data, int size)
Write to the pipe end.
int read(char *data, int maxsize)
Read from the pipe end.
void close()
Close the pipe end.
Q_PIPE_ID id() const
The low level identification for this pipe.
int writeResult(int *written) const
The result of a write operation.
bool isValid() const
Test whether this object corresponds to a valid pipe.
Type type() const
The Type of the pipe device (that is, read or write)
void enable()
Enable the pipe for reading or writing (depending on Type)
Type
The type of device.
Definition qpipe.h:82
@ Read
The pipe end can be read from.
Definition qpipe.h:83
A buffered higher-level pipe end.
Definition qpipe.h:218
QPipeEnd(QObject *parent=nullptr)
Standard constructor.
void error(QCA::QPipeEnd::Error e)
Emitted when the pipe encounters an error trying to read or write, or if the other end of the pipe ha...
QByteArray takeBytesToWrite()
Returns any unsent bytes queued for writing.
void readyRead()
Emitted when there are bytes available to be read from the read end of the pipe.
void bytesWritten(int bytes)
Emitted when bytes have been written to the write end of the pipe.
void finalizeAndRelease()
Clear the contents of the pipe, and release the pipe.
SecureArray takeBytesToWriteSecure()
Returns any unsent bytes queued for writing.
bool isValid() const
Determine whether the pipe end is valid.
int bytesAvailable() const
Determine how many bytes are available to be read.
void closed()
Emitted when this end of the pipe is closed as a result of calling close()
void write(const QByteArray &a)
Write bytes to the pipe.
SecureArray readSecure(int bytes=-1)
Read bytes from the pipe.
void finalize()
Clear the contents of the pipe, and invalidate the pipe.
void writeSecure(const SecureArray &a)
Write bytes to the pipe.
void setSecurityEnabled(bool secure)
Sets whether the pipe uses secure memory for read/write.
void release()
Let go of the active pipe handle, but don't close it.
Q_PIPE_ID id() const
Pipe identification.
void reset()
Reset the pipe end to an inactive state.
Error
The type of error.
Definition qpipe.h:225
@ ErrorEOF
End of file error.
Definition qpipe.h:226
int bytesToWrite() const
Returns the number of bytes pending to write.
void close()
Close the end of the pipe.
bool setInheritable(bool enabled)
Sets whether the pipe should be inheritable to child processes.
int idAsInt() const
Pipe identification.
QByteArray read(int bytes=-1)
Read bytes from the pipe.
void take(Q_PIPE_ID id, QPipeDevice::Type t)
Take over an existing pipe handle.
void enable()
Enable the endpoint for the pipe.
QPipeDevice::Type type() const
The type of pipe end (either read or write)
A FIFO buffer (named pipe) abstraction.
Definition qpipe.h:479
QPipeEnd & writeEnd()
The write end of the pipe.
Definition qpipe.h:525
void reset()
Reset the pipe.
QPipe(QObject *parent=nullptr)
Standard constructor.
QPipeEnd & readEnd()
The read end of the pipe.
Definition qpipe.h:517
bool create(bool secure=false)
Create the pipe.
Secure array of bytes.
Definition qca_tools.h:317
QCA - the Qt Cryptographic Architecture.
Definition qca_basic.h:41