summaryrefslogtreecommitdiff
path: root/libs/protoutil
diff options
context:
space:
mode:
authorYi Jin <jinyithu@google.com>2017-10-30 16:07:20 -0700
committerYi Jin <jinyithu@google.com>2017-10-30 17:54:00 -0700
commit8ad193870b2f8d6f8478d591ced2100e22b23229 (patch)
tree7b9c03d0c754aa928543927d57e7dd0cd64a7686 /libs/protoutil
parent7d3fcb4361753387f4834fb3fe94fbe085d0abab (diff)
Create a new API allowing callers to concat a serialized message field.
Test: N/A Change-Id: I90570ea62e6c406d40c399cee6cbb8dcb5172e21
Diffstat (limited to 'libs/protoutil')
-rw-r--r--libs/protoutil/include/android/util/ProtoOutputStream.h3
-rw-r--r--libs/protoutil/src/ProtoOutputStream.cpp14
2 files changed, 16 insertions, 1 deletions
diff --git a/libs/protoutil/include/android/util/ProtoOutputStream.h b/libs/protoutil/include/android/util/ProtoOutputStream.h
index 10be6499417f..b8415b2e264b 100644
--- a/libs/protoutil/include/android/util/ProtoOutputStream.h
+++ b/libs/protoutil/include/android/util/ProtoOutputStream.h
@@ -66,7 +66,7 @@ public:
EncodedBuffer::iterator data();
bool flush(int fd);
- // Please don't use the following functions to dump protos unless you are sure about it.
+ // Please don't use the following functions to dump protos unless you are familiar with protobuf encoding.
void writeRawVarint(uint64_t varint);
void writeLengthDelimitedHeader(uint32_t id, size_t size);
void writeRawByte(uint8_t byte);
@@ -94,6 +94,7 @@ private:
inline void writeEnumImpl(uint32_t id, int val);
inline void writeBoolImpl(uint32_t id, bool val);
inline void writeUtf8StringImpl(uint32_t id, const char* val, size_t size);
+ inline void writeMessageBytesImpl(uint32_t id, const char* val, size_t size);
bool compact();
size_t editEncodedSize(size_t rawSize);
diff --git a/libs/protoutil/src/ProtoOutputStream.cpp b/libs/protoutil/src/ProtoOutputStream.cpp
index 9dadf1c20510..b91e3db0e39c 100644
--- a/libs/protoutil/src/ProtoOutputStream.cpp
+++ b/libs/protoutil/src/ProtoOutputStream.cpp
@@ -234,6 +234,10 @@ ProtoOutputStream::write(uint64_t fieldId, const char* val, size_t size)
case TYPE_BYTES:
writeUtf8StringImpl(id, val, size);
return true;
+ case TYPE_MESSAGE:
+ // can directly write valid format of message bytes into ProtoOutputStream without calling start/end
+ writeMessageBytesImpl(id, val, size);
+ return true;
default:
ALOGW("Field type %d is not supported when writing char[] val.",
(int)((fieldId & FIELD_TYPE_MASK) >> FIELD_TYPE_SHIFT));
@@ -678,6 +682,16 @@ ProtoOutputStream::writeUtf8StringImpl(uint32_t id, const char* val, size_t size
}
}
+inline void
+ProtoOutputStream::writeMessageBytesImpl(uint32_t id, const char* val, size_t size)
+{
+ if (val == NULL) return;
+ writeLengthDelimitedHeader(id, size);
+ for (size_t i=0; i<size; i++) {
+ mBuffer.writeRawByte(val[i]);
+ }
+}
+
} // util
} // android