mirror of
https://github.com/zhigang1992/AndroidVideoCache.git
synced 2026-06-15 18:07:51 +08:00
72 lines
2.2 KiB
Java
72 lines
2.2 KiB
Java
package com.danikula.videocache;
|
|
|
|
import android.text.TextUtils;
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.InputStreamReader;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
|
|
import static com.danikula.videocache.Preconditions.checkNotNull;
|
|
|
|
/**
|
|
* Model for Http GET request.
|
|
*
|
|
* @author Alexey Danilov (danikula@gmail.com).
|
|
*/
|
|
class GetRequest {
|
|
|
|
private static final Pattern RANGE_HEADER_PATTERN = Pattern.compile("[R,r]ange:[ ]?bytes=(\\d*)-");
|
|
private static final Pattern URL_PATTERN = Pattern.compile("GET /(.*) HTTP");
|
|
|
|
public final String uri;
|
|
public final long rangeOffset;
|
|
public final boolean partial;
|
|
|
|
public GetRequest(String request) {
|
|
checkNotNull(request);
|
|
long offset = findRangeOffset(request);
|
|
this.rangeOffset = Math.max(0, offset);
|
|
this.partial = offset >= 0;
|
|
this.uri = findUri(request);
|
|
}
|
|
|
|
public static GetRequest read(InputStream inputStream) throws IOException {
|
|
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
|
|
StringBuilder stringRequest = new StringBuilder();
|
|
String line;
|
|
while (!TextUtils.isEmpty(line = reader.readLine())) { // until new line (headers ending)
|
|
stringRequest.append(line).append('\n');
|
|
}
|
|
return new GetRequest(stringRequest.toString());
|
|
}
|
|
|
|
private long findRangeOffset(String request) {
|
|
Matcher matcher = RANGE_HEADER_PATTERN.matcher(request);
|
|
if (matcher.find()) {
|
|
String rangeValue = matcher.group(1);
|
|
return Long.parseLong(rangeValue);
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
private String findUri(String request) {
|
|
Matcher matcher = URL_PATTERN.matcher(request);
|
|
if (matcher.find()) {
|
|
return matcher.group(1);
|
|
}
|
|
throw new IllegalArgumentException("Invalid request `" + request + "`: url not found!");
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return "GetRequest{" +
|
|
"rangeOffset=" + rangeOffset +
|
|
", partial=" + partial +
|
|
", uri='" + uri + '\'' +
|
|
'}';
|
|
}
|
|
}
|