forked from quic-go/quic-go
@@ -45,7 +45,7 @@ func (c *linkedConnection) write(p []byte) error {
|
||||
}
|
||||
|
||||
func (*linkedConnection) setCurrentRemoteAddr(addr interface{}) {}
|
||||
func (*linkedConnection) IP() net.IP { return nil }
|
||||
func (*linkedConnection) RemoteAddr() *net.UDPAddr { return &net.UDPAddr{} }
|
||||
|
||||
func setAEAD(cs *handshake.CryptoSetup, aead crypto.AEAD) {
|
||||
*(*bool)(unsafe.Pointer(reflect.ValueOf(cs).Elem().FieldByName("receivedForwardSecurePacket").UnsafeAddr())) = true
|
||||
|
||||
@@ -22,6 +22,7 @@ import (
|
||||
type streamCreator interface {
|
||||
GetOrOpenStream(protocol.StreamID) (utils.Stream, error)
|
||||
Close(error) error
|
||||
RemoteAddr() *net.UDPAddr
|
||||
}
|
||||
|
||||
// Server is a HTTP2 server listening for QUIC connections.
|
||||
@@ -137,6 +138,8 @@ func (s *Server) handleRequest(session streamCreator, headerStream utils.Stream,
|
||||
return err
|
||||
}
|
||||
|
||||
req.RemoteAddr = session.RemoteAddr().String()
|
||||
|
||||
if utils.Debug() {
|
||||
utils.Infof("%s %s%s, on data stream %d", req.Method, req.Host, req.RequestURI, h2headersFrame.StreamID)
|
||||
} else {
|
||||
|
||||
@@ -28,8 +28,10 @@ type mockSession struct {
|
||||
func (s *mockSession) GetOrOpenStream(id protocol.StreamID) (utils.Stream, error) {
|
||||
return s.dataStream, nil
|
||||
}
|
||||
|
||||
func (s *mockSession) Close(error) error { s.closed = true; return nil }
|
||||
func (s *mockSession) RemoteAddr() *net.UDPAddr {
|
||||
return &net.UDPAddr{IP: []byte{127, 0, 0, 1}, Port: 42}
|
||||
}
|
||||
|
||||
var _ = Describe("H2 server", func() {
|
||||
certPath := os.Getenv("GOPATH")
|
||||
@@ -67,7 +69,9 @@ var _ = Describe("H2 server", func() {
|
||||
It("handles a sample GET request", func() {
|
||||
var handlerCalled bool
|
||||
s.Handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
defer GinkgoRecover()
|
||||
Expect(r.Host).To(Equal("www.example.com"))
|
||||
Expect(r.RemoteAddr).To(Equal("127.0.0.1:42"))
|
||||
handlerCalled = true
|
||||
})
|
||||
headerStream.Write([]byte{
|
||||
|
||||
@@ -3,6 +3,7 @@ package quic
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
@@ -128,7 +129,7 @@ func newSession(conn connection, v protocol.VersionNumber, connectionID protocol
|
||||
|
||||
cryptoStream, _ := session.GetOrOpenStream(1)
|
||||
var err error
|
||||
session.cryptoSetup, err = handshake.NewCryptoSetup(connectionID, conn.IP(), v, sCfg, cryptoStream, session.connectionParametersManager, session.aeadChanged)
|
||||
session.cryptoSetup, err = handshake.NewCryptoSetup(connectionID, conn.RemoteAddr().IP, v, sCfg, cryptoStream, session.connectionParametersManager, session.aeadChanged)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -652,3 +653,8 @@ func (s *Session) getWindowUpdateFrames() ([]*frames.WindowUpdateFrame, error) {
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// RemoteAddr returns the net.UDPAddr of the client
|
||||
func (s *Session) RemoteAddr() *net.UDPAddr {
|
||||
return s.conn.RemoteAddr()
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ func (m *mockConnection) write(p []byte) error {
|
||||
}
|
||||
|
||||
func (*mockConnection) setCurrentRemoteAddr(addr interface{}) {}
|
||||
func (*mockConnection) IP() net.IP { return nil }
|
||||
func (*mockConnection) RemoteAddr() *net.UDPAddr { return &net.UDPAddr{} }
|
||||
|
||||
type mockUnpacker struct{}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import "net"
|
||||
type connection interface {
|
||||
write([]byte) error
|
||||
setCurrentRemoteAddr(interface{})
|
||||
IP() net.IP
|
||||
RemoteAddr() *net.UDPAddr
|
||||
}
|
||||
|
||||
type udpConn struct {
|
||||
@@ -24,6 +24,6 @@ func (c *udpConn) setCurrentRemoteAddr(addr interface{}) {
|
||||
c.currentAddr = addr.(*net.UDPAddr)
|
||||
}
|
||||
|
||||
func (c *udpConn) IP() net.IP {
|
||||
return c.currentAddr.IP
|
||||
func (c *udpConn) RemoteAddr() *net.UDPAddr {
|
||||
return c.currentAddr
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user