// Copyright 2025 Envoy Project Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
//     http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package envoy.extensions.filters.network.generic_proxy.codecs.http1.v3;

import "google/protobuf/wrappers.proto";

import "xds/annotations/v3/status.proto";

import "udpa/annotations/status.proto";

option java_package = "io.envoyproxy.envoy.extensions.filters.network.generic_proxy.codecs.http1.v3";
option java_outer_classname = "Http1Proto";
option java_multiple_files = true;
option go_package = "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/network/generic_proxy/codecs/http1/v3;http1v3";
option (udpa.annotations.file_status).package_version_status = ACTIVE;
option (xds.annotations.v3.file_status).work_in_progress = true;

// [#protodoc-title: HTTP1 codec configuration for Generic Proxy]
// [#extension: envoy.generic_proxy.codecs.http1]

// Configuration for HTTP codec. This HTTP1 codec is used to parse and serialize HTTP1 messages
// for the generic proxy filter.
// Any decoding error will result in the generic proxy closing the connection.
//
// .. note::
//   This codec only supports HTTP1.1 messages and does not support HTTP1.0 messages. And it limits
//   part of the HTTP1.1 features, such as upgrade, connect, etc.
//   This codec is mainly designed for the features evaluation of the generic proxy filter. Please
//   be cautious when using it in production.
message Http1CodecConfig {
  // If true, the codec will parse and serialize HTTP1 messages in a single frame per message.
  //
  // A frame is a minimal unit of data that can be processed by the generic proxy. If false, the
  // codec will parse and serialize HTTP1 messages in a streaming way. In this case, the codec
  // will output multiple frames for a single HTTP1 message to the generic proxy.
  // If true, the codec will buffer the entire HTTP1 message body before sending it to the generic
  // proxy. This may have better performance in small message scenarios and is more friendly to
  // handle the HTTP1 message body. This also may result in higher memory usage and latency if
  // the message body is large.
  //
  // Default is true.
  google.protobuf.BoolValue single_frame_mode = 1;

  // The maximum size of the HTTP1 message body in bytes. If not set, 8*1024*1024 (8MB) is used.
  // This only makes sense when single_frame_mode is true.
  // If the HTTP1 message body size exceeds this value, this will result in a decoding error
  // and the generic proxy will close the connection.
  google.protobuf.UInt32Value max_buffer_size = 2;
}
