JunkBox_Lib++ (for Windows) 1.10.1
|
#include "protocol.h"
Go to the source code of this file.
Functions | |
tList * | get_protocol_header_list (Buffer buf, char deli, int fstline, int rcntnt) |
Buffer | restore_protocol_header (tList *list, char *deli, int mode, int *hdsz) |
Buffer | restore_protocol_contents (tList *list) |
void | set_protocol_contents (tList *list, Buffer contents) |
tList * | get_protocol_header_list_seq (tList *lp, Buffer buf, char deli, int fstline, int rcntnt) |
tList * | get_protocol_header_list_file (char *fname, char deli, int fstline, int rcntnt) |
Buffer | search_protocol_header (tList *list, char *key, int no) |
Buffer | search_protocol_header_item (tList *list, char *key, int no, char deli, int nm) |
Buffer | search_protocol_header_value (tList *list, char *key, char *data, int no) |
Buffer | search_protocol_header_partvalue (tList *list, char *key, char *data, int no) |
int | set_protocol_header (tList *list, char *key, char *value, int no, int add_mode) |
int | search_crlfcrlf (char *mesg) |
int | is_header_continue (tList *pp) |
void | print_protocol_header (tList *pp, int content) |
tList * | find_protocol_end (tList *lp) |
HDLIST_END_KEY のひとつ前のリストへのリンクを返す. HDLIST_END_KEY が無ければ HDLIST_CONTENTS_KEY のひとつ前,HDLIST_CONTENTS_KEY もなければ最後のリストへのリンクを返す.
Definition at line 665 of file protocol.cpp.
References find_tList_end(), HDLIST_CONTENTS_KEY, HDLIST_END_KEY, and search_key_tList().
tList* get_protocol_header_list(Buffer buf, char deli, int fstline, int rcntnt)
buf内の プロトコルヘッダ(key'deli' data の形式)を分解してリストに格納する.'deli'は境界文字. fstlineが TRUEの場合,ヘッダの一行目は HDLIST_FIRST_LINE_KEY のキーをつけてリストに格納する.
また,この関数はバッファリングなどは行わないので,ヘッダにコンテンツの最初の部分が紛れ込む可能性がある. rcntntが TRUEの場合は,HDLIST_CONTENTS_KEY をキーにしてコンテンツをリストに格納する.FALSEの場合は無視. コンテンツのサイズが大きく,順次読み込まれる場合,HDLIST_CONTENTS_KEYノードは複数生成される.
ヘッダの値が複数行になる場合,ヘッダ種別 HDLIST_CONTINUE として,次のノードに格納される.
buf | ヘッダを格納した変数 |
deli | ヘッダの見出し(Key)との境界文字.HTTPや SMTPでは ':' |
fstline | 一行目を特別扱いにするか? 一行目が key'deli' data の形式でないプロトコル用, ex) HTTP, SIP |
rcntnt | コンテンツも読むか? |
Definition at line 34 of file protocol.cpp.
References Buffer::buf, find_tList_top(), and get_protocol_header_list_seq().
Referenced by get_protocol_header_list_file().
tList * get_protocol_header_list_file | ( | char * | fname, |
char | deli, | ||
int | fstline, | ||
int | rcntnt ) |
tList* get_protocol_header_list_file(char* fname, char deli, int fstline, int rcntnt)
ファイル fname からヘッダ情報を読み込んで分解し,リストに格納して返す.
fname | 読み込むファイル名 |
deli | ヘッダの見出し(Key)との境界文字.HTTPや SMTPでは ':' |
fstline | 一行目を特別扱いにするか? 一行目が key'境界文字' data の形式でないプロトコル用, ex) HTTP, SIP |
rcntnt | コンテンツも読むか? |
Definition at line 341 of file protocol.cpp.
References get_protocol_header_list(), and read_Buffer_file().
tList* get_protocol_header_list_seq(tList* lp, Buffer buf, char deli, int fstline, int rcntnt)
buf内の プロトコルヘッダ(key'deli' data の形式)を分解してリストに格納する.'deli'は境界文字. シーケンシャルに随時呼び出すことが可能.
lp==NULL で状態(静的変数)がリセットされので,最初は lpを NULLにすること.
fstlineが TRUEの場合,ヘッダの一行目は HDLIST_FIRST_LINE_KEY のキーをつけてリストに格納する.
また,この関数はバッファリングなどは行わないので,ヘッダにコンテンツの最初の部分が紛れ込む可能性がある. rcntntが TRUEの場合は,HDLIST_CONTENTS_KEY をキーにしてコンテンツをリストに格納する.FALSEの場合は無視. コンテンツのサイズが大きく,順次読み込まれる場合,HDLIST_CONTENTS_KEYノードは複数生成される.
ヘッダの値が複数行になる場合,ヘッダ種別 HDLIST_CONTINUE として,次のノードに格納される.
lp!=NULL または fstlineがFALSE の場合は一行目の処理は行わない.
lp | ヘッダ情報を格納するリストへのポインタ. NULLの場合はリストが新しく作成される.NULLでない場合はそのリストにヘッダ情報が追加される. |
buf | ヘッダを格納した変数 |
deli | ヘッダの見出し(Key)との境界文字.HTTPや SMTPでは ':' |
fstline | 一行目を特別扱いにするか? 一行目が key'deli' data の形式でないプロトコル用, ex) HTTP, SIP |
rcntnt | コンテンツも読むか? |
Definition at line 181 of file protocol.cpp.
References add_tList_node_Buffer, Buffer::buf, CHAR_TAB, clear_Buffer(), copy_s2Buffer, FALSE, free_Buffer(), HDLIST_CONTENTS_KEY, HDLIST_CONTINUE, HDLIST_END_KEY, HDLIST_FIRST_LINE_KEY, LBUF, make_Buffer(), TRUE, and Buffer::vldsz.
Referenced by get_protocol_header_list(), and recv_http_header().
int is_header_continue | ( | tList * | pp | ) |
int is_header_continue(tList* pp)
pp が指しているヘッダ値が次のリストへ続いているかどうか判定する. プロトコル上では,ヘッダ値が複数行に渡る場合に相当する.
Definition at line 631 of file protocol.cpp.
References FALSE, HDLIST_CONTINUE, and TRUE.
Referenced by search_protocol_header(), search_protocol_header_partvalue(), search_protocol_header_value(), and set_protocol_contents().
void print_protocol_header | ( | tList * | pp, |
int | content ) |
int print_protocol_header(tList* pp)
pp のヘッダ部分(以外)を stderr に出力する.
Definition at line 644 of file protocol.cpp.
References ex_strcmp, HDLIST_CONTENTS_KEY, ON, PRINT_MESG, and TLIST_ANCHOR_NODE.
Buffer restore_protocol_contents(tList* list)
リスト listに保存されたデータからコンテンツを復元する.
Definition at line 109 of file protocol.cpp.
References BUFSZ, cat_Buffer(), HDLIST_CONTENTS_KEY, make_Buffer(), and strncmp_tList().
Buffer restore_protocol_header(tList* list, char* deli, int mode, int* hdsz)
リスト listに保存されたデータからヘッダデータを復元する. mode==ON なら listに紛れ込んでいるコンテンツの内容も加えて返す.
get_protocol_header_list() の逆.
Definition at line 55 of file protocol.cpp.
References Buffer::buf, cat_Buffer(), cat_s2Buffer, CHAR_TAB, copy_Buffer(), HDLIST_CONTENTS_KEY, HDLIST_CONTINUE, HDLIST_END_KEY, HDLIST_FIRST_LINE_KEY, init_Buffer(), make_Buffer(), ON, RECVBUFSZ, strncmp_tList(), and Buffer::vldsz.
Referenced by rebuild_http_Buffer(), send_http_file(), and send_http_header().
int search_crlfcrlf | ( | char * | mesg | ) |
int search_crlfcrlf(char* mesg)
文字列中の空行を探す.改行コードは 0x0d, 0x0a または 0x0a
Definition at line 600 of file protocol.cpp.
References JBXL_ARGS_ERROR.
Buffer search_protocol_header(tList* list, char* key, int no)
ヘッダリストの中から no番目の keyノードを探し出し,値(ldat.val.buf)のコピーを返す. 値が複数行に渡る場合は,\r\n を挿入して行を結合する. 検索では keyの長さに合わせる.また, keyはケースインセンシティブ.
list | 検索対象のヘッダ方向を格納したリスト |
key | ヘッダ種別. |
no | 同じヘッダ種別のノードが複数ある場合,何番目のノードかを指定する.1から数える. |
Definition at line 372 of file protocol.cpp.
References cat_Buffer(), cat_s2Buffer, dup_Buffer(), init_Buffer(), is_header_continue(), and strncasecmp_tList().
Referenced by get_http_header_method(), get_http_status_num(), get_http_version_num(), is_http_header_field(), recv_http_Buffer(), recv_http_file(), recv_http_header(), save_http_xml(), search_protocol_header_item(), search_protocol_header_partvalue(), and search_protocol_header_value().
Buffer search_protocol_header_item(tList* list, char* key, int no, char deli, int nm)
key をキーにした no番目のノードの値の中で,deliを区切りにした nm番目の項目(文字列)を返す.
list | 検索対象のヘッダ方向を格納したリスト |
key | ヘッダ種別. |
no | 同じヘッダ種別が複数ある場合,何番目のノードかを指定する.1から数える. |
deli | ノード値(文字列)の区切り文字. |
nm | deli を区切り文字として何番目の項目か? 1から数える. |
Definition at line 408 of file protocol.cpp.
References Buffer::buf, cawk_Buffer(), free_Buffer(), and search_protocol_header().
Buffer search_protocol_header_partvalue(tList* list, char* key, char* data, int no)
ヘッダリストの中から no番目の keyノードを探し出し,dataの文字列を含むノードの値(ldat.val.buf)のコピーを返す.
key, dataはケースインセンシティブ.data が複数行に継続している場合は,継続している行も単独の行として検査される.
list | 検索対象のヘッダ方向を格納したリスト |
key | ヘッダ種別. |
data | 検索するヘッダ値の最初の文字.NULL なら全てと一致. |
no | 同じヘッダ種別のノードが複数ある場合,何番目のノードかを指定する.1から数える. |
Definition at line 500 of file protocol.cpp.
References init_Buffer(), is_header_continue(), make_Buffer_bystr, search_protocol_header(), strcasecmp, and strstrcase().
Buffer search_protocol_header_value(tList* list, char* key, char* data, int no)
ヘッダリストの中から no番目の keyノードを探し出し,dataで始まるノードの値(ldat.val.buf)のコピーを返す.
key, dataはケースインセンシティブ.data が複数行に継続している場合は,継続している行も単独の行として検査される.
list | 検索対象のヘッダ方向を格納したリスト |
key | ヘッダ種別. |
data | 検索するヘッダ値の最初の文字.NULL なら全てと一致. |
no | 同じヘッダ種別のノードが複数ある場合,何番目のノードかを指定する.1から数える. |
Definition at line 436 of file protocol.cpp.
References init_Buffer(), is_header_continue(), make_Buffer_bystr, search_protocol_header(), strcasecmp, and strncasecmp.
void set_protocol_contents(tList* list, Buffer contents)
Definition at line 132 of file protocol.cpp.
References del_tList_node(), dup_Buffer(), free_Buffer(), HDLIST_CONTENTS_KEY, and is_header_continue().
int set_protocol_header | ( | tList * | list, |
char * | key, | ||
char * | value, | ||
int | no, | ||
int | add_mode ) |
Definition at line 574 of file protocol.cpp.
References add_tList_node_str, HDLIST_END_KEY, OFF, ON, set_value_tList(), and strncmp_tList().
Referenced by set_http_host_header().