All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.koushikdutta.async.http.spdy.HeaderReader Maven / Gradle / Ivy

package com.koushikdutta.async.http.spdy;

import com.koushikdutta.async.ByteBufferList;

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.DataFormatException;
import java.util.zip.Inflater;

/**
 * Created by koush on 7/27/14.
 */
class HeaderReader {
    Inflater inflater;
    public HeaderReader() {
        inflater = new Inflater() {
            @Override public int inflate(byte[] buffer, int offset, int count)
            throws DataFormatException {
                int result = super.inflate(buffer, offset, count);
                if (result == 0 && needsDictionary()) {
                    setDictionary(Spdy3.DICTIONARY);
                    result = super.inflate(buffer, offset, count);
                }
                return result;
            }
        };
    }

    public List
readHeader(ByteBufferList bb, int length) throws IOException { byte[] bytes = new byte[length]; bb.get(bytes); inflater.setInput(bytes); ByteBufferList source = new ByteBufferList().order(ByteOrder.BIG_ENDIAN); while (!inflater.needsInput()) { ByteBuffer b = ByteBufferList.obtain(8192); try { int read = inflater.inflate(b.array()); b.limit(read); source.add(b); } catch (DataFormatException e) { throw new IOException(e); } } int numberOfPairs = source.getInt(); List
entries = new ArrayList
(numberOfPairs); for (int i = 0; i < numberOfPairs; i++) { ByteString name = readByteString(source).toAsciiLowercase(); ByteString values = readByteString(source); if (name.size() == 0) throw new IOException("name.size == 0"); entries.add(new Header(name, values)); } return entries; } private static ByteString readByteString(ByteBufferList source) { int length = source.getInt(); return ByteString.of(source.getBytes(length)); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy