mirror of
https://github.com/nadoo/glider.git
synced 2025-02-24 01:45:39 +08:00
http: fix #76
This commit is contained in:
parent
266578d67d
commit
2813e80a98
@ -16,7 +16,8 @@ checkduration=30
|
|||||||
dnsserver=208.67.222.222:53
|
dnsserver=208.67.222.222:53
|
||||||
|
|
||||||
# specify destinations
|
# specify destinations
|
||||||
#include=office.list
|
include=office.list
|
||||||
|
|
||||||
domain=example1.com
|
domain=example1.com
|
||||||
domain=example2.com
|
domain=example2.com
|
||||||
# matches ip
|
# matches ip
|
||||||
|
@ -162,8 +162,8 @@ func (s *HTTP) Serve(c net.Conn) {
|
|||||||
uri := u.String()
|
uri := u.String()
|
||||||
|
|
||||||
var reqBuf bytes.Buffer
|
var reqBuf bytes.Buffer
|
||||||
writeFirstLine(method, uri, proto, &reqBuf)
|
writeFirstLine(&reqBuf, method, uri, proto)
|
||||||
writeHeaders(reqHeader, &reqBuf)
|
writeHeaders(&reqBuf, reqHeader)
|
||||||
|
|
||||||
// send request to remote server
|
// send request to remote server
|
||||||
rc.Write(reqBuf.Bytes())
|
rc.Write(reqBuf.Bytes())
|
||||||
@ -194,8 +194,8 @@ func (s *HTTP) Serve(c net.Conn) {
|
|||||||
respHeader.Set("Connection", "close")
|
respHeader.Set("Connection", "close")
|
||||||
|
|
||||||
var respBuf bytes.Buffer
|
var respBuf bytes.Buffer
|
||||||
writeFirstLine(proto, code, status, &respBuf)
|
writeFirstLine(&respBuf, proto, code, status)
|
||||||
writeHeaders(respHeader, &respBuf)
|
writeHeaders(&respBuf, respHeader)
|
||||||
|
|
||||||
log.F("[http] %s <-> %s", c.RemoteAddr(), tgt)
|
log.F("[http] %s <-> %s", c.RemoteAddr(), tgt)
|
||||||
c.Write(respBuf.Bytes())
|
c.Write(respBuf.Bytes())
|
||||||
@ -309,7 +309,7 @@ func cleanHeaders(header textproto.MIMEHeader) {
|
|||||||
header.Del("Upgrade")
|
header.Del("Upgrade")
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeFirstLine(s1, s2, s3 string, buf *bytes.Buffer) {
|
func writeFirstLine(buf *bytes.Buffer, s1, s2, s3 string) {
|
||||||
buf.Write([]byte(s1))
|
buf.Write([]byte(s1))
|
||||||
buf.Write([]byte(" "))
|
buf.Write([]byte(" "))
|
||||||
buf.Write([]byte(s2))
|
buf.Write([]byte(s2))
|
||||||
@ -318,18 +318,15 @@ func writeFirstLine(s1, s2, s3 string, buf *bytes.Buffer) {
|
|||||||
buf.Write([]byte("\r\n"))
|
buf.Write([]byte("\r\n"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeHeaders(header textproto.MIMEHeader, buf *bytes.Buffer) {
|
func writeHeaders(buf *bytes.Buffer, header textproto.MIMEHeader) {
|
||||||
for key, values := range header {
|
for key, values := range header {
|
||||||
|
for _, v := range values {
|
||||||
buf.Write([]byte(key))
|
buf.Write([]byte(key))
|
||||||
buf.Write([]byte(": "))
|
buf.Write([]byte(": "))
|
||||||
for k, v := range values {
|
|
||||||
buf.Write([]byte(v))
|
buf.Write([]byte(v))
|
||||||
if k > 0 {
|
|
||||||
buf.Write([]byte(" "))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
buf.Write([]byte("\r\n"))
|
buf.Write([]byte("\r\n"))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//header ended
|
//header ended
|
||||||
buf.Write([]byte("\r\n"))
|
buf.Write([]byte("\r\n"))
|
||||||
|
@ -75,9 +75,8 @@ func (p *MixedProxy) ListenAndServe(c net.Conn) {
|
|||||||
|
|
||||||
if c == nil {
|
if c == nil {
|
||||||
go p.socks5.ListenAndServeUDP()
|
go p.socks5.ListenAndServeUDP()
|
||||||
l, err := net.Listen("tcp", p.addr)
|
|
||||||
|
|
||||||
//l, err := net.Listen("tcp", p.addr)
|
l, err := net.Listen("tcp", p.addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.F("[mixed] failed to listen on %s: %v", p.addr, err)
|
log.F("[mixed] failed to listen on %s: %v", p.addr, err)
|
||||||
return
|
return
|
||||||
|
@ -207,10 +207,13 @@ func (c *Conn) DecodeRespHeader() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
stream := cipher.NewCFBDecrypter(block, c.respBodyIV[:])
|
stream := cipher.NewCFBDecrypter(block, c.respBodyIV[:])
|
||||||
|
|
||||||
buf := make([]byte, 4)
|
buf := make([]byte, 4)
|
||||||
if _, err := io.ReadFull(c.Conn, buf); err != nil {
|
_, err = io.ReadFull(c.Conn, buf)
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
stream.XORKeyStream(buf, buf)
|
stream.XORKeyStream(buf, buf)
|
||||||
|
|
||||||
if buf[0] != c.reqRespV {
|
if buf[0] != c.reqRespV {
|
||||||
|
Loading…
Reference in New Issue
Block a user