Merge pull request #28 from safing/fix/oneline-check

Fix HTTPS online check always failing
This commit is contained in:
Daniel 2020-04-09 12:35:05 +02:00 committed by GitHub
commit bd7d08960e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -204,6 +204,7 @@ func monitorOnlineStatus(ctx context.Context) error {
timeout := time.Minute timeout := time.Minute
if GetOnlineStatus() != StatusOnline { if GetOnlineStatus() != StatusOnline {
timeout = time.Second timeout = time.Second
log.Debugf("checking online status again in %s because current status is %s", timeout, GetOnlineStatus())
} }
// wait for trigger // wait for trigger
select { select {
@ -271,13 +272,15 @@ func checkOnlineStatus(ctx context.Context) {
// TODO: find (array of) alternatives to detectportal.firefox.com // TODO: find (array of) alternatives to detectportal.firefox.com
// TODO: find something about usage terms of detectportal.firefox.com // TODO: find something about usage terms of detectportal.firefox.com
client := &http.Client{ dialer := &net.Dialer{
Transport: &http.Transport{
DialContext: (&net.Dialer{
Timeout: 5 * time.Second, Timeout: 5 * time.Second,
LocalAddr: getLocalAddr("tcp"), LocalAddr: getLocalAddr("tcp"),
DualStack: true, DualStack: true,
}).DialContext, }
client := &http.Client{
Transport: &http.Transport{
DialContext: dialer.DialContext,
DisableKeepAlives: true, DisableKeepAlives: true,
DisableCompression: true, DisableCompression: true,
WriteBufferSize: 1024, WriteBufferSize: 1024,
@ -326,8 +329,11 @@ func checkOnlineStatus(ctx context.Context) {
// this might be a weird captive portal, just direct the user there // this might be a weird captive portal, just direct the user there
updateOnlineStatus(StatusPortal, "detectportal.firefox.com", "http request succeeded, response content not as expected") updateOnlineStatus(StatusPortal, "detectportal.firefox.com", "http request succeeded, response content not as expected")
} }
// close the body now as we plan to re-uise the http.Client
response.Body.Close()
// 3) try a https request // 3) try a https request
dialer.LocalAddr = getLocalAddr("tcp")
request = (&http.Request{ request = (&http.Request{
Method: "HEAD", Method: "HEAD",
@ -339,7 +345,7 @@ func checkOnlineStatus(ctx context.Context) {
response, err = client.Do(request) response, err = client.Do(request)
if err != nil { if err != nil {
// if we fail, something is really weird // if we fail, something is really weird
updateOnlineStatus(StatusSemiOnline, "", "http request failed") updateOnlineStatus(StatusSemiOnline, "", "http request failed to "+parsedHTTPSTestURL.String()+" with error "+err.Error())
return return
} }
defer response.Body.Close() defer response.Body.Close()