Skip to content
Snippets Groups Projects
  1. Apr 11, 2019
  2. Mar 25, 2019
  3. Mar 21, 2018
  4. Mar 14, 2018
    • David Fifield's avatar
      Wait briefly after calling ListenAndServe{TLS} to see if it errors. · ea7b9c02
      David Fifield authored
      This is a port of commit e3f3054f8b74caa639a6d9be09702693af9a70e7 from
      meek.
      
      In the previous commit, we changed from separate Listen and Serve steps
      to always calling ListenAndServe. However, we would really like to
      immediately get feedback if any errors happen in the Listen step inside
      the call, because it's much better for debugging if those errors get
      reported to tor through SMETHOD-ERROR--rather than reporting success to
      tor and actually logging an error only in the snowflake log. So we wait
      100 ms for an error to occur before deciding that the Listen succeeded.
      
      We don't need to apply this hack to the ACME HTTP-01 listener, because
      it's a plaintext listener. Unlike in the TLS case, there isn't any
      internal magic that the net library does that we have to rely on. We
      just call net.ListenTCP and check for an error.
      ea7b9c02
    • David Fifield's avatar
      Use ListenAndServe{TLS} rather than separate Listen and Serve. · 19b317e7
      David Fifield authored
      This is a port of commit cea86c937dc278ba6b2100c238b1d5206bbae2f0 from
      meek. Its purpose is to remove the need to copy-paste parts of
      net/http.Server.ListenAndServeTLS. Here is a copy of the commit message
      from meek:
      
          The net/http package provides ListenAndServe and ListenAndServeTLS
          functions, but it doesn't provide a way to set up a listener without
          also entering an infinite serve loop. This matters for
          ListenAndServeTLS, which sets up a lot of magic behind the scenes for
          TLS and HTTP/2 support. Formerly, we had copy-pasted code from
          ListenAndServeTLS, but that code has only gotten more complicated in
          upstream net/http.
      
          The price we pay for this is that it's no longer possible for a server
          bindaddr to ask to listen on port 0 (i.e., a random ephemeral port).
          That's because we never get a change to find out what the listening
          address is, before entering the serve loop.
      
          What we gain is HTTP/2 support; formerly our copy-pasted code had the
          side effect of disabling HTTP/2, because it was copied from an older
          version and did things like
                  config.NextProtos = []string{"http/1.1"}
      
          The new code calls http2.ConfigureServer first, but that's not what's
          providing HTTP/2 support. HTTP/2 support happens by default. The reason
          we call http2.ConfigureServer is because we need to set
          TLSConfig.GetCertificate, and http2.ConfigureServer is a convenient way
          to initialize TLSConfig in a way that is guaranteed to work with HTTP/2.
      19b317e7
  5. Mar 06, 2018
  6. Mar 05, 2018
  7. Oct 20, 2017
  8. Oct 19, 2017
  9. Oct 18, 2017
  10. Oct 14, 2017
  11. Jul 16, 2017
  12. Jan 21, 2017
  13. Jan 20, 2017
  14. Jan 19, 2017
Loading