mirror of
https://github.com/bettercap/bettercap
synced 2025-07-16 10:03:39 -07:00
42 lines
855 B
Go
42 lines
855 B
Go
package vhost
|
|
|
|
import (
|
|
"bufio"
|
|
"net"
|
|
"net/http"
|
|
)
|
|
|
|
type HTTPConn struct {
|
|
*sharedConn
|
|
Request *http.Request
|
|
}
|
|
|
|
// HTTP parses the head of the first HTTP request on conn and returns
|
|
// a new, unread connection with metadata for virtual host muxing
|
|
func HTTP(conn net.Conn) (httpConn *HTTPConn, err error) {
|
|
c, rd := newShared(conn)
|
|
|
|
httpConn = &HTTPConn{sharedConn: c}
|
|
if httpConn.Request, err = http.ReadRequest(bufio.NewReader(rd)); err != nil {
|
|
return
|
|
}
|
|
|
|
// You probably don't need access to the request body and this makes the API
|
|
// simpler by allowing you to call Free() optionally
|
|
httpConn.Request.Body.Close()
|
|
|
|
return
|
|
}
|
|
|
|
// Free sets Request to nil so that it can be garbage collected
|
|
func (c *HTTPConn) Free() {
|
|
c.Request = nil
|
|
}
|
|
|
|
func (c *HTTPConn) Host() string {
|
|
if c.Request == nil {
|
|
return ""
|
|
}
|
|
|
|
return c.Request.Host
|
|
}
|