[+] More logging for Diva compression

pull/16/head
Azalea 2024-02-27 23:16:45 -05:00
parent 293acbcc03
commit b589c78cfc
3 changed files with 69 additions and 66 deletions

View File

@ -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");
}
}

View File

@ -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")
}
}

View File

@ -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")
} }
} }