package net.freertr.pack;

/**
 * lightweight access point protocol (rfc5412) packet
 *
 * @author matecsaba
 */
public class packLwapp {

    /**
     * create instance
     */
    public packLwapp() {
    }

    /**
     * port to use
     */
    public static final int port = 12222;

    /**
     * header size
     */
    public static final int size = 6;

    /**
     * parse header
     *
     * @param pck packet to parse
     * @return false on success, true on error
     */
    public boolean parseHeader(packHolder pck) {
        if (pck.dataSize() < size) {
            return true;
        }
        int i = pck.msbGetW(0); // flags
        if (i != 0) {
            return true;
        }
        i = pck.msbGetW(2); // length
        pck.getSkip(size);
        if (pck.dataSize() < i) {
            return true;
        }
        pck.setDataSize(i);
        return false;
    }

    /**
     * create header
     *
     * @param pck packet to update
     */
    public void createHeader(packHolder pck) {
        pck.msbPutW(0, 0); // flags
        pck.msbPutW(2, pck.dataSize()); // length
        pck.msbPutW(4, 0); // status
        pck.putSkip(size);
        pck.merge2beg();
    }

}
