Ok, the long awaited config wizard is here (at least in a very basic state). There...
[quassel.git] / src / contrib / libqxt-2007-10-24 / src / network / qxtnamedpipe.cpp
1 /****************************************************************************
2 **
3 ** Copyright (C) Qxt Foundation. Some rights reserved.
4 **
5 ** This file is part of the QxtNetwork module of the Qt eXTension library
6 **
7 ** This library is free software; you can redistribute it and/or modify it
8 ** under the terms of th Common Public License, version 1.0, as published by
9 ** IBM.
10 **
11 ** This file is provided "AS IS", without WARRANTIES OR CONDITIONS OF ANY
12 ** KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
13 ** WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR
14 ** FITNESS FOR A PARTICULAR PURPOSE.
15 **
16 ** You should have received a copy of the CPL along with this file.
17 ** See the LICENSE file and the cpl1.0.txt file included with the source
18 ** distribution for more information. If you did not receive a copy of the
19 ** license, contact the Qxt Foundation.
20 **
21 ** <http://libqxt.sourceforge.net>  <foundation@libqxt.org>
22 **
23 ****************************************************************************/
24 /**
25 \class QxtNamedPipe QxtNamedPipe
26
27 \ingroup QxtNetwork
28
29 \brief Provides a QIODevice over a named pipe
30
31 \note not part of 0.2.4
32 */
33
34
35
36
37 #include "qxtnamedpipe.h"
38 #ifdef Q_OS_UNIX
39 #    include <fcntl.h>
40 class QxtNamedPipePrivate : public QxtPrivate<QxtNamedPipe>
41 {
42 public:
43     QxtNamedPipePrivate()
44     {}
45     QXT_DECLARE_PUBLIC(QxtNamedPipe);
46
47     QString pipeName;
48     int fd;
49 };
50
51 QxtNamedPipe::QxtNamedPipe(const QString& name, QObject* parent) : QAbstractSocket(QAbstractSocket::UnknownSocketType, parent)
52 {
53     QXT_INIT_PRIVATE(QxtNamedPipe);
54     qxt_d().pipeName = name;
55     qxt_d().fd = 0;
56 }
57
58 bool QxtNamedPipe::open(QIODevice::OpenMode mode)
59 {
60     int m = O_RDWR;
61
62     if (!(mode & QIODevice::ReadOnly))         ///FIXME: what?
63         m = O_WRONLY;
64     else if (!(mode & QIODevice::WriteOnly))
65         m = O_RDONLY;
66     qxt_d().fd = ::open(qPrintable(qxt_d().pipeName), m);
67
68     if (qxt_d().fd != 0)
69     {
70         setSocketDescriptor(qxt_d().fd, QAbstractSocket::ConnectedState, mode);
71         setOpenMode ( mode);
72         return true;
73     }
74     else
75     {
76         return false;
77     }
78 }
79
80 bool QxtNamedPipe::open(const QString& name, QIODevice::OpenMode mode)
81 {
82     qxt_d().pipeName = name;
83     return QxtNamedPipe::open(mode);
84 }
85
86 void QxtNamedPipe::close()
87 {
88     if (qxt_d().fd) ::close(qxt_d().fd);
89     setOpenMode(QIODevice::NotOpen);
90 }
91
92 QByteArray QxtNamedPipe::readAvailableBytes()
93 {
94     char ch;
95     QByteArray rv;
96     while (getChar(&ch)) rv += ch;
97     return rv;
98 }
99 #else
100 #    error "No Windows implementation for QxtNamedPipe"
101 #endif
102