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

eu.clarussecure.proxy.protocol.plugins.pgsql.message.writer.PgsqlStartupMessageWriter Maven / Gradle / Ivy

The newest version!
package eu.clarussecure.proxy.protocol.plugins.pgsql.message.writer;

import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;

import eu.clarussecure.proxy.protocol.plugins.pgsql.message.PgsqlStartupMessage;
import eu.clarussecure.proxy.spi.CString;
import io.netty.buffer.ByteBuf;

public class PgsqlStartupMessageWriter implements PgsqlMessageWriter {

    @Override
    public int contentSize(PgsqlStartupMessage msg) {
        // Get content size
        int size = Integer.BYTES;
        for (Map.Entry parameter : msg.getParameters().entrySet()) {
            size += parameter.getKey().clen();
            size += parameter.getValue().clen();
        }
        size += Byte.BYTES;
        return size;
    }

    @Override
    public Map offsets(PgsqlStartupMessage msg) {
        // Compute first part size
        int firstPartSize = msg.getHeaderSize() + Integer.BYTES;
        // Compute buffer offsets
        Map offsets = new LinkedHashMap<>(msg.getParameters().size() * 2);
        int offset = firstPartSize;
        for (Map.Entry entry : msg.getParameters().entrySet()) {
            offsets.put(offset, entry.getKey().getByteBuf());
            offset += entry.getKey().clen();
            offsets.put(offset, entry.getValue().getByteBuf());
            offset += entry.getValue().clen();
        }
        return offsets;
    }

    @Override
    public void writeHeader(PgsqlStartupMessage msg, int length, ByteBuf buffer) throws IOException {
        // Write header (length)
        buffer.writeInt(length);
    }

    @Override
    public void writeContent(PgsqlStartupMessage msg, ByteBuf buffer) throws IOException {
        // Write protocol
        buffer.writeInt(msg.getProtocolVersion());
        // Write parameters
        for (Map.Entry parameter : msg.getParameters().entrySet()) {
            ByteBuf key = parameter.getKey().getByteBuf();
            writeBytes(buffer, key);
            ByteBuf value = parameter.getValue().getByteBuf();
            writeBytes(buffer, value);
        }
        buffer.writeByte(0);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy