From 377fd4e39235122362b4313af814dbb2450e9ab0 Mon Sep 17 00:00:00 2001 From: Chen Yufei Date: Thu, 22 Aug 2013 21:00:42 +0800 Subject: [PATCH] Take as self request if URL path seem like getting PAC. --- pac.go | 9 +++++---- proxy.go | 9 ++++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/pac.go b/pac.go index 6a3eaf0f..00a4b3f7 100644 --- a/pac.go +++ b/pac.go @@ -197,9 +197,10 @@ func initPAC() { }() } -func sendPAC(c *clientConn) { - if _, err := c.Write(genPAC(c)); err != nil { - debug.Println("Error sending PAC file") - return +func sendPAC(c *clientConn) error { + _, err := c.Write(genPAC(c)) + if err != nil { + debug.Printf("cli(%s) error sending PAC:", c.RemoteAddr(), err) } + return err } diff --git a/proxy.go b/proxy.go index ac223f81..73a55824 100644 --- a/proxy.go +++ b/proxy.go @@ -215,6 +215,12 @@ func isSelfRequest(r *Request) bool { } // Maxthon sometimes sends requests without host in request line, // in that case, get host information from Host header. + // But if client PAC setting is using cow server's DNS name, we can't + // decide if the request is for cow itself (need reverse lookup). + // So if request path seems like getting PAC, simply return true. + if r.URL.Path == "/pac" || strings.HasPrefix(r.URL.Path, "/pac?") { + return true + } r.URL.ParseHostPort(r.Header.Host) if selfListenAddr[r.URL.Host] { return true @@ -229,7 +235,8 @@ func (c *clientConn) serveSelfURL(r *Request) (err error) { } if r.URL.Path == "/pac" || strings.HasPrefix(r.URL.Path, "/pac?") { sendPAC(c) - // Send non nil error to close client connection. + // PAC header contains connection close, send non nil error to close + // client connection. return errPageSent } end: