(strm *Stream, err error)
| 557 | } |
| 558 | |
| 559 | func (sc *serverConn) writeError(strm *Stream, err error) { |
| 560 | streamErr := Error{} |
| 561 | if !errors.As(err, &streamErr) { |
| 562 | sc.writeReset(strm.ID(), InternalError) |
| 563 | strm.SetState(StreamStateClosed) |
| 564 | return |
| 565 | } |
| 566 | |
| 567 | switch streamErr.frameType { |
| 568 | case FrameGoAway: |
| 569 | if strm == nil { |
| 570 | sc.writeGoAway(0, streamErr.Code(), streamErr.Error()) |
| 571 | } else { |
| 572 | sc.writeGoAway(strm.ID(), streamErr.Code(), streamErr.Error()) |
| 573 | } |
| 574 | case FrameResetStream: |
| 575 | sc.writeReset(strm.ID(), streamErr.Code()) |
| 576 | } |
| 577 | |
| 578 | if strm != nil { |
| 579 | strm.SetState(StreamStateClosed) |
| 580 | } |
| 581 | } |
| 582 | |
| 583 | func handleState(fr *FrameHeader, strm *Stream) { |
| 584 | if fr.Type() == FrameResetStream { |
no test coverage detected