
Protocol plugin example for SDK 3.0

List of files
-------------

 - Protocol.c : Accept client requests and generate transaction state machines for each client request.
 - TxnSM.c    : Implementation of handling a transaction.

 - Protocol.h : Header file.
 - TxnSM.h    : Header file.

 - test/ProtocolServerTest.java : Synthetic server.
 - test/ProtocolClientTest.java : Synthetic client.
 - test/file_gen.sh : shell script to generate file list for testing.

Protocol
--------

 - Request  : [server_name][space][file_name][space][\r\n]
 - Response : File (if file is found)
              Nothing (if file is not found)

How to run proxy
----------------

 - Compile protocol.so and copy it under plugins directory.
 - In plugin.config: 
   protocol.so <accept_port> <server_port>
   accept_port is the port to listen to client requests.
   server_port is the port to connect to origin server.
 - Debug tag: -T"protocol".

How to run synthetic server
---------------------------

 - Compile ProtocolServerTest.java and get ProtocolServerTest.class.
 - Run: java ProtocolServerTest <server_port>
   server_port is the port synthetic server listens to requests.
   server_port should match "server_port" argument passed to the plugin.

How to run synthetic client
---------------------------
 - Compile ProtocolClientTest.java and get ProtocolClientTest.class.
 - Run: java ProtocolClientTest -options. 
 - Options include:
   "-P" : proxy name (e.g. npdev.example.com)
   "-p" : proxy port (match "accept_port" argument passed to the plugin)
   "-s" : origin server name
   "-f" : file list name (generated by file_gen.sh)
   "-n" : number of pipelined client requests
   "-l" : how many times of looping
