| Index: net/quic/core/quic_data_writer.cc
|
| diff --git a/net/quic/core/quic_data_writer.cc b/net/quic/core/quic_data_writer.cc
|
| index 9b1c4261e084f6073d08bfaded177fa6ecd77195..3290dba471153fc718fa6342fcddba9de8c0b7e7 100644
|
| --- a/net/quic/core/quic_data_writer.cc
|
| +++ b/net/quic/core/quic_data_writer.cc
|
| @@ -8,21 +8,20 @@
|
| #include <limits>
|
|
|
| #include "net/quic/core/quic_utils.h"
|
| -#include "net/quic/platform/api/quic_endian.h"
|
| #include "net/quic/platform/api/quic_flags.h"
|
| #include "net/quic/platform/api/quic_logging.h"
|
|
|
| namespace net {
|
|
|
| -#define ENDPOINT \
|
| - (perspective_ == Perspective::IS_SERVER ? "Server: " : "Client: ")
|
| -
|
| QuicDataWriter::QuicDataWriter(size_t size,
|
| char* buffer,
|
| - Perspective perspective)
|
| - : buffer_(buffer), capacity_(size), length_(0), perspective_(perspective) {
|
| - QUIC_DVLOG(1) << ENDPOINT << "QuicDataReader";
|
| -}
|
| + Perspective perspective,
|
| + Endianness endianness)
|
| + : buffer_(buffer),
|
| + capacity_(size),
|
| + length_(0),
|
| + perspective_(perspective),
|
| + endianness_(endianness) {}
|
|
|
| QuicDataWriter::~QuicDataWriter() {}
|
|
|
| @@ -35,23 +34,39 @@ bool QuicDataWriter::WriteUInt8(uint8_t value) {
|
| }
|
|
|
| bool QuicDataWriter::WriteUInt16(uint16_t value) {
|
| + if (endianness_ == NETWORK_BYTE_ORDER) {
|
| + value = QuicEndian::HostToNet16(value);
|
| + }
|
| return WriteBytes(&value, sizeof(value));
|
| }
|
|
|
| bool QuicDataWriter::WriteUInt32(uint32_t value) {
|
| + if (endianness_ == NETWORK_BYTE_ORDER) {
|
| + value = QuicEndian::HostToNet32(value);
|
| + }
|
| return WriteBytes(&value, sizeof(value));
|
| }
|
|
|
| -bool QuicDataWriter::WriteUInt48(uint64_t value) {
|
| - uint16_t hi = static_cast<uint16_t>(value >> 32);
|
| - uint32_t lo = static_cast<uint32_t>(value);
|
| - return WriteUInt32(lo) && WriteUInt16(hi);
|
| -}
|
| -
|
| bool QuicDataWriter::WriteUInt64(uint64_t value) {
|
| + if (endianness_ == NETWORK_BYTE_ORDER) {
|
| + value = QuicEndian::HostToNet64(value);
|
| + }
|
| return WriteBytes(&value, sizeof(value));
|
| }
|
|
|
| +bool QuicDataWriter::WriteBytesToUInt64(size_t num_bytes, uint64_t value) {
|
| + if (num_bytes > sizeof(value)) {
|
| + return false;
|
| + }
|
| + if (endianness_ == HOST_BYTE_ORDER) {
|
| + return WriteBytes(&value, num_bytes);
|
| + }
|
| +
|
| + value = QuicEndian::HostToNet64(value);
|
| + return WriteBytes(reinterpret_cast<char*>(&value) + sizeof(value) - num_bytes,
|
| + num_bytes);
|
| +}
|
| +
|
| bool QuicDataWriter::WriteUFloat16(uint64_t value) {
|
| uint16_t result;
|
| if (value < (UINT64_C(1) << kUFloat16MantissaEffectiveBits)) {
|
| @@ -88,6 +103,9 @@ bool QuicDataWriter::WriteUFloat16(uint64_t value) {
|
| result = static_cast<uint16_t>(value + (exponent << kUFloat16MantissaBits));
|
| }
|
|
|
| + if (endianness_ == NETWORK_BYTE_ORDER) {
|
| + result = QuicEndian::HostToNet16(result);
|
| + }
|
| return WriteBytes(&result, sizeof(result));
|
| }
|
|
|
| @@ -159,7 +177,7 @@ bool QuicDataWriter::WriteConnectionId(uint64_t connection_id) {
|
| connection_id = QuicEndian::HostToNet64(connection_id);
|
| }
|
|
|
| - return WriteUInt64(connection_id);
|
| + return WriteBytes(&connection_id, sizeof(connection_id));
|
| }
|
|
|
| bool QuicDataWriter::WriteTag(uint32_t tag) {
|
|
|