Skip to content

Commit 585697a

Browse files
committedJun 15, 2016
Add RemoteAddr support
1 parent eb33e10 commit 585697a

7 files changed

+20
-12
lines changed
 

‎datastream_client.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ type SpdyClientStream struct {
3838
closed bool
3939
}
4040

41-
func (stream *SpdyClientStream) OnInitialHeadersComplete(header http.Header) {
41+
func (stream *SpdyClientStream) OnInitialHeadersComplete(header http.Header, peerAddress string) {
4242
stream.header = header
4343
stream.headerParsed = true
4444
}

‎datastream_server.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,17 @@ type SimpleServerStream struct {
3131
closed bool
3232
streamId uint32 // Just for logging purpose
3333
header http.Header
34+
peerAddress string
3435
buffer *bytes.Buffer
3536
server *QuicSpdyServer
3637
quicServerStream *QuicServerStream
3738
sessionFnChan chan func()
3839
closeNotifyChan chan bool
3940
}
4041

41-
func (stream *SimpleServerStream) OnInitialHeadersComplete(header http.Header) {
42+
func (stream *SimpleServerStream) OnInitialHeadersComplete(header http.Header, peerAddress string) {
4243
stream.header = header
44+
stream.peerAddress = peerAddress
4345
}
4446

4547
func (stream *SimpleServerStream) OnTrailingHeadersComplete(header http.Header) {
@@ -68,7 +70,7 @@ func (stream *SimpleServerStream) ProcessRequest() {
6870
req.Proto = header.Get(":version")
6971
req.Header = header
7072
req.Host = header.Get(":host")
71-
// req.RemoteAddr = serverStream. TODO(serialx): Add remote addr
73+
req.RemoteAddr = stream.peerAddress
7274
rawPath := header.Get(":path")
7375

7476
url, err := url.ParseRequestURI(rawPath)

‎example/server.go

+2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ func httpHandler(w http.ResponseWriter, req *http.Request) {
3333

3434
w.Header().Set("AtEnd1", "value 1")
3535
io.WriteString(w, "This HTTP response has both headers before this text and trailers at the end.\n")
36+
io.WriteString(w, req.RemoteAddr)
37+
io.WriteString(w, "\n")
3638
w.Header().Set("AtEnd2", "value 2")
3739
w.Header().Set("AtEnd3", "value 3") // These will appear as trailers.
3840
}

‎go_functions.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ void GoQuicSpdyClientStreamOnClose_C(int64_t go_quic_spdy_client_stream) {
6767
GoQuicSpdyClientStreamOnClose(go_quic_spdy_client_stream);
6868
}
6969

70-
void GoQuicSimpleServerStreamOnInitialHeadersComplete_C(int64_t go_quic_simple_server_stream, struct GoSpdyHeader* headers) {
71-
GoQuicSimpleServerStreamOnInitialHeadersComplete(go_quic_simple_server_stream, headers);
70+
void GoQuicSimpleServerStreamOnInitialHeadersComplete_C(int64_t go_quic_simple_server_stream, struct GoSpdyHeader* headers, const char *peer_address, uint32_t peer_address_len) {
71+
GoQuicSimpleServerStreamOnInitialHeadersComplete(go_quic_simple_server_stream, headers, (void *)peer_address, peer_address_len);
7272
}
7373
void GoQuicSimpleServerStreamOnDataAvailable_C(int64_t go_quic_simple_server_stream, const char *data, uint32_t data_len, int is_closed) {
7474
GoQuicSimpleServerStreamOnDataAvailable(go_quic_simple_server_stream, (void *)data, data_len, is_closed);

‎go_functions.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ void GoQuicSpdyClientStreamOnInitialHeadersComplete_C(int64_t go_quic_spdy_clien
2424
void GoQuicSpdyClientStreamOnTrailingHeadersComplete_C(int64_t go_quic_spdy_client_stream, struct GoSpdyHeader* headers);
2525
void GoQuicSpdyClientStreamOnDataAvailable_C(int64_t go_quic_spdy_client_stream, const char *data, uint32_t data_len, int is_closed);
2626
void GoQuicSpdyClientStreamOnClose_C(int64_t go_quic_spdy_client_stream);
27-
void GoQuicSimpleServerStreamOnInitialHeadersComplete_C(int64_t go_quic_spdy_client_stream, struct GoSpdyHeader* headers);
27+
void GoQuicSimpleServerStreamOnInitialHeadersComplete_C(int64_t go_quic_spdy_client_stream, struct GoSpdyHeader* headers, const char *peer_address, uint32_t peer_address_len);
2828
void GoQuicSimpleServerStreamOnDataAvailable_C(int64_t go_quic_simple_server_stream, const char *data, uint32_t data_len, int is_closed);
2929
void GoQuicSimpleServerStreamOnClose_C(int64_t go_quic_simple_server_stream);
3030

‎src/go_quic_simple_server_stream.cc

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "go_utils.h"
44

55
#include "net/quic/quic_session.h"
6+
#include "net/quic/quic_spdy_session.h"
67
#include "net/quic/spdy_utils.h"
78
#include "base/strings/string_piece.h"
89
#include "base/strings/string_number_conversions.h"
@@ -32,8 +33,9 @@ void GoQuicSimpleServerStream::OnInitialHeadersComplete(bool fin,
3233
SendErrorResponse();
3334
}
3435

36+
auto peer_address = spdy_session()->connection()->peer_address().ToStringWithoutPort();
3537
auto hdr = CreateGoSpdyHeader(request_headers_);
36-
GoQuicSimpleServerStreamOnInitialHeadersComplete_C(go_quic_simple_server_stream_, hdr);
38+
GoQuicSimpleServerStreamOnInitialHeadersComplete_C(go_quic_simple_server_stream_, hdr, peer_address.data(), peer_address.length());
3739
DeleteGoSpdyHeader(hdr);
3840

3941
MarkHeadersConsumed(decompressed_headers().length());
@@ -50,8 +52,9 @@ void GoQuicSimpleServerStream::OnInitialHeadersComplete(
5052
SendErrorResponse();
5153
}
5254

55+
auto peer_address = spdy_session()->connection()->peer_address().ToStringWithoutPort();
5356
auto hdr = CreateGoSpdyHeader(request_headers_);
54-
GoQuicSimpleServerStreamOnInitialHeadersComplete_C(go_quic_simple_server_stream_, hdr);
57+
GoQuicSimpleServerStreamOnInitialHeadersComplete_C(go_quic_simple_server_stream_, hdr, peer_address.data(), peer_address.length());
5558
DeleteGoSpdyHeader(hdr);
5659

5760
ConsumeHeaderList();

‎stream.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010

1111
// (~= QuicSpdy(Server|Client)Stream)
1212
type DataStreamProcessor interface {
13-
OnInitialHeadersComplete(header http.Header)
13+
OnInitialHeadersComplete(header http.Header, peerAddress string)
1414
OnTrailingHeadersComplete(header http.Header)
1515
OnDataAvailable(data []byte, isClosed bool)
1616
OnClose()
@@ -83,10 +83,11 @@ func CreateIncomingDynamicStream(session_key int64, stream_id uint32, wrapper_c
8383
}
8484

8585
//export GoQuicSimpleServerStreamOnInitialHeadersComplete
86-
func GoQuicSimpleServerStreamOnInitialHeadersComplete(quic_server_stream_key int64, headers_c *C.struct_GoSpdyHeader) {
86+
func GoQuicSimpleServerStreamOnInitialHeadersComplete(quic_server_stream_key int64, headers_c *C.struct_GoSpdyHeader, peer_addr unsafe.Pointer, peer_addr_len uint32) {
8787
stream := quicServerStreamPtr.Get(quic_server_stream_key)
8888
header := createHeader(headers_c)
89-
stream.UserStream().OnInitialHeadersComplete(header)
89+
peerAddr := C.GoStringN((*C.char)(peer_addr), (C.int)(peer_addr_len))
90+
stream.UserStream().OnInitialHeadersComplete(header, peerAddr)
9091
}
9192

9293
//export GoQuicSimpleServerStreamOnDataAvailable
@@ -106,7 +107,7 @@ func GoQuicSimpleServerStreamOnClose(quic_server_stream_key int64) {
106107
func GoQuicSpdyClientStreamOnInitialHeadersComplete(quic_client_stream_key int64, headers_c *C.struct_GoSpdyHeader) {
107108
stream := quicClientStreamPtr.Get(quic_client_stream_key)
108109
header := createHeader(headers_c)
109-
stream.UserStream().OnInitialHeadersComplete(header)
110+
stream.UserStream().OnInitialHeadersComplete(header, "")
110111
}
111112

112113
//export GoQuicSpdyClientStreamOnTrailingHeadersComplete

0 commit comments

Comments
 (0)
Please sign in to comment.