To adhere with protocol the server should send RST_STREAM on observing timeout on a strea, (#1130)

diff --git a/transport/http2_client.go b/transport/http2_client.go
index 486d4a1..0c1582a 100644
--- a/transport/http2_client.go
+++ b/transport/http2_client.go
@@ -560,9 +560,12 @@
 	}
 	s.state = streamDone
 	s.mu.Unlock()
-	if _, ok := err.(StreamError); ok {
+	if se, ok := err.(StreamError); ok {
 		rstStream = true
 		rstError = http2.ErrCodeCancel
+		if se.Code == codes.DeadlineExceeded {
+			rstError = http2.ErrCodeInternal
+		}
 	}
 }
 
diff --git a/transport/http2_server.go b/transport/http2_server.go
index 31fefc7..9271bb4 100644
--- a/transport/http2_server.go
+++ b/transport/http2_server.go
@@ -741,6 +741,9 @@
 		}
 		t.stats.HandleRPC(s.Context(), outTrailer)
 	}
+	if statusCode == codes.DeadlineExceeded {
+		t.controlBuf.put(&resetStream{s.id, http2.ErrCodeInternal})
+	}
 	t.closeStream(s)
 	t.writableChan <- 0
 	return nil