Attach the payload from ping frame to ping ack
diff --git a/transport/control.go b/transport/control.go
index 6b5201e..f6b38a5 100644
--- a/transport/control.go
+++ b/transport/control.go
@@ -86,7 +86,8 @@
}
type ping struct {
- ack bool
+ ack bool
+ data [8]byte
}
func (ping) isItem() bool {
diff --git a/transport/http2_client.go b/transport/http2_client.go
index b13fb78..9bbbb4d 100644
--- a/transport/http2_client.go
+++ b/transport/http2_client.go
@@ -646,7 +646,9 @@
}
func (t *http2Client) handlePing(f *http2.PingFrame) {
- t.controlBuf.put(&ping{true})
+ pingAck := &ping{ack: true}
+ copy(pingAck.data[:], f.Data[:])
+ t.controlBuf.put(pingAck)
}
func (t *http2Client) handleGoAway(f *http2.GoAwayFrame) {
@@ -827,9 +829,7 @@
case *flushIO:
t.framer.flushWrite()
case *ping:
- // TODO(zhaoq): Ack with all-0 data now. will change to some
- // meaningful content when this is actually in use.
- t.framer.writePing(true, i.ack, [8]byte{})
+ t.framer.writePing(true, i.ack, i.data)
default:
grpclog.Printf("transport: http2Client.controller got unexpected item type %v\n", i)
}
diff --git a/transport/http2_server.go b/transport/http2_server.go
index ceb3055..289e4fe 100644
--- a/transport/http2_server.go
+++ b/transport/http2_server.go
@@ -377,7 +377,9 @@
}
func (t *http2Server) handlePing(f *http2.PingFrame) {
- t.controlBuf.put(&ping{true})
+ pingAck := &ping{ack: true}
+ copy(pingAck.data[:], f.Data[:])
+ t.controlBuf.put(pingAck)
}
func (t *http2Server) handleWindowUpdate(f *http2.WindowUpdateFrame) {
@@ -628,9 +630,7 @@
case *flushIO:
t.framer.flushWrite()
case *ping:
- // TODO(zhaoq): Ack with all-0 data now. will change to some
- // meaningful content when this is actually in use.
- t.framer.writePing(true, i.ack, [8]byte{})
+ t.framer.writePing(true, i.ack, i.data)
default:
grpclog.Printf("transport: http2Server.controller got unexpected item type %v\n", i)
}
diff --git a/transport/transport_test.go b/transport/transport_test.go
index 06847ce..84c8d0f 100644
--- a/transport/transport_test.go
+++ b/transport/transport_test.go
@@ -483,12 +483,12 @@
}
cc.Close()
select {
- case <-ss.Context().Done():
- if ss.Context().Err() != context.Canceled {
- t.Fatalf("ss.Context().Err() got %v, want %v", ss.Context().Err(), context.Canceled)
- }
- case <-time.After(5 * time.Second):
- t.Fatalf("Failed to cancel the context of the sever side stream.")
+ case <-ss.Context().Done():
+ if ss.Context().Err() != context.Canceled {
+ t.Fatalf("ss.Context().Err() got %v, want %v", ss.Context().Err(), context.Canceled)
+ }
+ case <-time.After(5 * time.Second):
+ t.Fatalf("Failed to cancel the context of the sever side stream.")
}
}