github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/net/http/httputil/persist.go (about)

     1  // Copyright 2009 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package httputil
     6  
     7  import (
     8  	"github.com/shogo82148/std/bufio"
     9  	"github.com/shogo82148/std/io"
    10  	"github.com/shogo82148/std/net"
    11  	"github.com/shogo82148/std/net/http"
    12  	"github.com/shogo82148/std/net/textproto"
    13  	"github.com/shogo82148/std/sync"
    14  )
    15  
    16  var (
    17  	// Deprecated: 使用されていません。
    18  	ErrPersistEOF = &http.ProtocolError{ErrorString: "persistent connection closed"}
    19  
    20  	// Deprecated: 使用されていません。
    21  	ErrClosed = &http.ProtocolError{ErrorString: "connection closed by user"}
    22  
    23  	// Deprecated: 使用されていません。
    24  	ErrPipeline = &http.ProtocolError{ErrorString: "pipeline error"}
    25  )
    26  
    27  // ServerConnはGoの初期のHTTP実装の遺物です。
    28  // それは低レベルで古く、Goの現在のHTTPスタックでは使用されていません。
    29  // Go 1よりも前に削除すべきでした。
    30  //
    31  // Deprecated: 代わりに [net/http] パッケージのServerを使用してください。
    32  type ServerConn struct {
    33  	mu              sync.Mutex
    34  	c               net.Conn
    35  	r               *bufio.Reader
    36  	re, we          error
    37  	lastbody        io.ReadCloser
    38  	nread, nwritten int
    39  	pipereq         map[*http.Request]uint
    40  
    41  	pipe textproto.Pipeline
    42  }
    43  
    44  // NewServerConnはGoの初期のHTTP実装の遺物です。
    45  // これは低レベルで古いものであり、現行のGoのHTTPスタックでは使用されていません。
    46  // Go 1より前に削除すべきでした。
    47  //
    48  // Deprecated: 代わりに package [net/http] のServerを使用してください。
    49  func NewServerConn(c net.Conn, r *bufio.Reader) *ServerConn
    50  
    51  // Hijackは [ServerConn] を切り離し、基礎となる接続と、残っているデータを持つ読み込み側のbufioを返します。 HijackはReadがkeep-aliveロジックの終了を示すまえに呼び出される可能性があります。ユーザーは [ServerConn.Read] や [ServerConn.Write] が進行中の間にHijackを呼び出すべきではありません。
    52  func (sc *ServerConn) Hijack() (net.Conn, *bufio.Reader)
    53  
    54  // Closeによって [ServerConn.Hijack] され、その後基礎となる接続も閉じます。
    55  func (sc *ServerConn) Close() error
    56  
    57  // Readはワイヤ上の次のリクエストを返します。[ErrPersistEOF] は、優雅にもうリクエストがないことが確定した場合に返されます(例えば、HTTP/1.0接続の最初のリクエスト後、またはHTTP/1.1接続のConnection: close後など)。
    58  func (sc *ServerConn) Read() (*http.Request, error)
    59  
    60  // Pendingは、接続されたリクエストの未回答数を返します。
    61  func (sc *ServerConn) Pending() int
    62  
    63  // Writeはreqに応じたrespを書き込みます。接続を正常に終了させるためには、
    64  // Response.Closeフィールドをtrueに設定してください。Writeは、[ServerConn.Read] 側で返される
    65  // すべてのエラーに関係なく、エラーが返されるまで操作可能であると見なされるべきです。
    66  func (sc *ServerConn) Write(req *http.Request, resp *http.Response) error
    67  
    68  // ClientConnはGoの初期のHTTP実装の遺物です。
    69  // 低レベルで古く、現在のGoのHTTPスタックでは使用されていません。
    70  // Go 1の前に削除すべきでした。
    71  //
    72  // Deprecated: 代わりにpackage [net/http] のClientまたはTransportを使用してください。
    73  type ClientConn struct {
    74  	mu              sync.Mutex
    75  	c               net.Conn
    76  	r               *bufio.Reader
    77  	re, we          error
    78  	lastbody        io.ReadCloser
    79  	nread, nwritten int
    80  	pipereq         map[*http.Request]uint
    81  
    82  	pipe     textproto.Pipeline
    83  	writeReq func(*http.Request, io.Writer) error
    84  }
    85  
    86  // NewClientConnはGoの初期のHTTP実装の遺産です。
    87  // これは低レベルで古く、現在のGoのHTTPスタックでは使用されていません。
    88  // Go 1より前に削除すべきでした。
    89  //
    90  // Deprecated: 代わりにパッケージ [net/http] のClientまたはTransportを使用してください。
    91  func NewClientConn(c net.Conn, r *bufio.Reader) *ClientConn
    92  
    93  // NewProxyClientConn はGo言語の初期のHTTP実装の遺物です。
    94  // これは低レベルで古く、現在のGoのHTTPスタックでは使用されていません。
    95  // Go 1 より前に削除する必要があります。
    96  //
    97  // Deprecated: 代わりに package [net/http] の Client または Transport を使用してください。
    98  func NewProxyClientConn(c net.Conn, r *bufio.Reader) *ClientConn
    99  
   100  // Hijackは [ClientConn] を切り離し、基礎となる接続と読み込み側のbufioを返します。
   101  // また、左にデータが残っているかもしれない読み込み側のbufioも返します。
   102  // HijackはユーザーまたはReadがkeep-aliveロジックの終了をシグナルした前に呼び出すことができます。
   103  // ユーザーは、[ClientConn.Read] または ClientConn.Writeが進行中の間にHijackを呼び出さないでください。
   104  func (cc *ClientConn) Hijack() (c net.Conn, r *bufio.Reader)
   105  
   106  // Closeは [ClientConn.Hijack] を呼び出し、その後下層の接続も閉じます。
   107  func (cc *ClientConn) Close() error
   108  
   109  // Writeはリクエストを書き込みます。もしHTTP keep-aliveによって接続が閉じられた場合、[ErrPersistEOF] エラーが返されます。もしreq.Closeがtrueの場合、このリクエストの後にkeep-alive接続が論理的に閉じられ、対向サーバーに通知されます。ErrUnexpectedEOFは、リモートが基礎となるTCP接続を閉じたことを示しており、通常は正常な終了と見なされます。
   110  func (cc *ClientConn) Write(req *http.Request) error
   111  
   112  // Pendingは、接続に送信された未応答のリクエストの数を返します。
   113  func (cc *ClientConn) Pending() int
   114  
   115  // Readはワイヤから次のレスポンスを読み込みます。有効なレスポンスは [ErrPersistEOF] と一緒に返される場合があります。これはリモートがこれがサービスされる最後のリクエストであることを要求したことを意味します。Readは [ClientConn.Write] と同時に呼び出すことができますが、他のReadと同時には呼び出すことはできません。
   116  func (cc *ClientConn) Read(req *http.Request) (resp *http.Response, err error)
   117  
   118  // Doはリクエストを書き込み、レスポンスを読み取る便利なメソッドです。
   119  func (cc *ClientConn) Do(req *http.Request) (*http.Response, error)