blob: 533e3a1f42051f4da642d845282f14690fed9373 [file] [log] [blame]
QUICHE teama6ef0a62019-03-07 20:34:33 -05001// Copyright (c) 2018 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/third_party/quiche/src/quic/core/qpack/qpack_encoder_stream_sender.h"
6
7#include <cstddef>
8#include <limits>
vasilvv872e7a32019-03-12 16:42:44 -07009#include <string>
QUICHE teama6ef0a62019-03-07 20:34:33 -050010
11#include "net/third_party/quiche/src/quic/core/qpack/qpack_constants.h"
12#include "net/third_party/quiche/src/quic/platform/api/quic_logging.h"
QUICHE teama6ef0a62019-03-07 20:34:33 -050013
14namespace quic {
15
renjietang8a2df8f2019-08-07 10:43:52 -070016QpackEncoderStreamSender::QpackEncoderStreamSender() : delegate_(nullptr) {}
QUICHE teama6ef0a62019-03-07 20:34:33 -050017
bnc609c24e2019-09-10 05:24:32 -070018QuicByteCount QpackEncoderStreamSender::SendInsertWithNameReference(
QUICHE teama6ef0a62019-03-07 20:34:33 -050019 bool is_static,
20 uint64_t name_index,
21 QuicStringPiece value) {
bnc28bb06c2019-07-17 05:21:10 -070022 values_.s_bit = is_static;
23 values_.varint = name_index;
24 values_.value = value;
QUICHE teama6ef0a62019-03-07 20:34:33 -050025
vasilvvc48c8712019-03-11 13:38:16 -070026 std::string output;
bnc28bb06c2019-07-17 05:21:10 -070027 instruction_encoder_.Encode(InsertWithNameReferenceInstruction(), values_,
28 &output);
renjietangc2aa5cb2019-06-20 12:22:53 -070029 delegate_->WriteStreamData(output);
bnc609c24e2019-09-10 05:24:32 -070030 return output.size();
QUICHE teama6ef0a62019-03-07 20:34:33 -050031}
32
bnc609c24e2019-09-10 05:24:32 -070033QuicByteCount QpackEncoderStreamSender::SendInsertWithoutNameReference(
QUICHE teama6ef0a62019-03-07 20:34:33 -050034 QuicStringPiece name,
35 QuicStringPiece value) {
bnc28bb06c2019-07-17 05:21:10 -070036 values_.name = name;
37 values_.value = value;
QUICHE teama6ef0a62019-03-07 20:34:33 -050038
vasilvvc48c8712019-03-11 13:38:16 -070039 std::string output;
bnc28bb06c2019-07-17 05:21:10 -070040 instruction_encoder_.Encode(InsertWithoutNameReferenceInstruction(), values_,
41 &output);
renjietangc2aa5cb2019-06-20 12:22:53 -070042 delegate_->WriteStreamData(output);
bnc609c24e2019-09-10 05:24:32 -070043 return output.size();
QUICHE teama6ef0a62019-03-07 20:34:33 -050044}
45
bnc609c24e2019-09-10 05:24:32 -070046QuicByteCount QpackEncoderStreamSender::SendDuplicate(uint64_t index) {
bnc28bb06c2019-07-17 05:21:10 -070047 values_.varint = index;
QUICHE teama6ef0a62019-03-07 20:34:33 -050048
vasilvvc48c8712019-03-11 13:38:16 -070049 std::string output;
bnc28bb06c2019-07-17 05:21:10 -070050 instruction_encoder_.Encode(DuplicateInstruction(), values_, &output);
renjietangc2aa5cb2019-06-20 12:22:53 -070051 delegate_->WriteStreamData(output);
bnc609c24e2019-09-10 05:24:32 -070052 return output.size();
QUICHE teama6ef0a62019-03-07 20:34:33 -050053}
54
bnc609c24e2019-09-10 05:24:32 -070055QuicByteCount QpackEncoderStreamSender::SendSetDynamicTableCapacity(
56 uint64_t capacity) {
bnc28bb06c2019-07-17 05:21:10 -070057 values_.varint = capacity;
QUICHE teama6ef0a62019-03-07 20:34:33 -050058
vasilvvc48c8712019-03-11 13:38:16 -070059 std::string output;
bnc28bb06c2019-07-17 05:21:10 -070060 instruction_encoder_.Encode(SetDynamicTableCapacityInstruction(), values_,
61 &output);
renjietangc2aa5cb2019-06-20 12:22:53 -070062 delegate_->WriteStreamData(output);
bnc609c24e2019-09-10 05:24:32 -070063 return output.size();
QUICHE teama6ef0a62019-03-07 20:34:33 -050064}
65
66} // namespace quic