diff --git a/app/src/main/java/com/fongmi/android/tv/server/Nano.java b/app/src/main/java/com/fongmi/android/tv/server/Nano.java index 5cb406f4f..6e0525df5 100644 --- a/app/src/main/java/com/fongmi/android/tv/server/Nano.java +++ b/app/src/main/java/com/fongmi/android/tv/server/Nano.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 params) { + private Response proxy(IHTTPSession session) { try { + Map 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()); } diff --git a/app/src/main/java/com/fongmi/android/tv/server/process/Local.java b/app/src/main/java/com/fongmi/android/tv/server/process/Local.java index 73420a3aa..bf32a478b 100644 --- a/app/src/main/java/com/fongmi/android/tv/server/process/Local.java +++ b/app/src/main/java/com/fongmi/android/tv/server/process/Local.java @@ -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;