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) RawData() []byte
- func (r *Request) SetAutoCompleteHeaders(value bool)
- func (r *Request) SetData(data []byte) error
- func (r *Request) SetHeaders(h Header)
- func (r *Request) SetRawData(raw []byte) error
- 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, an initial request line, and headers
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) SetRawData ¶
SetRawData sets the data using raw bytes
When using raw data, no other checks will be done. You are responsible of creating the request line, all the headers, and body. You can use only one of raw or data.
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