| // Copyright 2024 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| //go:build go1.24 |
| |
| package http3 |
| |
| import "fmt" |
| |
| // Stream types. |
| // |
| // For unidirectional streams, the value is the stream type sent over the wire. |
| // |
| // For bidirectional streams (which are always request streams), |
| // the value is arbitrary and never sent on the wire. |
| type streamType int64 |
| |
| const ( |
| // Bidirectional request stream. |
| // All bidirectional streams are request streams. |
| // This stream type is never sent over the wire. |
| // |
| // https://www.rfc-editor.org/rfc/rfc9114.html#section-6.1 |
| streamTypeRequest = streamType(-1) |
| |
| // https://www.rfc-editor.org/rfc/rfc9114.html#section-6.2 |
| streamTypeControl = streamType(0x00) |
| streamTypePush = streamType(0x01) |
| |
| // https://www.rfc-editor.org/rfc/rfc9204.html#section-4.2 |
| streamTypeEncoder = streamType(0x02) |
| streamTypeDecoder = streamType(0x03) |
| ) |
| |
| func (stype streamType) String() string { |
| switch stype { |
| case streamTypeRequest: |
| return "request" |
| case streamTypeControl: |
| return "control" |
| case streamTypePush: |
| return "push" |
| case streamTypeEncoder: |
| return "encoder" |
| case streamTypeDecoder: |
| return "decoder" |
| default: |
| return "unknown" |
| } |
| } |
| |
| // Frame types. |
| type frameType int64 |
| |
| const ( |
| // https://www.rfc-editor.org/rfc/rfc9114.html#section-7.2 |
| frameTypeData = frameType(0x00) |
| frameTypeHeaders = frameType(0x01) |
| frameTypeCancelPush = frameType(0x03) |
| frameTypeSettings = frameType(0x04) |
| frameTypePushPromise = frameType(0x05) |
| frameTypeGoaway = frameType(0x07) |
| frameTypeMaxPushID = frameType(0x0d) |
| ) |
| |
| func (ftype frameType) String() string { |
| switch ftype { |
| case frameTypeData: |
| return "DATA" |
| case frameTypeHeaders: |
| return "HEADERS" |
| case frameTypeCancelPush: |
| return "CANCEL_PUSH" |
| case frameTypeSettings: |
| return "SETTINGS" |
| case frameTypePushPromise: |
| return "PUSH_PROMISE" |
| case frameTypeGoaway: |
| return "GOAWAY" |
| case frameTypeMaxPushID: |
| return "MAX_PUSH_ID" |
| default: |
| return fmt.Sprintf("UNKNOWN_%d", int64(ftype)) |
| } |
| } |