mirror of https://github.com/hykilpikonna/AquaDX
[+] More logging for Diva compression
parent
293acbcc03
commit
b589c78cfc
|
@ -1,65 +0,0 @@
|
||||||
package icu.samnyan.aqua.sega.diva.filter;
|
|
||||||
|
|
||||||
import icu.samnyan.aqua.sega.general.filter.CompressRequestWrapper;
|
|
||||||
import icu.samnyan.aqua.sega.general.filter.CompressResponseWrapper;
|
|
||||||
import icu.samnyan.aqua.sega.util.Compression;
|
|
||||||
import jakarta.servlet.FilterChain;
|
|
||||||
import jakarta.servlet.ServletException;
|
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
|
||||||
import org.eclipse.jetty.io.EofException;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
import org.springframework.web.filter.OncePerRequestFilter;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Base64;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author samnyan (privateamusement@protonmail.com)
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class DivaCompressionFilter extends OncePerRequestFilter {
|
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(DivaCompressionFilter.class);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
|
|
||||||
|
|
||||||
String encoding = request.getHeader("pragma");
|
|
||||||
byte[] reqSrc = request.getInputStream().readAllBytes();
|
|
||||||
|
|
||||||
byte[] reqResult;
|
|
||||||
if (encoding != null && encoding.equals("DFI")) {
|
|
||||||
reqResult = Base64.getMimeDecoder().decode(reqSrc);
|
|
||||||
reqResult = Compression.decompress(reqResult);
|
|
||||||
} else {
|
|
||||||
reqResult = reqSrc;
|
|
||||||
}
|
|
||||||
|
|
||||||
CompressRequestWrapper requestWrapper = new CompressRequestWrapper(request, reqResult);
|
|
||||||
CompressResponseWrapper responseWrapper = new CompressResponseWrapper(response);
|
|
||||||
|
|
||||||
filterChain.doFilter(requestWrapper, responseWrapper);
|
|
||||||
byte[] respSrc = responseWrapper.toByteArray();
|
|
||||||
byte[] respResult = Compression.compress(respSrc);
|
|
||||||
respResult = Base64.getMimeEncoder().encode(respResult);
|
|
||||||
|
|
||||||
|
|
||||||
response.setContentLength(respResult.length);
|
|
||||||
response.setHeader("pragma", "DFI");
|
|
||||||
|
|
||||||
try {
|
|
||||||
response.getOutputStream().write(respResult);
|
|
||||||
} catch (EofException e) {
|
|
||||||
logger.warn("- EOF: Client closed connection");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected boolean shouldNotFilter(HttpServletRequest request) {
|
|
||||||
String path = request.getServletPath();
|
|
||||||
return !path.startsWith("/g/diva");
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
package icu.samnyan.aqua.sega.diva.filter
|
||||||
|
|
||||||
|
import icu.samnyan.aqua.sega.general.filter.CompressRequestWrapper
|
||||||
|
import icu.samnyan.aqua.sega.general.filter.CompressResponseWrapper
|
||||||
|
import icu.samnyan.aqua.sega.util.Compression
|
||||||
|
import jakarta.servlet.FilterChain
|
||||||
|
import jakarta.servlet.http.HttpServletRequest
|
||||||
|
import jakarta.servlet.http.HttpServletResponse
|
||||||
|
import org.eclipse.jetty.io.EofException
|
||||||
|
import org.slf4j.Logger
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
|
import org.springframework.stereotype.Component
|
||||||
|
import org.springframework.web.filter.OncePerRequestFilter
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author samnyan (privateamusement@protonmail.com)
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
class DivaCompressionFilter : OncePerRequestFilter() {
|
||||||
|
companion object {
|
||||||
|
val logger: Logger = LoggerFactory.getLogger(DivaCompressionFilter::class.java)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun doFilterInternal(req: HttpServletRequest, resp: HttpServletResponse, chain: FilterChain) {
|
||||||
|
logger.debug(">>> DIVA Incoming request: ${req.servletPath}")
|
||||||
|
logger.debug("> ${req.headerNames.toList().map { it to req.getHeader(it) }}")
|
||||||
|
val encoding = req.getHeader("pragma")
|
||||||
|
val reqSrc = req.inputStream.readAllBytes()
|
||||||
|
|
||||||
|
logger.debug("> Encoding: $encoding")
|
||||||
|
|
||||||
|
var reqResult: ByteArray?
|
||||||
|
if (encoding != null && encoding == "DFI") {
|
||||||
|
logger.debug("> Request length (compressed): ${reqSrc.size}")
|
||||||
|
reqResult = Base64.getMimeDecoder().decode(reqSrc)
|
||||||
|
reqResult = Compression.decompress(reqResult)
|
||||||
|
logger.debug("> Request length (decompressed): ${reqResult.size}")
|
||||||
|
} else {
|
||||||
|
reqResult = reqSrc
|
||||||
|
}
|
||||||
|
|
||||||
|
val requestWrapper = CompressRequestWrapper(req, reqResult)
|
||||||
|
val responseWrapper = CompressResponseWrapper(resp)
|
||||||
|
|
||||||
|
chain.doFilter(requestWrapper, responseWrapper)
|
||||||
|
|
||||||
|
val respSrc = responseWrapper.toByteArray()
|
||||||
|
logger.debug(">>> DIVA Outgoing response: $respSrc")
|
||||||
|
logger.debug("> Response length (uncompressed): ${respSrc.size}")
|
||||||
|
var respResult = Compression.compress(respSrc)
|
||||||
|
logger.debug("> Response length (compressed): ${respResult.size}")
|
||||||
|
respResult = Base64.getMimeEncoder().encode(respResult)
|
||||||
|
|
||||||
|
resp.setContentLength(respResult.size)
|
||||||
|
resp.setHeader("pragma", "DFI")
|
||||||
|
|
||||||
|
try {
|
||||||
|
resp.outputStream.write(respResult)
|
||||||
|
} catch (e: EofException) {
|
||||||
|
Companion.logger.warn("- EOF: Client closed connection when writing result")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun shouldNotFilter(request: HttpServletRequest): Boolean {
|
||||||
|
return !request.servletPath.startsWith("/g/diva")
|
||||||
|
}
|
||||||
|
}
|
|
@ -50,7 +50,7 @@ class CompressionFilter : OncePerRequestFilter() {
|
||||||
try {
|
try {
|
||||||
resp.outputStream.write(respResult)
|
resp.outputStream.write(respResult)
|
||||||
} catch (e: EofException) {
|
} catch (e: EofException) {
|
||||||
logger.warn("- EOF: Client closed connection")
|
logger.warn("- EOF: Client closed connection when writing result")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue