Начало декодинга gzip

This commit is contained in:
serega6531
2019-05-18 16:53:39 +03:00
parent c69f0621a0
commit 90c113731c
4 changed files with 52 additions and 2 deletions

View File

@@ -1,6 +1,8 @@
package ru.serega6531.packmate.service;
import com.google.common.primitives.Bytes;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.PageRequest;
@@ -25,6 +27,8 @@ public class StreamService {
private final String localIp;
private final boolean ignoreEmptyPackets;
private final byte[] GZIP_HEADER = {0x1f, (byte) 0x8b, 0x08};
@Autowired
public StreamService(StreamRepository repository,
PatternService patternService,
@@ -76,6 +80,49 @@ public class StreamService {
}
}
boolean gzipStarted = false;
byte[] gzipContent = null;
int gzipStartPacket = 0;
int gzipEndPacket = 0;
for (int i = 0; i < packets.size(); i++) {
Packet packet = packets.get(i);
if (packet.isIncoming() && gzipStarted) {
gzipStarted = false;
gzipEndPacket = i - 1;
//TODO end and read gzip stream
} else if (!packet.isIncoming()) {
String content = new String(packet.getContent());
int contentPos = content.indexOf("\r\n\r\n");
boolean http = content.startsWith("HTTP/");
if(http && gzipStarted) {
gzipEndPacket = i - 1;
//TODO end and read gzip stream
}
if (contentPos != -1) { // начало body
String headers = content.substring(0, contentPos);
boolean gziped = headers.contains("Content-Encoding: gzip\r\n");
if (gziped) {
gzipStarted = true;
gzipStartPacket = i;
int gzipStart = Bytes.indexOf(packet.getContent(), GZIP_HEADER);
gzipContent = Arrays.copyOfRange(packet.getContent(), gzipStart, packet.getContent().length);
}
} else if (gzipStarted) { // продолжение body
gzipContent = ArrayUtils.addAll(gzipContent, packet.getContent());
}
}
}
if(gzipContent != null) {
gzipEndPacket = packets.size() - 1;
// TODO end and read gzip stream
}
Stream savedStream = save(stream);
List<ru.serega6531.packmate.model.Packet> savedPackets = new ArrayList<>();