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

Side by Side Diff: dbus/message.cc

Issue 7491029: Implement Bus and ObjectProxy classes for our D-Bus library. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: minor change Created 9 years, 4 months 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #include "dbus/message.h" 5 #include "dbus/message.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/format_macros.h" 8 #include "base/format_macros.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/stringprintf.h" 10 #include "base/stringprintf.h"
11 11
12 namespace {
13
14 // Appends the header name and the value to |output|, if the value is
15 // not empty.
16 static void AppendStringHeader(const std::string& header_name,
17 const std::string& header_value,
18 std::string* output) {
19 if (!header_value.empty()) {
20 *output += header_name + ": " + header_value + "\n";
21 }
22 }
23
24 // Appends the header name and the value to |output|, if the value is
25 // nonzero.
26 static void AppendUint32Header(const std::string& header_name,
27 uint32 header_value,
28 std::string* output) {
29 if (header_value != 0) {
30 *output += (header_name + ": " + base::StringPrintf("%u", header_value) +
31 "\n");
32 }
33 }
34
35 } // namespace
36
12 namespace dbus { 37 namespace dbus {
13 38
14 Message::Message() 39 Message::Message()
15 : raw_message_(NULL) { 40 : raw_message_(NULL) {
16 } 41 }
17 42
18 Message::~Message() { 43 Message::~Message() {
19 if (raw_message_) 44 if (raw_message_)
20 dbus_message_unref(raw_message_); 45 dbus_message_unref(raw_message_);
21 } 46 }
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 // member: SomeMethod 196 // member: SomeMethod
172 // 197 //
173 // string \"payload\" 198 // string \"payload\"
174 // ... 199 // ...
175 std::string Message::ToString() { 200 std::string Message::ToString() {
176 if (!raw_message_) 201 if (!raw_message_)
177 return ""; 202 return "";
178 203
179 // Generate headers first. 204 // Generate headers first.
180 std::string headers; 205 std::string headers;
181 const char* destination = dbus_message_get_destination(raw_message_); 206 AppendStringHeader("destination", GetDestination(), &headers);
182 if (destination) 207 AppendStringHeader("path", GetPath(), &headers);
183 headers += base::StringPrintf("destination: %s\n", destination); 208 AppendStringHeader("interface", GetInterface(), &headers);
184 const char* path = dbus_message_get_path(raw_message_); 209 AppendStringHeader("member", GetMember(), &headers);
185 if (path) 210 AppendStringHeader("error_name", GetErrorName(), &headers);
186 headers += base::StringPrintf("path: %s\n", path); 211 AppendStringHeader("sender", GetSender(), &headers);
187 const char* interface = dbus_message_get_interface(raw_message_); 212 AppendStringHeader("signature", GetSignature(), &headers);
188 if (interface) 213 AppendUint32Header("serial", GetSerial(), &headers);
189 headers += base::StringPrintf("interface: %s\n", interface); 214 AppendUint32Header("reply_serial", GetReplySerial(), &headers);
190 const char* member = dbus_message_get_member(raw_message_);
191 if (member)
192 headers += base::StringPrintf("member: %s\n", member);
193 const char* error_name = dbus_message_get_error_name(raw_message_);
194 if (error_name)
195 headers += base::StringPrintf("error_name: %s\n", error_name);
196 const char* sender = dbus_message_get_sender(raw_message_);
197 if (sender)
198 headers += base::StringPrintf("sender: %s\n", sender);
199 const char* signature = dbus_message_get_signature(raw_message_);
200 if (signature)
201 headers += base::StringPrintf("signature: %s\n", signature);
202 215
203 // Generate the payload. 216 // Generate the payload.
204 MessageReader reader(this); 217 MessageReader reader(this);
205 return headers + "\n" + ToStringInternal("", &reader); 218 return headers + "\n" + ToStringInternal("", &reader);
206 } 219 }
207 220
221 void Message::SetDestination(const std::string& destination) {
222 const bool success = dbus_message_set_destination(raw_message_,
223 destination.c_str());
224 CHECK(success) << "Unable to allocate memory";
225 }
226
227 void Message::SetPath(const std::string& path) {
228 const bool success = dbus_message_set_path(raw_message_,
229 path.c_str());
230 CHECK(success) << "Unable to allocate memory";
231 }
232
233 void Message::SetInterface(const std::string& interface) {
234 const bool success = dbus_message_set_interface(raw_message_,
235 interface.c_str());
236 CHECK(success) << "Unable to allocate memory";
237 }
238
239 void Message::SetMember(const std::string& member) {
240 const bool success = dbus_message_set_member(raw_message_,
241 member.c_str());
242 CHECK(success) << "Unable to allocate memory";
243 }
244
245 void Message::SetErrorName(const std::string& error_name) {
246 const bool success = dbus_message_set_error_name(raw_message_,
247 error_name.c_str());
248 CHECK(success) << "Unable to allocate memory";
249 }
250
251 void Message::SetSender(const std::string& sender) {
252 const bool success = dbus_message_set_sender(raw_message_,
253 sender.c_str());
254 CHECK(success) << "Unable to allocate memory";
255 }
256
257 void Message::SetSerial(uint32 serial) {
258 dbus_message_set_serial(raw_message_, serial);
259 }
260
261 void Message::SetReplySerial(uint32 reply_serial) {
262 dbus_message_set_reply_serial(raw_message_, reply_serial);
263 }
264
265 std::string Message::GetDestination() {
266 const char* destination = dbus_message_get_destination(raw_message_);
267 return destination ? destination : "";
268 }
269
270 std::string Message::GetPath() {
271 const char* path = dbus_message_get_path(raw_message_);
272 return path ? path : "";
273 }
274
275 std::string Message::GetInterface() {
276 const char* interface = dbus_message_get_interface(raw_message_);
277 return interface ? interface : "";
278 }
279
280 std::string Message::GetMember() {
281 const char* member = dbus_message_get_member(raw_message_);
282 return member ? member : "";
283 }
284
285 std::string Message::GetErrorName() {
286 const char* error_name = dbus_message_get_error_name(raw_message_);
287 return error_name ? error_name : "";
288 }
289
290 std::string Message::GetSender() {
291 const char* sender = dbus_message_get_sender(raw_message_);
292 return sender ? sender : "";
293 }
294
295 std::string Message::GetSignature() {
296 const char* signature = dbus_message_get_signature(raw_message_);
297 return signature ? signature : "";
298 }
299
300 uint32 Message::GetSerial() {
301 return dbus_message_get_serial(raw_message_);
302 }
303
304 uint32 Message::GetReplySerial() {
305 return dbus_message_get_reply_serial(raw_message_);
306 }
307
208 // 308 //
209 // MethodCall implementation. 309 // MethodCall implementation.
210 // 310 //
211 311
212 MethodCall::MethodCall(const std::string& interface_name, 312 MethodCall::MethodCall(const std::string& interface_name,
213 const std::string& method_name) 313 const std::string& method_name)
214 : Message(), 314 : Message() {
215 interface_name_(interface_name),
216 method_name_(method_name) {
217 reset_raw_message(dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_CALL)); 315 reset_raw_message(dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_CALL));
218 316
219 bool success = dbus_message_set_interface(raw_message(), 317 SetInterface(interface_name);
220 interface_name.c_str()); 318 SetMember(method_name);
221 CHECK(success) << "Unable to allocate memory";
222
223 success = dbus_message_set_member(raw_message(), method_name.c_str());
224 CHECK(success) << "Unable to allocate memory";
225 } 319 }
226 320
227 void MethodCall::SetServiceName(const std::string& service_name) { 321 MethodCall* MethodCall::FromRawMessage(DBusMessage* raw_message) {
228 const bool success = dbus_message_set_destination(raw_message(), 322 DCHECK_EQ(DBUS_MESSAGE_TYPE_METHOD_CALL, dbus_message_get_type(raw_message));
229 service_name.c_str());
230 CHECK(success) << "Unable to allocate memory";
231 }
232 323
233 void MethodCall::SetObjectPath(const std::string& object_path) { 324 const char* interface = dbus_message_get_interface(raw_message);
234 const bool success = dbus_message_set_path(raw_message(), 325 const char* member = dbus_message_get_member(raw_message);
235 object_path.c_str()); 326 std::string interface_string = interface ? interface : "";
236 CHECK(success) << "Unable to allocate memory"; 327 std::string member_string = member ? member : "";
328
329 MethodCall* method_call = new MethodCall(interface_string, member_string);
330 method_call->reset_raw_message(raw_message);
331 return method_call;
237 } 332 }
238 333
239 // 334 //
240 // Response implementation. 335 // Response implementation.
241 // 336 //
242 337
243 Response::Response() : Message() { 338 Response::Response() : Message() {
244 } 339 }
245 340
341 Response* Response::FromMethodCall(MethodCall* method_call) {
342 Response* response = new Response;
343 response->reset_raw_message(
344 dbus_message_new_method_return(method_call->raw_message()));
345 return response;
346 }
347
348 //
349 // ErrorResponse implementation.
350 //
351
352 ErrorResponse::ErrorResponse() : Message() {
353 }
354
355 ErrorResponse* ErrorResponse::FromMethodCall(
356 MethodCall* method_call,
357 const std::string& error_name,
358 const std::string& error_message) {
359 ErrorResponse* response = new ErrorResponse;
360 response->reset_raw_message(
361 dbus_message_new_error(method_call->raw_message(),
362 error_name.c_str(),
363 error_message.c_str()));
364 return response;
365 }
366
246 // 367 //
247 // MessageWriter implementation. 368 // MessageWriter implementation.
248 // 369 //
249 370
250 MessageWriter::MessageWriter(Message* message) : 371 MessageWriter::MessageWriter(Message* message) :
251 message_(message), 372 message_(message),
252 container_is_open_(false) { 373 container_is_open_(false) {
253 dbus_message_iter_init_append(message_->raw_message(), &raw_message_iter_); 374 dbus_message_iter_init_append(message_->raw_message(), &raw_message_iter_);
254 } 375 }
255 376
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 } 794 }
674 795
675 bool MessageReader::PopVariantOfBasic(int dbus_type, void* value) { 796 bool MessageReader::PopVariantOfBasic(int dbus_type, void* value) {
676 dbus::MessageReader variant_reader(message_); 797 dbus::MessageReader variant_reader(message_);
677 if (!PopVariant(&variant_reader)) 798 if (!PopVariant(&variant_reader))
678 return false; 799 return false;
679 return variant_reader.PopBasic(dbus_type, value); 800 return variant_reader.PopBasic(dbus_type, value);
680 } 801 }
681 802
682 } // namespace dbus 803 } // namespace dbus
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698