okjack
FongMi 2 years ago
parent cea858c49a
commit f535498342
  1. 10
      app/src/main/java/com/fongmi/android/tv/server/Nano.java
  2. 25
      app/src/main/java/com/fongmi/android/tv/server/process/Local.java

@ -20,6 +20,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -70,7 +71,7 @@ public class Nano extends NanoHTTPD {
if (session.getMethod() == Method.POST) parse(session, files);
if (url.contains("?")) url = url.substring(0, url.indexOf('?'));
if (url.startsWith("/m3u8")) return m3u8(session);
if (url.startsWith("/proxy")) return proxy(session.getParms());
if (url.startsWith("/proxy")) return proxy(session);
if (url.startsWith("/tvbus")) return success(LiveConfig.getResp());
if (url.startsWith("/device")) return success(Device.get().toString());
if (url.startsWith("/license")) return success(new String(Base64.decode(url.substring(9), Base64.DEFAULT)));
@ -98,10 +99,13 @@ public class Nano extends NanoHTTPD {
return newChunkedResponse(Response.Status.OK, MIME_PLAINTEXT, new ByteArrayInputStream(result.getBytes(StandardCharsets.UTF_8)));
}
private Response proxy(Map<String, String> params) {
private Response proxy(IHTTPSession session) {
try {
Map<String, String> params = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
params.putAll(session.getHeaders());
params.putAll(session.getParms());
Object[] rs = ApiConfig.get().proxyLocal(params);
return newChunkedResponse(Response.Status.lookup((Integer) rs[0]), (String) rs[1], (InputStream) rs[2]);
return rs[0] instanceof Response ? (Response) rs[0] : newChunkedResponse(Response.Status.lookup((Integer) rs[0]), (String) rs[1], (InputStream) rs[2]);
} catch (Exception e) {
return error(e.getMessage());
}

@ -3,6 +3,7 @@ package com.fongmi.android.tv.server.process;
import com.fongmi.android.tv.server.Nano;
import com.fongmi.android.tv.utils.FileUtil;
import com.github.catvod.utils.Path;
import com.google.common.net.HttpHeaders;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
@ -135,26 +136,26 @@ public class Local implements Process {
FileInputStream fis = new FileInputStream(file);
fis.skip(startFrom);
res = NanoHTTPD.newFixedLengthResponse(NanoHTTPD.Response.Status.PARTIAL_CONTENT, mime, fis, newLen);
res.addHeader("Accept-Ranges", "bytes");
res.addHeader("Content-Length", newLen + "");
res.addHeader("Content-Range", "bytes " + startFrom + "-" + endAt + "/" + fileLen);
res.addHeader("ETag", etag);
res.addHeader(HttpHeaders.CONTENT_LENGTH, newLen + "");
res.addHeader(HttpHeaders.CONTENT_RANGE, "bytes " + startFrom + "-" + endAt + "/" + fileLen);
res.addHeader(HttpHeaders.ACCEPT_RANGES, "bytes");
res.addHeader(HttpHeaders.ETAG, etag);
}
} else {
if (headerIfRangeMissingOrMatching && range != null && startFrom >= fileLen) {
res = NanoHTTPD.newFixedLengthResponse(NanoHTTPD.Response.Status.RANGE_NOT_SATISFIABLE, NanoHTTPD.MIME_PLAINTEXT, "");
res.addHeader("Content-Range", "bytes */" + fileLen);
res.addHeader("Accept-Ranges", "bytes");
res.addHeader("ETag", etag);
res.addHeader(HttpHeaders.CONTENT_RANGE, "bytes */" + fileLen);
res.addHeader(HttpHeaders.ACCEPT_RANGES, "bytes");
res.addHeader(HttpHeaders.ETAG, etag);
} else if (headerIfNoneMatchPresentAndMatching && (!headerIfRangeMissingOrMatching || range == null)) {
res = NanoHTTPD.newFixedLengthResponse(NanoHTTPD.Response.Status.NOT_MODIFIED, mime, "");
res.addHeader("Accept-Ranges", "bytes");
res.addHeader("ETag", etag);
res.addHeader(HttpHeaders.ACCEPT_RANGES, "bytes");
res.addHeader(HttpHeaders.ETAG, etag);
} else {
res = NanoHTTPD.newFixedLengthResponse(NanoHTTPD.Response.Status.OK, mime, new FileInputStream(file), (int) file.length());
res.addHeader("Content-Length", fileLen + "");
res.addHeader("Accept-Ranges", "bytes");
res.addHeader("ETag", etag);
res.addHeader(HttpHeaders.CONTENT_LENGTH, fileLen + "");
res.addHeader(HttpHeaders.ACCEPT_RANGES, "bytes");
res.addHeader(HttpHeaders.ETAG, etag);
}
}
return res;

Loading…
Cancel
Save