mybb.h
最終更新:2009/11/4
001: /* mybb.c 002: * Bucket Brigade のサンプル用プロトタイプ 003: * (1)ストリームでのデータ操作関数 004: * ・ストリーム間のバイト単位での移動 005: * ・ストリームからの行単位での切り出し 006: * ・ストリームからファイルへの書き出し 007: * (2)チャンク形式のデコーダ関数 008: */ 009: 010: #ifndef _MYBB_H_ 011: #define _MYBB_H_ 012: 013: #ifndef _APR_BUCKETS_H_ 014: #include "apr_buckets.h" 015: #endif 016: 017: #ifndef _APR_STRINGS_H_ 018: #include "apr_strings.h" 019: #endif 020: 021: #ifndef _APR_FILE_IO_H_ 022: #include "apr_file_io.h" 023: #endif 024: 025: /* 026: * ストリーム bb1 から size バイト分の buckets をバッファに移す。 027: * 返り値は実際に移したバイト数。 028: * size<=0 の時は何もしない。0が返る。 029: * ストリーム bb1 が空の時も何もしない。0が返る。 030: * 終了後は、ストリーム bb1 の先頭 size バイト分がなくなる。 031: */ 032: 033: int move_bytes_from_bb_to_buf ( 034: apr_bucket_brigade *bb1 035: , apr_size_t size 036: , char *buf 037: ); 038: 039: /* 040: * ストリーム bb1 から size バイト分の buckets をストリーム bb2 に移す。 041: * 返り値は実際に移したバイト数。 042: * size<=0 の時は何もしない。0が返る。 043: * ストリーム bb1 が空の時も何もしない。0が返る。 044: * 終了後は、ストリーム bb1 の先頭 size バイト分がなくなる。ストリーム bb2 は後尾に size バイト分増えている。 045: */ 046: 047: int move_bytes_from_bb (apr_bucket_brigade *bb1, apr_size_t size, apr_bucket_brigade *bb2); 048: 049: /* 050: * ストリーム bb1 から size バイト分の buckets をファイルに書き込む。 051: * 返り値は実際に移したバイト数。 052: * size<=0 の時は何もしない。0が返る。 053: * ストリーム bb1 が空の時も何もしない。0が返る。 054: * 終了後は、ストリーム bb1 の先頭 size バイト分がなくなる。 055: */ 056: 057: int move_bytes_from_bb_to_fp (apr_bucket_brigade *bb1, apr_size_t size, apr_file_t *fp); 058: 059: /* 060: * ストリーム bb1 から size バイト分の buckets をソケットに書き込む。 061: * 返り値は実際に移したバイト数。 062: * size<=0 の時は何もしない。0が返る。 063: * ストリーム bb1 が空の時も何もしない。0が返る。 064: * 終了後は、ストリーム bb1 の先頭 size バイト分がなくなる。 065: */ 066: 067: int move_bytes_from_bb_to_s (apr_bucket_brigade *bb1, apr_size_t size, apr_socket_t *s); 068: 069: /* 070: * LF で終わる一行分の文字列をストリーム bb から切り出す。 071: * 最後のLF もしくは CRLF はヌル文字で置き換えられる。 072: * 返り値の文字列は必ずヌル文字で終わる。 073: * 終了後は、ストリーム bb から先頭の LF で終わる一行分のデータがなくなる。 074: * apr_brigade_split_line でエラーになった場合やサイズが大きすぎる場合(MAX_LINE_SIZE 以上)は NULL が返る。 075: * 空行の場合は、"" が返る。 076: */ 077: 078: #define MAX_LINE_SIZE 1024 079: 080: char *get_line_from_bb (apr_bucket_brigade *bb); 081: 082: /* 083: * 概要:ストリームの中身をファイルに書き込む。バイト数指定なし。 084: * ストリームの中身は変更なし。 085: */ 086: 087: void write_from_bb_to_fp (apr_bucket_brigade *bb, apr_file_t *fp); 088: 089: /* 概要:bb1 からの、entity-header と CRLF の読み出し 090: * 返り値: 091: * 成功時:1 092: * 失敗時:0 最後の CRLF を見つけられなかった時 093: * メモ:読み出した entity-header は無視する。 094: */ 095: 096: int read_entity_header_CRLF(apr_bucket_brigade *bb1); 097: 098: /* 概要:チャンク形式データのデコード 099: * パラメータ 100: * IN bb1 : デコード対象のデータを持つストリーム 101: * OUT bb2 : デコード後のデータを保管するストリーム 102: * 返り値:コンテンツの長さ(0以上)。デコード失敗時は -1 103: */ 104: 105: int decode_chunked_body (apr_bucket_brigade *bb1, apr_bucket_brigade *bb2); 106: 107: #endif /* _MYBB_H_ */
KAKU PROJECT (2009) |