summaryrefslogtreecommitdiffstats
path: root/tqdbusunixfd.h
blob: f38efc86a12eea8bd7710350d64db80ac75e0cb7 (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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/* tqdbusunixfd.h DBUS unix file handle data type
 *
 * Copyright (C) 2013 Slávek Banko <slavek.banko@axis.cz>
 *
 * Licensed under the Academic Free License version 2.1
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
 * USA.
 *
 */

#ifndef TQDBUSUNIXFD_H
#define TQDBUSUNIXFD_H

#include "dbus/dbus.h"
#ifndef QT_H
#include "ntqshared.h"
#endif // QT_H


#ifndef DBUS_TYPE_UNIX_FD
#define   DBUS_TYPE_UNIX_FD   ((int) 'h')
#endif

#ifndef DBUS_TYPE_UNIX_FD_AS_STRING
#define   DBUS_TYPE_UNIX_FD_AS_STRING   "h"
#endif

/**
 * @brief Class for representing D-Bus unix file handles
 *
 * This data type is necessary to correctly represent unix file handles in the
 * context of D-Bus messages, since normal strings have a different D-Bus
 * signature than unix file handles.
 *
 * @see @ref dbusconventions-unixfd
 */
class TQT_DBusUnixFd
{
public:
    /**
     * @brief Creates an empty and invalid unix file handle
     */
    TQT_DBusUnixFd();

    /**
     * @brief Creates copy of the given @p other unix file handle
     *
     * @param other the unix file handle to copy
     */
    TQT_DBusUnixFd(const TQT_DBusUnixFd& other);

    /**
     * @brief Creates copy of the given @p other unix file handle
     *
     * @param other the unix file handle to copy
     */
    TQT_DBusUnixFd(int other);

    /**
     * @brief Destroys the unix file handle
     */
    virtual ~TQT_DBusUnixFd();

    /**
     * @brief Returns whether the current content is considered a valid unix file handle
     *
     * @return \c true if the object's content describe a valid unix file handle,
     *         otherwise @c false
     *
     * @see @ref dbusconventions-unixfd
     */
    bool isValid() const;

    /**
     * @brief Get unix file handle
     *
     * @see @ref dbusconventions-unixfd
     */
    int fileDescriptor() const;

    /**
     * @brief Set new unix file handle
     *
     * @see @ref dbusconventions-unixfd
     */
    void setFileDescriptor(int fileDescriptor);

    /**
     * @brief Give unix file handle
     *
     * @see @ref dbusconventions-unixfd
     */
    void giveFileDescriptor(int fileDescriptor);

    /**
     * @brief Copy unix file handle from TQT_DBusUnixFd
     *
     * @see @ref dbusconventions-unixfd
     */
    TQT_DBusUnixFd &operator=( const TQT_DBusUnixFd &other );

    /**
     * @brief Checks if the given @p other variant is equal to this one
     *
     * @param other unix file handle to compare with
     *
     * @return @c true if both use same file handle, otherwise
     *         @c false
     */
    inline bool operator==(const TQT_DBusUnixFd& other) const
    {
        return (&other == this) || (other.d == d);
    }

    /**
     * @brief Checks if the given @p other variant is not equal to this one
     *
     * @param other unix file handle to compare with
     *
     * @return @c true if both use different file handle, otherwise
     *         @c false
     */
    inline bool operator!=(const TQT_DBusUnixFd& other) const
    {
        return (&other != this) && (other.d != d);
    }
 

protected:
    struct TQT_DBusUnixFdPrivate : public TQShared {
        int fd;
    } *d;

};

#endif