OLD | NEW |
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 #include "dbus/message.h" | 5 #include "dbus/message.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/format_macros.h" | 10 #include "base/format_macros.h" |
11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "base/string_util.h" |
12 #include "base/stringprintf.h" | 13 #include "base/stringprintf.h" |
13 #include "dbus/object_path.h" | 14 #include "dbus/object_path.h" |
14 #include "third_party/protobuf/src/google/protobuf/message_lite.h" | 15 #include "third_party/protobuf/src/google/protobuf/message_lite.h" |
15 | 16 |
16 namespace { | 17 namespace { |
17 | 18 |
18 // Appends the header name and the value to |output|, if the value is | 19 // Appends the header name and the value to |output|, if the value is |
19 // not empty. | 20 // not empty. |
20 static void AppendStringHeader(const std::string& header_name, | 21 static void AppendStringHeader(const std::string& header_name, |
21 const std::string& header_value, | 22 const std::string& header_value, |
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 | 476 |
476 void MessageWriter::AppendUint64(uint64 value) { | 477 void MessageWriter::AppendUint64(uint64 value) { |
477 AppendBasic(DBUS_TYPE_UINT64, &value); | 478 AppendBasic(DBUS_TYPE_UINT64, &value); |
478 } | 479 } |
479 | 480 |
480 void MessageWriter::AppendDouble(double value) { | 481 void MessageWriter::AppendDouble(double value) { |
481 AppendBasic(DBUS_TYPE_DOUBLE, &value); | 482 AppendBasic(DBUS_TYPE_DOUBLE, &value); |
482 } | 483 } |
483 | 484 |
484 void MessageWriter::AppendString(const std::string& value) { | 485 void MessageWriter::AppendString(const std::string& value) { |
| 486 // D-Bus Specification (0.19) says a string "must be valid UTF-8". |
| 487 CHECK(IsStringUTF8(value)); |
485 const char* pointer = value.c_str(); | 488 const char* pointer = value.c_str(); |
486 AppendBasic(DBUS_TYPE_STRING, &pointer); | 489 AppendBasic(DBUS_TYPE_STRING, &pointer); |
487 // TODO(satorux): It may make sense to return an error here, as the | 490 // TODO(satorux): It may make sense to return an error here, as the |
488 // input string can be large. If needed, we could add something like | 491 // input string can be large. If needed, we could add something like |
489 // bool AppendStringWithErrorChecking(). | 492 // bool AppendStringWithErrorChecking(). |
490 } | 493 } |
491 | 494 |
492 void MessageWriter::AppendObjectPath(const ObjectPath& value) { | 495 void MessageWriter::AppendObjectPath(const ObjectPath& value) { |
| 496 CHECK(value.IsValid()); |
493 const char* pointer = value.value().c_str(); | 497 const char* pointer = value.value().c_str(); |
494 AppendBasic(DBUS_TYPE_OBJECT_PATH, &pointer); | 498 AppendBasic(DBUS_TYPE_OBJECT_PATH, &pointer); |
495 } | 499 } |
496 | 500 |
497 // Ideally, client shouldn't need to supply the signature string, but | 501 // Ideally, client shouldn't need to supply the signature string, but |
498 // the underlying D-Bus library requires us to supply this before | 502 // the underlying D-Bus library requires us to supply this before |
499 // appending contents to array and variant. It's technically possible | 503 // appending contents to array and variant. It's technically possible |
500 // for us to design API that doesn't require the signature but it will | 504 // for us to design API that doesn't require the signature but it will |
501 // complicate the implementation so we decided to have the signature | 505 // complicate the implementation so we decided to have the signature |
502 // parameter. Hopefully, variants are less used in request messages from | 506 // parameter. Hopefully, variants are less used in request messages from |
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
952 const bool success = PopBasic(DBUS_TYPE_UNIX_FD, &fd); | 956 const bool success = PopBasic(DBUS_TYPE_UNIX_FD, &fd); |
953 if (!success) | 957 if (!success) |
954 return false; | 958 return false; |
955 | 959 |
956 value->PutValue(fd); | 960 value->PutValue(fd); |
957 // NB: the caller must check validity before using the value | 961 // NB: the caller must check validity before using the value |
958 return true; | 962 return true; |
959 } | 963 } |
960 | 964 |
961 } // namespace dbus | 965 } // namespace dbus |
OLD | NEW |