Documentation
¶
Overview ¶
Package ftwhttp provides low level abstractions for sending/receiving raw http messages
Index ¶
- Constants
- func BuildRequest(r *Request) ([]byte, error)
- type Client
- func (c *Client) Do(req Request) (*Response, error)
- func (c *Client) GetRoundTripTime() *RoundTripTime
- func (c *Client) NewConnection(d Destination) error
- func (c *Client) NewOrReusedConnection(d Destination) error
- func (c *Client) SetRateLimiter(limiter *rate.Limiter)
- func (c *Client) SetRootCAs(cas *x509.CertPool)
- func (c *Client) StartTrackingTime()
- func (c *Client) StopTrackingTime()
- type ClientConfig
- type Connection
- type Destination
- type FTWConnection
- type Header
- func (h Header) Add(key, value string)
- func (h Header) Clone() Header
- func (h Header) Del(key string)
- func (h Header) Get(key string) string
- func (h Header) Set(key, value string)
- func (h Header) Value(key string) string
- func (h Header) Write(w io.Writer) error
- func (h Header) WriteBytes(b *bytes.Buffer) (int, error)
- type Request
- func (r *Request) AddHeader(name string, value string)
- func (r *Request) AddStandardHeaders()
- func (r Request) Data() []byte
- func (r Request) Headers() Header
- func (r *Request) SetAutoCompleteHeaders(value bool)
- func (r *Request) SetData(data []byte) error
- func (r *Request) SetHeaders(h Header)
- func (r Request) WithAutoCompleteHeaders() bool
- type RequestLine
- type Response
- type RoundTripTime
Constants ¶
const ( // ContentTypeHeader gives you the string for content type ContentTypeHeader string = "Content-Type" )
Variables ¶
This section is empty.
Functions ¶
func BuildRequest ¶ added in v1.1.2
The request should be created with anything we want. We want to actually break HTTP.
Types ¶
type Client ¶
type Client struct { Transport *Connection Jar http.CookieJar // contains filtered or unexported fields }
Client is the top level abstraction in http
func NewClient ¶
func NewClient(config ClientConfig) (*Client, error)
NewClient initializes the http client, creating the cookiejar
func (*Client) GetRoundTripTime ¶
func (c *Client) GetRoundTripTime() *RoundTripTime
GetRoundTripTime returns the time taken from the initial send till receiving the full response
func (*Client) NewConnection ¶
func (c *Client) NewConnection(d Destination) error
NewConnection creates a new Connection based on a Destination
func (*Client) NewOrReusedConnection ¶
func (c *Client) NewOrReusedConnection(d Destination) error
NewOrReusedConnection reuses an existing connection, or creates a new one if no connection has been set up yet
func (*Client) SetRateLimiter ¶ added in v1.0.0
SetRateLimiter sets the rate limiter for the client.
func (*Client) SetRootCAs ¶ added in v0.5.0
SetRootCAs sets the root CAs for the client. This can be used if you are using internal certificates and for testing purposes.
func (*Client) StartTrackingTime ¶
func (c *Client) StartTrackingTime()
StartTrackingTime sets the timer to start transactions. This will be the starting time in logs.
func (*Client) StopTrackingTime ¶
func (c *Client) StopTrackingTime()
StopTrackingTime stops the timer. When looking at logs, we will read up to this one.
type ClientConfig ¶
type ClientConfig struct { // ConnectTimeout is the timeout for connecting to a server. ConnectTimeout time.Duration // ReadTimeout is the timeout for reading a response. ReadTimeout time.Duration // RootCAs is the set of root CA certificates that is used to verify server RootCAs *x509.CertPool // RateLimiter is the rate limiter to use for requests. RateLimiter *rate.Limiter }
ClientConfig provides configuration options for the HTTP client.
func NewClientConfig ¶
func NewClientConfig() ClientConfig
NewClientConfig returns a new ClientConfig with reasonable defaults.
type Connection ¶
type Connection struct {
// contains filtered or unexported fields
}
Connection is the type used for sending/receiving data
func (*Connection) GetTrackedTime ¶
func (c *Connection) GetTrackedTime() *RoundTripTime
GetTrackedTime will return the time since the request started and the response was parsed
func (*Connection) Request ¶
func (c *Connection) Request(request *Request) error
Request will use all the inputs and send a raw http request to the destination
func (*Connection) Response ¶
func (c *Connection) Response() (*Response, error)
Response reads the response sent by the WAF and return the corresponding struct It leverages the go stdlib for reading and parsing the response
func (*Connection) StartTrackingTime ¶
func (c *Connection) StartTrackingTime()
StartTrackingTime initializes timer
func (*Connection) StopTrackingTime ¶
func (c *Connection) StopTrackingTime()
StopTrackingTime stops timer
type Destination ¶
type Destination struct { DestAddr string `default:"localhost"` Port int `default:"80"` Protocol string `default:"http"` }
Destination is the host, port and protocol to be used when connecting to a remote host
func DestinationFromString ¶
func DestinationFromString(urlString string) (*Destination, error)
DestinationFromString create a Destination from String
type FTWConnection ¶
type FTWConnection interface { Request(*Request) Response(*Response) GetTrackedTime() *RoundTripTime // contains filtered or unexported methods }
FTWConnection is the interface method implement to send and receive data
type Header ¶
Header is a simplified version of headers, where there is only one header per key. The original golang stdlib uses a proper string slice to map this.
func (Header) Add ¶
Add adds the (key, value) pair to the headers if it does not exist The key is case-insensitive
func (Header) Get ¶
Get gets the value associated with the given key. If there are no values associated with the key, Get returns "". The key is case-insensitive
func (Header) Set ¶
Set sets the header entries associated with key to the single element value. It replaces any existing values associated with a case-insensitive key.
type Request ¶
type Request struct {
// contains filtered or unexported fields
}
Request represents a request This struct without defaults represents the previous "autocomplete headers" behavior
func NewRawRequest ¶
NewRawRequest creates a new request from raw data
func NewRequest ¶
func NewRequest(reqLine *RequestLine, h Header, data []byte, autocompleteHeaders bool) *Request
NewRequest creates a new request, an initial request line, and headers
func (*Request) AddStandardHeaders ¶
func (r *Request) AddStandardHeaders()
AddStandardHeaders adds standard headers to the request, if they don't exist
AddStandardHeaders does the following:
- adds `Connection` header with `close` value (if not set) to improve performance
- adds `Content-Length` header if payload size > 0 or the request method permits a body (the spec says that the client SHOULD send `Content-Length` in that case)
func (*Request) SetAutoCompleteHeaders ¶
SetAutoCompleteHeaders sets the value to the corresponding bool
func (*Request) SetHeaders ¶
SetHeaders sets the request headers
func (Request) WithAutoCompleteHeaders ¶
WithAutoCompleteHeaders returns true when we need to add additional headers to complete the request
type RequestLine ¶
type RequestLine struct { Method string `default:"GET"` Version string `default:"HTTP/1.1"` URI string `default:"/"` }
RequestLine is the first line in the HTTP request dialog
func (RequestLine) ToString ¶
func (rl RequestLine) ToString() string
ToString converts the request line to string for sending it in the wire
type Response ¶
Response represents the http response received from the server/waf
func (*Response) GetFullResponse ¶ added in v0.5.0
GetFullResponse gives the full response as string, or nil if there was some error
type RoundTripTime ¶
type RoundTripTime struct {
// contains filtered or unexported fields
}
RoundTripTime abstracts the time a transaction takes
func NewRoundTripTime ¶
func NewRoundTripTime() *RoundTripTime
NewRoundTripTime initializes a roundtriptime struct
func (*RoundTripTime) RoundTripDuration ¶
func (rtt *RoundTripTime) RoundTripDuration() time.Duration
RoundTripDuration gives the total time spent in this roundtrip
func (*RoundTripTime) StartTime ¶
func (rtt *RoundTripTime) StartTime() time.Time
StartTime returns the time when this round trip started
func (*RoundTripTime) StartTracking ¶
func (rtt *RoundTripTime) StartTracking()
StartTracking sets the initial time to Now
func (*RoundTripTime) StopTime ¶
func (rtt *RoundTripTime) StopTime() time.Time
StopTime returns the time when this round trip was stopped
func (*RoundTripTime) StopTracking ¶
func (rtt *RoundTripTime) StopTracking()
StopTracking sets the finish time to Now