-
Tatsuhiro Tsujikawa authored
Previously, in server side, we used closed streams to detect the error that the misbehaving client sends a frame on the incoming stream it explicitly closed. With this commit, we make a further step, and detect one more error case. Since we retain closed streams as long as the sum of its size and the number of opened streams are equal or less than max concurrent streams, we can safely say that if we get a frame which is sent on the stream that is not found in either closed or opened stream, it is already closed or has not existed. Then we can send GOAWAY. The previous code shrinks closed streams when we closed another stream, but now it is removed. It is enough to adjust closed streams when new incoming stream is created. While creating this commit, we noticed that NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS is defined as INT32_MAX. But since SETTINGS can contain value up to UINT32_MAX, it is not enough. However, since the stream ID space is limited to INT32_MAX, it is high enough. We could keep this value, but this time we deprecate NGHTTP2_INITIAL_MAX_CONCURRENT_STREAMS macro. While it is in public header, the effect of deprecating it is negligible because of the reason we wrote above, and usually application sets much smaller value (say, 100) as SETTINGS_MAX_CONCURRENT_STREAMS.
16c46114