@marcel91200 / caddy Mirror · read-only
Fork 0

Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS

Mirrored from https://github.com/Slazee/caddy.git

Synced Nov 11, 02:15 UTC

master
go 58 lines 1.35 KB
Raw
1 // Copyright 2015 Matthew Holt and The Caddy Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 package fastcgi
16
17 import (
18 "encoding/binary"
19 "errors"
20 "io"
21 )
22
23 type record struct {
24 h header
25 lr io.LimitedReader
26 padding int64
27 }
28
29 func (rec *record) fill(r io.Reader) (err error) {
30 rec.lr.N = rec.padding
31 rec.lr.R = r
32 if _, err = io.Copy(io.Discard, rec); err != nil {
33 return err
34 }
35
36 if err = binary.Read(r, binary.BigEndian, &rec.h); err != nil {
37 return err
38 }
39 if rec.h.Version != 1 {
40 err = errors.New("fcgi: invalid header version")
41 return err
42 }
43 if rec.h.Type == EndRequest {
44 err = io.EOF
45 return err
46 }
47 rec.lr.N = int64(rec.h.ContentLength)
48 rec.padding = int64(rec.h.PaddingLength)
49 return err
50 }
51
52 func (rec *record) Read(p []byte) (n int, err error) {
53 return rec.lr.Read(p)
54 }
55
56 func (rec *record) hasMore() bool {
57 return rec.lr.N > 0
58 }