Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Side by Side Diff: dbus/message.h

Issue 11364033: dbus: Make it possible to build as shared_library. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: CHROME_DBUS_EXPORT Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef DBUS_MESSAGE_H_ 5 #ifndef DBUS_MESSAGE_H_
6 #define DBUS_MESSAGE_H_ 6 #define DBUS_MESSAGE_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 #include <dbus/dbus.h> 10 #include <dbus/dbus.h>
11 11
12 #include "base/basictypes.h" 12 #include "base/basictypes.h"
13 #include "dbus/dbus_export.h"
13 #include "dbus/file_descriptor.h" 14 #include "dbus/file_descriptor.h"
14 #include "dbus/object_path.h" 15 #include "dbus/object_path.h"
15 16
16 namespace google { 17 namespace google {
17 namespace protobuf { 18 namespace protobuf {
18 19
19 class MessageLite; 20 class MessageLite;
20 21
21 } // namespace protobuf 22 } // namespace protobuf
22 } // namespace google 23 } // namespace google
23 24
24 25
25 namespace dbus { 26 namespace dbus {
26 27
27 class MessageWriter; 28 class MessageWriter;
28 class MessageReader; 29 class MessageReader;
29 30
30 // DBUS_TYPE_UNIX_FD was added in D-Bus version 1.4 31 // DBUS_TYPE_UNIX_FD was added in D-Bus version 1.4
31 #if !defined(DBUS_TYPE_UNIX_FD) 32 #if !defined(DBUS_TYPE_UNIX_FD)
32 #define DBUS_TYPE_UNIX_FD ((int) 'h') 33 #define DBUS_TYPE_UNIX_FD ((int) 'h')
33 #endif 34 #endif
34 35
35 // Returns true if Unix FD passing is supported in libdbus. 36 // Returns true if Unix FD passing is supported in libdbus.
36 // The check is done runtime rather than compile time as the libdbus 37 // The check is done runtime rather than compile time as the libdbus
37 // version used at runtime may be different from the one used at compile time. 38 // version used at runtime may be different from the one used at compile time.
38 bool IsDBusTypeUnixFdSupported(); 39 CHROME_DBUS_EXPORT bool IsDBusTypeUnixFdSupported();
39 40
40 // Message is the base class of D-Bus message types. Client code must use 41 // Message is the base class of D-Bus message types. Client code must use
41 // sub classes such as MethodCall and Response instead. 42 // sub classes such as MethodCall and Response instead.
42 // 43 //
43 // The class name Message is very generic, but there should be no problem 44 // The class name Message is very generic, but there should be no problem
44 // as the class is inside 'dbus' namespace. We chose to name this way, as 45 // as the class is inside 'dbus' namespace. We chose to name this way, as
45 // libdbus defines lots of types starting with DBus, such as 46 // libdbus defines lots of types starting with DBus, such as
46 // DBusMessage. We should avoid confusion and conflict with these types. 47 // DBusMessage. We should avoid confusion and conflict with these types.
47 class Message { 48 class CHROME_DBUS_EXPORT Message {
48 public: 49 public:
49 // The message type used in D-Bus. Redefined here so client code 50 // The message type used in D-Bus. Redefined here so client code
50 // doesn't need to use raw D-Bus macros. DBUS_MESSAGE_TYPE_INVALID 51 // doesn't need to use raw D-Bus macros. DBUS_MESSAGE_TYPE_INVALID
51 // etc. are #define macros. Having an enum type here makes code a bit 52 // etc. are #define macros. Having an enum type here makes code a bit
52 // more type-safe. 53 // more type-safe.
53 enum MessageType { 54 enum MessageType {
54 MESSAGE_INVALID = DBUS_MESSAGE_TYPE_INVALID, 55 MESSAGE_INVALID = DBUS_MESSAGE_TYPE_INVALID,
55 MESSAGE_METHOD_CALL = DBUS_MESSAGE_TYPE_METHOD_CALL, 56 MESSAGE_METHOD_CALL = DBUS_MESSAGE_TYPE_METHOD_CALL,
56 MESSAGE_METHOD_RETURN = DBUS_MESSAGE_TYPE_METHOD_RETURN, 57 MESSAGE_METHOD_RETURN = DBUS_MESSAGE_TYPE_METHOD_RETURN,
57 MESSAGE_SIGNAL = DBUS_MESSAGE_TYPE_SIGNAL, 58 MESSAGE_SIGNAL = DBUS_MESSAGE_TYPE_SIGNAL,
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 private: 131 private:
131 // Helper function used in ToString(). 132 // Helper function used in ToString().
132 std::string ToStringInternal(const std::string& indent, 133 std::string ToStringInternal(const std::string& indent,
133 MessageReader* reader); 134 MessageReader* reader);
134 135
135 DBusMessage* raw_message_; 136 DBusMessage* raw_message_;
136 DISALLOW_COPY_AND_ASSIGN(Message); 137 DISALLOW_COPY_AND_ASSIGN(Message);
137 }; 138 };
138 139
139 // MessageCall is a type of message used for calling a method via D-Bus. 140 // MessageCall is a type of message used for calling a method via D-Bus.
140 class MethodCall : public Message { 141 class CHROME_DBUS_EXPORT MethodCall : public Message {
141 public: 142 public:
142 // Creates a method call message for the specified interface name and 143 // Creates a method call message for the specified interface name and
143 // the method name. 144 // the method name.
144 // 145 //
145 // For instance, to call "Get" method of DBUS_INTERFACE_INTROSPECTABLE 146 // For instance, to call "Get" method of DBUS_INTERFACE_INTROSPECTABLE
146 // interface ("org.freedesktop.DBus.Introspectable"), create a method 147 // interface ("org.freedesktop.DBus.Introspectable"), create a method
147 // call like this: 148 // call like this:
148 // 149 //
149 // MethodCall method_call(DBUS_INTERFACE_INTROSPECTABLE, "Get"); 150 // MethodCall method_call(DBUS_INTERFACE_INTROSPECTABLE, "Get");
150 // 151 //
151 // The constructor creates the internal raw message. 152 // The constructor creates the internal raw message.
152 MethodCall(const std::string& interface_name, 153 MethodCall(const std::string& interface_name,
153 const std::string& method_name); 154 const std::string& method_name);
154 155
155 // Returns a newly created MethodCall from the given raw message of the 156 // Returns a newly created MethodCall from the given raw message of the
156 // type DBUS_MESSAGE_TYPE_METHOD_CALL. The caller must delete the 157 // type DBUS_MESSAGE_TYPE_METHOD_CALL. The caller must delete the
157 // returned object. Takes the ownership of |raw_message|. 158 // returned object. Takes the ownership of |raw_message|.
158 static MethodCall* FromRawMessage(DBusMessage* raw_message); 159 static MethodCall* FromRawMessage(DBusMessage* raw_message);
159 160
160 private: 161 private:
161 // Creates a method call message. The internal raw message is NULL. 162 // Creates a method call message. The internal raw message is NULL.
162 // Only used internally. 163 // Only used internally.
163 MethodCall(); 164 MethodCall();
164 165
165 DISALLOW_COPY_AND_ASSIGN(MethodCall); 166 DISALLOW_COPY_AND_ASSIGN(MethodCall);
166 }; 167 };
167 168
168 // Signal is a type of message used to send a signal. 169 // Signal is a type of message used to send a signal.
169 class Signal : public Message { 170 class CHROME_DBUS_EXPORT Signal : public Message {
170 public: 171 public:
171 // Creates a signal message for the specified interface name and the 172 // Creates a signal message for the specified interface name and the
172 // method name. 173 // method name.
173 // 174 //
174 // For instance, to send "PropertiesChanged" signal of 175 // For instance, to send "PropertiesChanged" signal of
175 // DBUS_INTERFACE_INTROSPECTABLE interface 176 // DBUS_INTERFACE_INTROSPECTABLE interface
176 // ("org.freedesktop.DBus.Introspectable"), create a signal like this: 177 // ("org.freedesktop.DBus.Introspectable"), create a signal like this:
177 // 178 //
178 // Signal signal(DBUS_INTERFACE_INTROSPECTABLE, "PropertiesChanged"); 179 // Signal signal(DBUS_INTERFACE_INTROSPECTABLE, "PropertiesChanged");
179 // 180 //
180 // The constructor creates the internal raw_message_. 181 // The constructor creates the internal raw_message_.
181 Signal(const std::string& interface_name, 182 Signal(const std::string& interface_name,
182 const std::string& method_name); 183 const std::string& method_name);
183 184
184 // Returns a newly created SIGNAL from the given raw message of the type 185 // Returns a newly created SIGNAL from the given raw message of the type
185 // DBUS_MESSAGE_TYPE_SIGNAL. The caller must delete the returned 186 // DBUS_MESSAGE_TYPE_SIGNAL. The caller must delete the returned
186 // object. Takes the ownership of |raw_message|. 187 // object. Takes the ownership of |raw_message|.
187 static Signal* FromRawMessage(DBusMessage* raw_message); 188 static Signal* FromRawMessage(DBusMessage* raw_message);
188 189
189 private: 190 private:
190 // Creates a signal message. The internal raw message is NULL. 191 // Creates a signal message. The internal raw message is NULL.
191 // Only used internally. 192 // Only used internally.
192 Signal(); 193 Signal();
193 194
194 DISALLOW_COPY_AND_ASSIGN(Signal); 195 DISALLOW_COPY_AND_ASSIGN(Signal);
195 }; 196 };
196 197
197 // Response is a type of message used for receiving a response from a 198 // Response is a type of message used for receiving a response from a
198 // method via D-Bus. 199 // method via D-Bus.
199 class Response : public Message { 200 class CHROME_DBUS_EXPORT Response : public Message {
200 public: 201 public:
201 // Returns a newly created Response from the given raw message of the 202 // Returns a newly created Response from the given raw message of the
202 // type DBUS_MESSAGE_TYPE_METHOD_RETURN. The caller must delete the 203 // type DBUS_MESSAGE_TYPE_METHOD_RETURN. The caller must delete the
203 // returned object. Takes the ownership of |raw_message|. 204 // returned object. Takes the ownership of |raw_message|.
204 static Response* FromRawMessage(DBusMessage* raw_message); 205 static Response* FromRawMessage(DBusMessage* raw_message);
205 206
206 // Returns a newly created Response from the given method call. The 207 // Returns a newly created Response from the given method call. The
207 // caller must delete the returned object. Used for implementing 208 // caller must delete the returned object. Used for implementing
208 // exported methods. 209 // exported methods.
209 static Response* FromMethodCall(MethodCall* method_call); 210 static Response* FromMethodCall(MethodCall* method_call);
210 211
211 // Returns a newly created Response with an empty payload. The caller 212 // Returns a newly created Response with an empty payload. The caller
212 // must delete the returned object. Useful for testing. 213 // must delete the returned object. Useful for testing.
213 static Response* CreateEmpty(); 214 static Response* CreateEmpty();
214 215
215 protected: 216 protected:
216 // Creates a Response message. The internal raw message is NULL. 217 // Creates a Response message. The internal raw message is NULL.
217 Response(); 218 Response();
218 219
219 private: 220 private:
220 DISALLOW_COPY_AND_ASSIGN(Response); 221 DISALLOW_COPY_AND_ASSIGN(Response);
221 }; 222 };
222 223
223 // ErrorResponse is a type of message used to return an error to the 224 // ErrorResponse is a type of message used to return an error to the
224 // caller of a method. 225 // caller of a method.
225 class ErrorResponse: public Response { 226 class CHROME_DBUS_EXPORT ErrorResponse: public Response {
226 public: 227 public:
227 // Returns a newly created Response from the given raw message of the 228 // Returns a newly created Response from the given raw message of the
228 // type DBUS_MESSAGE_TYPE_METHOD_RETURN. The caller must delete the 229 // type DBUS_MESSAGE_TYPE_METHOD_RETURN. The caller must delete the
229 // returned object. Takes the ownership of |raw_message|. 230 // returned object. Takes the ownership of |raw_message|.
230 static ErrorResponse* FromRawMessage(DBusMessage* raw_message); 231 static ErrorResponse* FromRawMessage(DBusMessage* raw_message);
231 232
232 // Returns a newly created ErrorResponse from the given method call, the 233 // Returns a newly created ErrorResponse from the given method call, the
233 // error name, and the error message. The error name looks like 234 // error name, and the error message. The error name looks like
234 // "org.freedesktop.DBus.Error.Failed". Used for returning an error to a 235 // "org.freedesktop.DBus.Error.Failed". Used for returning an error to a
235 // failed method call. 236 // failed method call.
(...skipping 18 matching lines...) Expand all
254 // 255 //
255 // For instance, instead of doing something like: 256 // For instance, instead of doing something like:
256 // 257 //
257 // // We shouldn't add '&' to str here, but it compiles with '&' added. 258 // // We shouldn't add '&' to str here, but it compiles with '&' added.
258 // dbus_g_proxy_call(..., G_TYPE_STRING, str, G_TYPE_INVALID, ...) 259 // dbus_g_proxy_call(..., G_TYPE_STRING, str, G_TYPE_INVALID, ...)
259 // 260 //
260 // We want to do something like: 261 // We want to do something like:
261 // 262 //
262 // writer.AppendString(str); 263 // writer.AppendString(str);
263 // 264 //
264 class MessageWriter { 265 class CHROME_DBUS_EXPORT MessageWriter {
265 public: 266 public:
266 // Data added with Append* will be written to |message|, which may be NULL 267 // Data added with Append* will be written to |message|, which may be NULL
267 // to create a sub-writer for passing to OpenArray, etc. 268 // to create a sub-writer for passing to OpenArray, etc.
268 explicit MessageWriter(Message* message); 269 explicit MessageWriter(Message* message);
269 ~MessageWriter(); 270 ~MessageWriter();
270 271
271 // Appends a byte to the message. 272 // Appends a byte to the message.
272 void AppendByte(uint8 value); 273 void AppendByte(uint8 value);
273 void AppendBool(bool value); 274 void AppendBool(bool value);
274 void AppendInt16(int16 value); 275 void AppendInt16(int16 value);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 bool container_is_open_; 356 bool container_is_open_;
356 357
357 DISALLOW_COPY_AND_ASSIGN(MessageWriter); 358 DISALLOW_COPY_AND_ASSIGN(MessageWriter);
358 }; 359 };
359 360
360 // MessageReader is used to read incoming messages such as responses for 361 // MessageReader is used to read incoming messages such as responses for
361 // method calls. 362 // method calls.
362 // 363 //
363 // MessageReader manages an internal iterator to read data. All functions 364 // MessageReader manages an internal iterator to read data. All functions
364 // starting with Pop advance the iterator on success. 365 // starting with Pop advance the iterator on success.
365 class MessageReader { 366 class CHROME_DBUS_EXPORT MessageReader {
366 public: 367 public:
367 // The data will be read from the given |message|, which may be NULL to 368 // The data will be read from the given |message|, which may be NULL to
368 // create a sub-reader for passing to PopArray, etc. 369 // create a sub-reader for passing to PopArray, etc.
369 explicit MessageReader(Message* message); 370 explicit MessageReader(Message* message);
370 ~MessageReader(); 371 ~MessageReader();
371 372
372 // Returns true if the reader has more data to read. The function is 373 // Returns true if the reader has more data to read. The function is
373 // used to iterate contents in a container like: 374 // used to iterate contents in a container like:
374 // 375 //
375 // while (reader.HasMoreData()) 376 // while (reader.HasMoreData())
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 476
476 Message* message_; 477 Message* message_;
477 DBusMessageIter raw_message_iter_; 478 DBusMessageIter raw_message_iter_;
478 479
479 DISALLOW_COPY_AND_ASSIGN(MessageReader); 480 DISALLOW_COPY_AND_ASSIGN(MessageReader);
480 }; 481 };
481 482
482 } // namespace dbus 483 } // namespace dbus
483 484
484 #endif // DBUS_MESSAGE_H_ 485 #endif // DBUS_MESSAGE_H_
OLDNEW
« dbus/dbus_export.h ('K') | « dbus/file_descriptor.h ('k') | dbus/object_path.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698