mybb.h

最終更新:2009/11/4

mybb.h

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_ */
Copyright (C) KAKU PROJECT (2009)KAKU PROJECT (2009)