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>
49 typedef HANDLE Q_PIPE_ID;
50 #define INVALID_Q_PIPE_ID INVALID_HANDLE_VALUE
51 #else
52 typedef 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 
62 namespace QCA {
63 
64 
75 class QCA_EXPORT QPipeDevice : public QObject
76 {
77  Q_OBJECT
78 public:
82  enum Type
83  {
84  Read,
85  Write
86  };
87 
93  QPipeDevice(QObject *parent = 0);
94  ~QPipeDevice();
95 
99  Type type() const;
100 
104  bool isValid() const;
105 
115  Q_PIPE_ID id() const;
116 
124  int idAsInt() const;
125 
132  void take(Q_PIPE_ID id, Type t);
133 
137  void enable();
138 
142  void close();
143 
147  void release();
148 
156  bool setInheritable(bool enabled);
157 
161  int bytesAvailable() const;
162 
171  int read(char *data, int maxsize);
172 
183  int write(const char *data, int size);
184 
193  int writeResult(int *written) const;
194 
195 Q_SIGNALS:
199  void notify();
200 
201 private:
202  Q_DISABLE_COPY(QPipeDevice)
203 
204  class Private;
205  friend class Private;
206  Private *d;
207 };
208 
218 class QCA_EXPORT QPipeEnd : public QObject
219 {
220  Q_OBJECT
221 public:
222 
226  enum Error
227  {
229  ErrorBroken
230  };
231 
237  QPipeEnd(QObject *parent = 0);
238 
239  ~QPipeEnd();
240 
244  void reset();
245 
249  QPipeDevice::Type type() const;
250 
257  bool isValid() const;
258 
262  Q_PIPE_ID id() const;
263 
267  int idAsInt() const;
268 
275  void take(Q_PIPE_ID id, QPipeDevice::Type t);
276 
277 #ifdef QPIPE_SECURE
278 
286  void setSecurityEnabled(bool secure);
287 #endif
288 
295  void enable();
296 
302  void close();
303 
310  void release();
311 
320  bool setInheritable(bool enabled);
321 
325  void finalize();
326 
330  void finalizeAndRelease();
331 
340  int bytesAvailable() const;
341 
350  int bytesToWrite() const;
351 
362  QByteArray read(int bytes = -1);
363 
373  void write(const QByteArray &a);
374 
375 #ifdef QPIPE_SECURE
376 
386  SecureArray readSecure(int bytes = -1);
387 
397  void writeSecure(const SecureArray &a);
398 #endif
399 
406  QByteArray takeBytesToWrite();
407 
408 #ifdef QPIPE_SECURE
409 
415  SecureArray takeBytesToWriteSecure();
416 #endif
417 
418 Q_SIGNALS:
425  void readyRead();
426 
433  void bytesWritten(int bytes);
434 
446  void closed();
447 
454  void error(QCA::QPipeEnd::Error e);
455 
456 private:
457  Q_DISABLE_COPY(QPipeEnd)
458 
459  class Private;
460  friend class Private;
461  Private *d;
462 };
463 
480 class QCA_EXPORT QPipe
481 {
482 public:
490  QPipe(QObject *parent = 0);
491 
492  ~QPipe();
493 
500  void reset();
501 
502 #ifdef QPIPE_SECURE
503 
508  bool create(bool secure = false);
509 #else
510 
513  bool create();
514 #endif
515 
519  QPipeEnd & readEnd() { return i; }
520 
524  QPipeEnd & writeEnd() { return o; }
525 
526 private:
527  Q_DISABLE_COPY(QPipe)
528 
529  QPipeEnd i, o;
530 };
531 
532 }
533 
534 #endif
End of file error.
Definition: qpipe.h:228
QPipeEnd & readEnd()
The read end of the pipe.
Definition: qpipe.h:519
QPipeEnd & writeEnd()
The write end of the pipe.
Definition: qpipe.h:524
A buffered higher-level pipe end.
Definition: qpipe.h:218
QCA - the Qt Cryptographic Architecture.
Definition: qca_basic.h:47
Secure array of bytes.
Definition: qca_tools.h:316
Type
The type of device.
Definition: qpipe.h:82
The pipe end can be read from.
Definition: qpipe.h:84
Unbuffered direct pipe.
Definition: qpipe.h:75
A FIFO buffer (named pipe) abstraction.
Definition: qpipe.h:480
Error
The type of error.
Definition: qpipe.h:226