package com.limegroup.gnutella.messages.vendor;

import com.limegroup.gnutella.messages.Message;

/** Vendor Messages are Gnutella Messages that are NEVER forwarded after
 *  received.
 */
public interface VendorMessage extends Message {
    
    static final int LENGTH_MINUS_PAYLOAD = 8;
    
    //Functional IDs defined by Gnutella VendorMessage protocol....
    public static final int F_MESSAGES_SUPPORTED = 0;

    public static final int F_HOPS_FLOW = 4;

    public static final int F_TCP_CONNECT_BACK = 7;

    public static final int F_UDP_CONNECT_BACK = 7;

    public static final int F_UDP_CONNECT_BACK_REDIR = 8;

    public static final int F_CAPABILITIES = 10;

    public static final int F_LIME_ACK = 11;

    public static final int F_REPLY_NUMBER = 12;

    public static final int F_OOB_PROXYING_CONTROL = 13;

    public static final int F_PUSH_PROXY_REQ = 21;

    public static final int F_PUSH_PROXY_ACK = 22;

    @Deprecated
    public static final int F_GIVE_STATS = 14;

    @Deprecated
    public static final int F_STATISTICS = 15;

    public static final int F_CRAWLER_PING = 5;

    public static final int F_CRAWLER_PONG = 6;

    public static final int F_SIMPP_REQ = 16;

    public static final int F_SIMPP = 17;

    public static final int F_UDP_HEAD_PING = 23;

    public static final int F_UDP_HEAD_PONG = 24;

    public static final int F_HEADER_UPDATE = 25;

    public static final int F_UPDATE_REQ = 26;

    public static final int F_UPDATE_RESP = 27;

    public static final int F_CONTENT_REQ = 28;

    public static final int F_CONTENT_RESP = 29;

    public static final int F_INSPECTION_REQ = 30;

    public static final int F_INSPECTION_RESP = 31;

    public static final int F_ADVANCED_TOGGLE = 32;

    public static final int F_DHT_CONTACTS = 33;

    public static final byte[] F_LIME_VENDOR_ID = { (byte) 76, (byte) 73, (byte) 77, (byte) 69 };

    public static final byte[] F_BEAR_VENDOR_ID = { (byte) 66, (byte) 69, (byte) 65, (byte) 82 };

    public static final byte[] F_GTKG_VENDOR_ID = { (byte) 71, (byte) 84, (byte) 75, (byte) 71 };

    public static final byte[] F_NULL_VENDOR_ID = { (byte) 0, (byte) 0, (byte) 0, (byte) 0 };

    public int getVersion();
    
    /** Marker interface for vendor messages which are also Control messages */
    public static interface ControlMessage extends VendorMessage {}

}