1/*
2 * Copyright (C) 2013 Square, Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.squareup.okhttp.internal.spdy;
17
18// http://tools.ietf.org/html/draft-ietf-httpbis-http2-17#section-7
19public enum ErrorCode {
20  /** Not an error! For SPDY stream resets, prefer null over NO_ERROR. */
21  NO_ERROR(0, -1, 0),
22
23  PROTOCOL_ERROR(1, 1, 1),
24
25  /** A subtype of PROTOCOL_ERROR used by SPDY. */
26  INVALID_STREAM(1, 2, -1),
27
28  /** A subtype of PROTOCOL_ERROR used by SPDY. */
29  UNSUPPORTED_VERSION(1, 4, -1),
30
31  /** A subtype of PROTOCOL_ERROR used by SPDY. */
32  STREAM_IN_USE(1, 8, -1),
33
34  /** A subtype of PROTOCOL_ERROR used by SPDY. */
35  STREAM_ALREADY_CLOSED(1, 9, -1),
36
37  INTERNAL_ERROR(2, 6, 2),
38
39  FLOW_CONTROL_ERROR(3, 7, -1),
40
41  STREAM_CLOSED(5, -1, -1),
42
43  FRAME_TOO_LARGE(6, 11, -1),
44
45  REFUSED_STREAM(7, 3, -1),
46
47  CANCEL(8, 5, -1),
48
49  COMPRESSION_ERROR(9, -1, -1),
50
51  CONNECT_ERROR(10, -1, -1),
52
53  ENHANCE_YOUR_CALM(11, -1, -1),
54
55  INADEQUATE_SECURITY(12, -1, -1),
56
57  HTTP_1_1_REQUIRED(13, -1, -1),
58
59  INVALID_CREDENTIALS(-1, 10, -1);
60
61  public final int httpCode;
62  public final int spdyRstCode;
63  public final int spdyGoAwayCode;
64
65  private ErrorCode(int httpCode, int spdyRstCode, int spdyGoAwayCode) {
66    this.httpCode = httpCode;
67    this.spdyRstCode = spdyRstCode;
68    this.spdyGoAwayCode = spdyGoAwayCode;
69  }
70
71  public static ErrorCode fromSpdy3Rst(int code) {
72    for (ErrorCode errorCode : ErrorCode.values()) {
73      if (errorCode.spdyRstCode == code) return errorCode;
74    }
75    return null;
76  }
77
78  public static ErrorCode fromHttp2(int code) {
79    for (ErrorCode errorCode : ErrorCode.values()) {
80      if (errorCode.httpCode == code) return errorCode;
81    }
82    return null;
83  }
84
85  public static ErrorCode fromSpdyGoAway(int code) {
86    for (ErrorCode errorCode : ErrorCode.values()) {
87      if (errorCode.spdyGoAwayCode == code) return errorCode;
88    }
89    return null;
90  }
91}
92