org.w3c.www.protocol.http.cache.push
Class PushCacheProtocol

java.lang.Object
  |
  +--org.w3c.www.protocol.http.cache.push.PushCacheProtocol

public class PushCacheProtocol
extends java.lang.Object

PushCacheProtocol Characteristics of the protocol used to control the push cache, and methods for common operations

Protocol Description

To request that "/home/abc/page.html" is inserted in cache as "http://www.abc.com/page.html" the client sends a packet with command="ADD", and remain_len set to sizeof(add_packet_t) plus the sum of the lengths of the path and the urls including their null terminators. The client then sends an add_packet describing the lengths of the two strings followed by the path and then the url.

The server replies with either command="OK" and remain_len=0 or command="ERR" and remain_len set the the length of the error string that follows immediately. In the event of an "ERR" message the connection is closed by the server.

To request that the page associated with "http://www.abc.com/page.html" be removed from the cache the client sends a packet with command="DEL", and remain_len set to sizeof(int) plus the length of the url string including the trailing null character. The server replies as with ADD above. Attempting to remove a url that is not present in the cache results in an "OK" packet being returned, the cache is unchanged.

The client can ask if a url is present in the cache by sending a packet with command="PRS", and url information as with the DEL command. The server will reply with "OK" if the url is present, "NO" if the url is not present and "ERR" if an error was encountered.

The client can request that the cache be emptied of all urls by sending a packet with command="CLN" (clean). The remain_len field is set to zero. The server will reply with either OK or ERR.

The client can terminate the dialogue by sending a command="BYE" packet and then closing the connection.

'C' code describing the packet structures are shown below

 typedef struct {
                             // Bytes  Notes
                             // -----  -----
       char  tag[4];         // 0-3    = {'P','C','P','P'}
       short major_version;  // 4-5    = 1
       short minor_version;  // 6-7    = 1
       char  command[4];     // 8-11   Null terminated command string 
       int   remain_len;     // 12-15  number of remaining bytes to read
 } packet_t;

 typedef struct {
       int   path_len;       // 4      Length of pathname (including null)
       int   url_len;        // 8      Length of URL (including null)
 } add_packet_t;
 
 Note that the command is always 4 characters in length and that the
 null characters are considered part of the command, so in Java (but
 not C) we must include the \0 when comparing strings:
   "ADD\0", "BYE\0", "OK\0\0", "ERR\0", "CLN\0", "PRS\0", "DEL\0"

 


Field Summary
static int ADD
          Numeric codes for commands,
static int BYE
          Numeric codes for commands,
static int CLN
          Numeric codes for commands,
static int COMMAND_LEN
          Size of command string in bytes (including null terminator)
static int DEL
          Numeric codes for commands,
static int ERR
          Numeric codes for commands,
static int HEADER_LEN
          Combined size of tag and version information
static short MAJ_PROTO_VERSION
          Protocol Major version
static int MAX_PAYLOAD_LEN
          Maximum size of payload (follows basic packet)
static int MAX_STRING_LEN
          Maximum size of strings (urls, paths, error messages)
static short MIN_PROTO_VERSION
          Protocol minor version
static int NO
          Numeric codes for commands,
static int NO_SUCH_COMMAND
          Numeric codes for commands,
static int NOP
          Numeric codes for commands,
static int OK
          Numeric codes for commands,
static int PACKET_LEN
          Size of basic packet in bytes
static int PRS
          Numeric codes for commands,
static int TAG_LEN
          Size of packet tag
 
Constructor Summary
protected PushCacheProtocol()
          Singleton, no public constructor, use instance()
 
Method Summary
 byte[] errorPacket(java.lang.String message)
          Create error packet for specified error message
 byte[] header()
           
static PushCacheProtocol instance()
          Access to single instance of this class
 boolean isValidProtocolTag(byte[] packet)
          True iff first four bytes of packet are identical to the protocol tag
 byte[] noPacket()
          Byte array for NO packet
 byte[] okPacket()
          Byte array for OK packet
 int parseCommand(java.lang.String command)
          Utility function for command string parsing
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

PACKET_LEN

public static final int PACKET_LEN
Size of basic packet in bytes

COMMAND_LEN

public static final int COMMAND_LEN
Size of command string in bytes (including null terminator)

HEADER_LEN

public static final int HEADER_LEN
Combined size of tag and version information

TAG_LEN

public static final int TAG_LEN
Size of packet tag

MAX_STRING_LEN

public static final int MAX_STRING_LEN
Maximum size of strings (urls, paths, error messages)

MAX_PAYLOAD_LEN

public static final int MAX_PAYLOAD_LEN
Maximum size of payload (follows basic packet)

MAJ_PROTO_VERSION

public static final short MAJ_PROTO_VERSION
Protocol Major version

MIN_PROTO_VERSION

public static final short MIN_PROTO_VERSION
Protocol minor version

NO_SUCH_COMMAND

public static final int NO_SUCH_COMMAND
Numeric codes for commands,

ERR

public static final int ERR
Numeric codes for commands,

ADD

public static final int ADD
Numeric codes for commands,

DEL

public static final int DEL
Numeric codes for commands,

CLN

public static final int CLN
Numeric codes for commands,

PRS

public static final int PRS
Numeric codes for commands,

BYE

public static final int BYE
Numeric codes for commands,

OK

public static final int OK
Numeric codes for commands,

NO

public static final int NO
Numeric codes for commands,

NOP

public static final int NOP
Numeric codes for commands,
Constructor Detail

PushCacheProtocol

protected PushCacheProtocol()
Singleton, no public constructor, use instance()
See Also:
instance()
Method Detail

instance

public static PushCacheProtocol instance()
Access to single instance of this class

parseCommand

public int parseCommand(java.lang.String command)
Utility function for command string parsing

okPacket

public byte[] okPacket()
Byte array for OK packet

noPacket

public byte[] noPacket()
Byte array for NO packet

header

public byte[] header()

errorPacket

public byte[] errorPacket(java.lang.String message)
Create error packet for specified error message

isValidProtocolTag

public boolean isValidProtocolTag(byte[] packet)
True iff first four bytes of packet are identical to the protocol tag