package jp.cssj.cti.helpers;

import java.io.IOException;

/**
 * サーバーがクライアントからのリクエストを受け取るためのインターフェースです。
 * 
 * @author <a href="mailto:miyabe at gnn.co.jp">MIYABE Tatsuhiko </a>
 * @version $Id: RequestProducer.java,v 1.1 2005/03/26 10:22:30 harumanx Exp $
 */
public interface RequestProducer {
	/**
	 * プロパティパケットです。 getName,getValueで名前と値を取得できます。
	 */
	public static final byte PROPERTY = 1;

	/**
	 * リソース開始パケットです。 getURI,getMimeType,getEncodingでURIとMIMEタイプとエンコーディングを取得できます。
	 */
	public static final byte RESOURCE = 2;

	/**
	 * 内容開始パケットです。 getURI,getMimeType,getEncodingでURIとMIMEタイプとエンコーディングを取得できます。
	 */
	public static final byte MAIN = 3;

	/**
	 * データパケットです。 readでデータを取得できます。
	 */
	public static final byte DATA = 4;

	/**
	 * 終了パケットです。
	 */
	public static final byte END = 5;

	/**
	 * 次のパケットへカーソルを移動します。
	 * 
	 * @throws IOException
	 */
	public void next() throws IOException;

	/**
	 * パケットのタイプを返します。
	 * 
	 * @return
	 * @throws IOException
	 */
	public byte getType() throws IOException;

	/**
	 * プロパティ名を返します。
	 * 
	 * @return
	 * @throws IOException
	 */
	public String getName() throws IOException;

	/**
	 * プロパティの値を返します。
	 * 
	 * @return
	 * @throws IOException
	 */
	public String getValue() throws IOException;

	/**
	 * データの仮想URIを返します。
	 * 
	 * @return
	 * @throws IOException
	 */
	public String getURI() throws IOException;

	/**
	 * データのMIME型を返します。
	 * 
	 * @return
	 * @throws IOException
	 */
	public String getMimeType() throws IOException;

	/**
	 * データのキャラクタ・エンコーディングを返します。
	 * 
	 * @return
	 * @throws IOException
	 */
	public String getEncoding() throws IOException;

	/**
	 * データを受け取ります。
	 * 
	 * @param b
	 *            バイト列バッファ。
	 * @param off
	 *            受け取ったデータの書き込み開始位置。
	 * @param len
	 *            受け取るデータの最大長さ。
	 * @return 受け取ったデータのバイト数。
	 * @throws IOException
	 */
	public int read(byte[] b, int off, int len) throws IOException;
}