1166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathpackage com.squareup.okhttp.internal.spdy; 2166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 33c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller// TODO: revisit for http/2 draft 9 43c938a3f6b61ce5e2dba0d039b03fe73b89fd26cNeil Fuller// http://tools.ietf.org/html/draft-ietf-httpbis-http2-09#section-7 5166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamathpublic enum ErrorCode { 6166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath /** Not an error! For SPDY stream resets, prefer null over NO_ERROR. */ 7166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath NO_ERROR(0, -1, 0), 8166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 9166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath PROTOCOL_ERROR(1, 1, 1), 10166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 11166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath /** A subtype of PROTOCOL_ERROR used by SPDY. */ 12166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath INVALID_STREAM(1, 2, -1), 13166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 14166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath /** A subtype of PROTOCOL_ERROR used by SPDY. */ 15166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath UNSUPPORTED_VERSION(1, 4, -1), 16166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 17166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath /** A subtype of PROTOCOL_ERROR used by SPDY. */ 18166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath STREAM_IN_USE(1, 8, -1), 19166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 20166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath /** A subtype of PROTOCOL_ERROR used by SPDY. */ 21166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath STREAM_ALREADY_CLOSED(1, 9, -1), 22166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 23166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath INTERNAL_ERROR(2, 6, 2), 24166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 25166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath FLOW_CONTROL_ERROR(3, 7, -1), 26166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 27166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath STREAM_CLOSED(5, -1, -1), 28166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 29166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath FRAME_TOO_LARGE(6, 11, -1), 30166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 31166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath REFUSED_STREAM(7, 3, -1), 32166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 33166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath CANCEL(8, 5, -1), 34166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 35166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath COMPRESSION_ERROR(9, -1, -1), 36166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 37166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath INVALID_CREDENTIALS(-1, 10, -1); 38166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 39166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath public final int httpCode; 40166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath public final int spdyRstCode; 41166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath public final int spdyGoAwayCode; 42166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 43166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath private ErrorCode(int httpCode, int spdyRstCode, int spdyGoAwayCode) { 44166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath this.httpCode = httpCode; 45166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath this.spdyRstCode = spdyRstCode; 46166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath this.spdyGoAwayCode = spdyGoAwayCode; 47166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath } 48166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 49166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath public static ErrorCode fromSpdy3Rst(int code) { 50166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath for (ErrorCode errorCode : ErrorCode.values()) { 51166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath if (errorCode.spdyRstCode == code) return errorCode; 52166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath } 53166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath return null; 54166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath } 55166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 56166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath public static ErrorCode fromHttp2(int code) { 57166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath for (ErrorCode errorCode : ErrorCode.values()) { 58166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath if (errorCode.httpCode == code) return errorCode; 59166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath } 60166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath return null; 61166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath } 62166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath 63166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath public static ErrorCode fromSpdyGoAway(int code) { 64166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath for (ErrorCode errorCode : ErrorCode.values()) { 65166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath if (errorCode.spdyGoAwayCode == code) return errorCode; 66166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath } 67166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath return null; 68166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath } 69166772be0e5cfdaea1a64b9f63e4c8dbfe48cba3Narayan Kamath} 70