|
1 | 1 | package qlog |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "errors" |
5 | 4 | "fmt" |
6 | 5 | "net/netip" |
7 | 6 | "time" |
@@ -130,63 +129,83 @@ func (e VersionInformation) Encode(enc *jsontext.Encoder, _ time.Time) error { |
130 | 129 | } |
131 | 130 |
|
132 | 131 | type ConnectionClosed struct { |
133 | | - Error error |
| 132 | + Initiator Initiator |
| 133 | + |
| 134 | + ConnectionError *TransportErrorCode |
| 135 | + ApplicationError *ApplicationErrorCode |
| 136 | + |
| 137 | + Reason string |
| 138 | + |
| 139 | + Trigger ConnectionCloseTrigger |
134 | 140 | } |
135 | 141 |
|
136 | 142 | func (e ConnectionClosed) Name() string { return "transport:connection_closed" } |
137 | 143 |
|
138 | 144 | func (e ConnectionClosed) Encode(enc *jsontext.Encoder, _ time.Time) error { |
139 | 145 | h := encoderHelper{enc: enc} |
140 | 146 | h.WriteToken(jsontext.BeginObject) |
141 | | - var ( |
142 | | - statelessResetErr *qerr.StatelessResetError |
143 | | - handshakeTimeoutErr *qerr.HandshakeTimeoutError |
144 | | - idleTimeoutErr *qerr.IdleTimeoutError |
145 | | - applicationErr *qerr.ApplicationError |
146 | | - transportErr *qerr.TransportError |
147 | | - versionNegotiationErr *qerr.VersionNegotiationError |
148 | | - ) |
149 | | - switch { |
150 | | - case errors.As(e.Error, &statelessResetErr): |
151 | | - h.WriteToken(jsontext.String("initiator")) |
152 | | - h.WriteToken(jsontext.String(string(InitiatorRemote))) |
153 | | - h.WriteToken(jsontext.String("trigger")) |
154 | | - h.WriteToken(jsontext.String("stateless_reset")) |
155 | | - case errors.As(e.Error, &handshakeTimeoutErr): |
156 | | - h.WriteToken(jsontext.String("initiator")) |
157 | | - h.WriteToken(jsontext.String(string(InitiatorLocal))) |
158 | | - h.WriteToken(jsontext.String("trigger")) |
159 | | - h.WriteToken(jsontext.String("handshake_timeout")) |
160 | | - case errors.As(e.Error, &idleTimeoutErr): |
161 | | - h.WriteToken(jsontext.String("initiator")) |
162 | | - h.WriteToken(jsontext.String(string(InitiatorLocal))) |
163 | | - h.WriteToken(jsontext.String("trigger")) |
164 | | - h.WriteToken(jsontext.String("idle_timeout")) |
165 | | - case errors.As(e.Error, &applicationErr): |
166 | | - initiator := InitiatorLocal |
167 | | - if applicationErr.Remote { |
168 | | - initiator = InitiatorRemote |
169 | | - } |
170 | | - h.WriteToken(jsontext.String("initiator")) |
171 | | - h.WriteToken(jsontext.String(string(initiator))) |
172 | | - h.WriteToken(jsontext.String("application_code")) |
173 | | - h.WriteToken(jsontext.Uint(uint64(applicationErr.ErrorCode))) |
174 | | - h.WriteToken(jsontext.String("reason")) |
175 | | - h.WriteToken(jsontext.String(applicationErr.ErrorMessage)) |
176 | | - case errors.As(e.Error, &transportErr): |
177 | | - initiator := InitiatorLocal |
178 | | - if transportErr.Remote { |
179 | | - initiator = InitiatorRemote |
| 147 | + h.WriteToken(jsontext.String("initiator")) |
| 148 | + h.WriteToken(jsontext.String(string(e.Initiator))) |
| 149 | + if e.ConnectionError != nil { |
| 150 | + h.WriteToken(jsontext.String("connection_error")) |
| 151 | + if e.ConnectionError.IsCryptoError() { |
| 152 | + h.WriteToken(jsontext.String(fmt.Sprintf("crypto_error_%#x", uint16(*e.ConnectionError)))) |
| 153 | + } else { |
| 154 | + switch *e.ConnectionError { |
| 155 | + case qerr.NoError: |
| 156 | + h.WriteToken(jsontext.String("no_error")) |
| 157 | + case qerr.InternalError: |
| 158 | + h.WriteToken(jsontext.String("internal_error")) |
| 159 | + case qerr.ConnectionRefused: |
| 160 | + h.WriteToken(jsontext.String("connection_refused")) |
| 161 | + case qerr.FlowControlError: |
| 162 | + h.WriteToken(jsontext.String("flow_control_error")) |
| 163 | + case qerr.StreamLimitError: |
| 164 | + h.WriteToken(jsontext.String("stream_limit_error")) |
| 165 | + case qerr.StreamStateError: |
| 166 | + h.WriteToken(jsontext.String("stream_state_error")) |
| 167 | + case qerr.FinalSizeError: |
| 168 | + h.WriteToken(jsontext.String("final_size_error")) |
| 169 | + case qerr.FrameEncodingError: |
| 170 | + h.WriteToken(jsontext.String("frame_encoding_error")) |
| 171 | + case qerr.TransportParameterError: |
| 172 | + h.WriteToken(jsontext.String("transport_parameter_error")) |
| 173 | + case qerr.ConnectionIDLimitError: |
| 174 | + h.WriteToken(jsontext.String("connection_id_limit_error")) |
| 175 | + case qerr.ProtocolViolation: |
| 176 | + h.WriteToken(jsontext.String("protocol_violation")) |
| 177 | + case qerr.InvalidToken: |
| 178 | + h.WriteToken(jsontext.String("invalid_token")) |
| 179 | + case qerr.ApplicationErrorErrorCode: |
| 180 | + h.WriteToken(jsontext.String("application_error")) |
| 181 | + case qerr.CryptoBufferExceeded: |
| 182 | + h.WriteToken(jsontext.String("crypto_buffer_exceeded")) |
| 183 | + case qerr.KeyUpdateError: |
| 184 | + h.WriteToken(jsontext.String("key_update_error")) |
| 185 | + case qerr.AEADLimitReached: |
| 186 | + h.WriteToken(jsontext.String("aead_limit_reached")) |
| 187 | + case qerr.NoViablePathError: |
| 188 | + h.WriteToken(jsontext.String("no_viable_path")) |
| 189 | + default: |
| 190 | + h.WriteToken(jsontext.String("unknown")) |
| 191 | + h.WriteToken(jsontext.String("error_code")) |
| 192 | + h.WriteToken(jsontext.Uint(uint64(*e.ConnectionError))) |
| 193 | + } |
180 | 194 | } |
181 | | - h.WriteToken(jsontext.String("initiator")) |
182 | | - h.WriteToken(jsontext.String(string(initiator))) |
183 | | - h.WriteToken(jsontext.String("connection_code")) |
184 | | - h.WriteToken(jsontext.String(transportError(transportErr.ErrorCode).String())) |
| 195 | + } |
| 196 | + if e.ApplicationError != nil { |
| 197 | + h.WriteToken(jsontext.String("application_error")) |
| 198 | + h.WriteToken(jsontext.String("unknown")) |
| 199 | + h.WriteToken(jsontext.String("error_code")) |
| 200 | + h.WriteToken(jsontext.Uint(uint64(*e.ApplicationError))) |
| 201 | + } |
| 202 | + if e.ConnectionError != nil || e.ApplicationError != nil { |
185 | 203 | h.WriteToken(jsontext.String("reason")) |
186 | | - h.WriteToken(jsontext.String(transportErr.ErrorMessage)) |
187 | | - case errors.As(e.Error, &versionNegotiationErr): |
| 204 | + h.WriteToken(jsontext.String(e.Reason)) |
| 205 | + } |
| 206 | + if e.Trigger != "" { |
188 | 207 | h.WriteToken(jsontext.String("trigger")) |
189 | | - h.WriteToken(jsontext.String("version_mismatch")) |
| 208 | + h.WriteToken(jsontext.String(string(e.Trigger))) |
190 | 209 | } |
191 | 210 | h.WriteToken(jsontext.EndObject) |
192 | 211 | return h.err |
|
0 commit comments