/* mybb.c * Bucket Brigade のサンプル用プロトタイプ * (1)ストリームでのデータ操作関数 * ・ストリーム間のバイト単位での移動 * ・ストリームからの行単位での切り出し * ・ストリームからファイルへの書き出し * (2)チャンク形式のデコーダ関数 */ #ifndef _MYBB_H_ #define _MYBB_H_ #ifndef _APR_BUCKETS_H_ #include "apr_buckets.h" #endif #ifndef _APR_STRINGS_H_ #include "apr_strings.h" #endif #ifndef _APR_FILE_IO_H_ #include "apr_file_io.h" #endif /* * ストリーム bb1 から size バイト分の buckets をバッファに移す。 * 返り値は実際に移したバイト数。 * size<=0 の時は何もしない。0が返る。 * ストリーム bb1 が空の時も何もしない。0が返る。 * 終了後は、ストリーム bb1 の先頭 size バイト分がなくなる。 */ int move_bytes_from_bb_to_buf ( apr_bucket_brigade *bb1 , apr_size_t size , char *buf ); /* * ストリーム bb1 から size バイト分の buckets をストリーム bb2 に移す。 * 返り値は実際に移したバイト数。 * size<=0 の時は何もしない。0が返る。 * ストリーム bb1 が空の時も何もしない。0が返る。 * 終了後は、ストリーム bb1 の先頭 size バイト分がなくなる。ストリーム bb2 は後尾に size バイト分増えている。 */ int move_bytes_from_bb (apr_bucket_brigade *bb1, apr_size_t size, apr_bucket_brigade *bb2); /* * ストリーム bb1 から size バイト分の buckets をファイルに書き込む。 * 返り値は実際に移したバイト数。 * size<=0 の時は何もしない。0が返る。 * ストリーム bb1 が空の時も何もしない。0が返る。 * 終了後は、ストリーム bb1 の先頭 size バイト分がなくなる。 */ int move_bytes_from_bb_to_fp (apr_bucket_brigade *bb1, apr_size_t size, apr_file_t *fp); /* * ストリーム bb1 から size バイト分の buckets をソケットに書き込む。 * 返り値は実際に移したバイト数。 * size<=0 の時は何もしない。0が返る。 * ストリーム bb1 が空の時も何もしない。0が返る。 * 終了後は、ストリーム bb1 の先頭 size バイト分がなくなる。 */ int move_bytes_from_bb_to_s (apr_bucket_brigade *bb1, apr_size_t size, apr_socket_t *s); /* * LF で終わる一行分の文字列をストリーム bb から切り出す。 * 最後のLF もしくは CRLF はヌル文字で置き換えられる。 * 返り値の文字列は必ずヌル文字で終わる。 * 終了後は、ストリーム bb から先頭の LF で終わる一行分のデータがなくなる。 * apr_brigade_split_line でエラーになった場合やサイズが大きすぎる場合(MAX_LINE_SIZE 以上)は NULL が返る。 * 空行の場合は、"" が返る。 */ #define MAX_LINE_SIZE 1024 char *get_line_from_bb (apr_bucket_brigade *bb); /* * 概要:ストリームの中身をファイルに書き込む。バイト数指定なし。 * ストリームの中身は変更なし。 */ void write_from_bb_to_fp (apr_bucket_brigade *bb, apr_file_t *fp); /* 概要:bb1 からの、entity-header と CRLF の読み出し * 返り値: * 成功時:1 * 失敗時:0 最後の CRLF を見つけられなかった時 * メモ:読み出した entity-header は無視する。 */ int read_entity_header_CRLF(apr_bucket_brigade *bb1); /* 概要:チャンク形式データのデコード * パラメータ * IN bb1 : デコード対象のデータを持つストリーム * OUT bb2 : デコード後のデータを保管するストリーム * 返り値:コンテンツの長さ(0以上)。デコード失敗時は -1 */ int decode_chunked_body (apr_bucket_brigade *bb1, apr_bucket_brigade *bb2); #endif /* _MYBB_H_ */