// Path: library/src/main/java/com/vincan/medialoader/tinyhttpd/HttpHeaders.java
// public class HttpHeaders extends LinkedHashMap<String, String> {
// 
//     private static final Pattern HEADER_RANGE_PATTERN = Pattern.compile("bytes=(\\d*)-");
// 
//     public interface Names {
//         String RANGE = "Range";
//         String ACCEPT_RANGES = "Accept-Ranges";
//         String CONTENT_LENGTH = "Content-Length";
//         String CONTENT_RANGE = "Content-Range";
//         String CONTENT_TYPE = "Content-Type";
//     }
// 
//     public interface Values {
//         String BYTES = "bytes";
//     }
// 
//     private long mRangeOffset = Long.MIN_VALUE;
// 
//     public long getRangeOffset() {
//         if (mRangeOffset == Long.MIN_VALUE) {
//             String range = get(HttpHeaders.Names.RANGE);
//             if (!TextUtils.isEmpty(range)) {
//                 Matcher matcher = HEADER_RANGE_PATTERN.matcher(range);
//                 if (matcher.find()) {
//                     String rangeValue = matcher.group(1);
//                     mRangeOffset = Long.parseLong(rangeValue);
//                 }
//             }
//         }
//         return Math.max(mRangeOffset, 0);
//     }
// 
//     public boolean isPartial() {
//         return containsKey(HttpHeaders.Names.RANGE);
//     }
// }
// 
// Path: library/src/main/java/com/vincan/medialoader/tinyhttpd/HttpVersion.java
// public enum HttpVersion {
// 
//     HTTP_1_0("HTTP/1.0"),
// 
//     HTTP_1_1("HTTP/1.1"),
// 
//     HTTP_2("H2");
// 
//     private final String version;
// 
//     HttpVersion(String version) {
//         this.version = version;
//     }
// 
//     public static HttpVersion get(String version) throws IOException {
//         if (version.equals(HTTP_1_0.version)) {
//             return HTTP_1_0;
//         } else if (version.equals(HTTP_1_1.version)) {
//             return HTTP_1_1;
//         } else if (version.equals(HTTP_2.version)) {
//             return HTTP_2;
//         }
//         throw new IOException("Unexpected version: " + version);
//     }
// 
//     @Override
//     public String toString() {
//         return version;
//     }
// }


import com.vincan.medialoader.tinyhttpd.HttpHeaders;
import com.vincan.medialoader.tinyhttpd.HttpVersion;

package com.vincan.medialoader.tinyhttpd.request;


/**
 * 请求接口
 *
 * @author vincanyang
 */
public interface Request {

    HttpMethod method();

    String url();

    HttpVersion protocol();


// Path: library/src/main/java/com/vincan/medialoader/tinyhttpd/HttpHeaders.java
// public class HttpHeaders extends LinkedHashMap<String, String> {
// 
//     private static final Pattern HEADER_RANGE_PATTERN = Pattern.compile("bytes=(\\d*)-");
// 
//     public interface Names {
//         String RANGE = "Range";
//         String ACCEPT_RANGES = "Accept-Ranges";
//         String CONTENT_LENGTH = "Content-Length";
//         String CONTENT_RANGE = "Content-Range";
//         String CONTENT_TYPE = "Content-Type";
//     }
// 
//     public interface Values {
//         String BYTES = "bytes";
//     }
// 
//     private long mRangeOffset = Long.MIN_VALUE;
// 
//     public long getRangeOffset() {
//         if (mRangeOffset == Long.MIN_VALUE) {
//             String range = get(HttpHeaders.Names.RANGE);
//             if (!TextUtils.isEmpty(range)) {
//                 Matcher matcher = HEADER_RANGE_PATTERN.matcher(range);
//                 if (matcher.find()) {
//                     String rangeValue = matcher.group(1);
//                     mRangeOffset = Long.parseLong(rangeValue);
//                 }
//             }
//         }
//         return Math.max(mRangeOffset, 0);
//     }
// 
//     public boolean isPartial() {
//         return containsKey(HttpHeaders.Names.RANGE);
//     }
// }
// 
// Path: library/src/main/java/com/vincan/medialoader/tinyhttpd/HttpVersion.java
// public enum HttpVersion {
// 
//     HTTP_1_0("HTTP/1.0"),
// 
//     HTTP_1_1("HTTP/1.1"),
// 
//     HTTP_2("H2");
// 
//     private final String version;
// 
//     HttpVersion(String version) {
//         this.version = version;
//     }
// 
//     public static HttpVersion get(String version) throws IOException {
//         if (version.equals(HTTP_1_0.version)) {
//             return HTTP_1_0;
//         } else if (version.equals(HTTP_1_1.version)) {
//             return HTTP_1_1;
//         } else if (version.equals(HTTP_2.version)) {
//             return HTTP_2;
//         }
//         throw new IOException("Unexpected version: " + version);
//     }
// 
//     @Override
//     public String toString() {
//         return version;
//     }
// }


// Path: library/src/main/java/com/vincan/medialoader/tinyhttpd/request/Request.java
import com.vincan.medialoader.tinyhttpd.HttpHeaders;
import com.vincan.medialoader.tinyhttpd.HttpVersion;

package com.vincan.medialoader.tinyhttpd.request;


/**
 * 请求接口
 *
 * @author vincanyang
 */
public interface Request {

    HttpMethod method();

    String url();

    HttpVersion protocol();


    HttpHeaders headers();
