cshiori  1
 全て クラス ファイル 関数 変数 列挙型 列挙値 マクロ定義 ページ
cshiori.h ファイル

SHIORI/3.xインターフェース・パーサ・ビルダ・コンテナ [詳解]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "bool.h"

[ソースコード]

クラス

struct  cshiori_request_message
 SHIORI/3.x Request. [詳解]
 
struct  cshiori_response_message
 SHIORI/3.x Response. [詳解]
 

マクロ定義

#define LF   "\r\n"
 
#define LF_LEN   2
 
#define CSHIORI_REQUEST_MESSAGE_REFERENCE_SIZE   100
 cshiori_request_message で配列参照可能なreferenceのサイズ
 
#define CSHIORI_RESPONSE_MESSAGE_REFERENCE_SIZE   100
 cshiori_response_message で配列参照可能なreferenceのサイズ
 
#define CSHIORI_SHIORI_REQUEST_PARSE_HEADER_UNIT_SIZE   10
 cshiori_shiori_request_parse() で一回に確保するヘッダサイズ
 

列挙型

enum  cshiori_request_method { NONE, GET, NOTIFY }
 SHIORI/3.x Request METHOD. [詳解]
 

関数

bool cshiori_load (const char *dirpath, bool(*load)(const char *))
 SHIORI/3.x load. [詳解]
 
char * cshiori_request (char **const lines, const size_t lines_length, struct cshiori_response_message *(*request)(struct cshiori_request_message *, struct cshiori_response_message *))
 SHIORI/3.x request. [詳解]
 
bool cshiori_unload (bool(*unload)(void))
 SHIORI/3.x unload. [詳解]
 
struct cshiori_request_messagecshiori_request_message_new (void)
 SHIORI/3.x Requestをmallocします。 [詳解]
 
void cshiori_request_message_delete (struct cshiori_request_message *req)
 SHIORI/3.x Requestをfreeします。 [詳解]
 
char * cshiori_request_message_get (struct cshiori_request_message *req, const char *const name)
 SHIORI/3.x Requestのヘッダを取得します。 [詳解]
 
bool cshiori_request_message_set (struct cshiori_request_message *req, char *const name, char *const value)
 SHIORI/3.x Requestのヘッダを設定します。 [詳解]
 
struct cshiori_response_messagecshiori_response_message_new (void)
 SHIORI/3.x Responseをmallocします。 [詳解]
 
void cshiori_response_message_delete (struct cshiori_response_message *res)
 SHIORI/3.x Responseをfreeします。 [詳解]
 
struct cshiori_request_messagecshiori_shiori_request_parse (char **const lines, const size_t lines_length)
 SHIORI/3.x Requestをパースします。 [詳解]
 
char * cshiori_shiori_request_build (const struct cshiori_request_message *const req)
 SHIORI/3.x Requestをビルドします。 [詳解]
 
char * cshiori_shiori_response_build (const struct cshiori_response_message *const res)
 SHIORI/3.x Responseをビルドします。 [詳解]
 
char * cshiori_shiori_response_build_bad_request ()
 SHIORI/3.x Response 400 Bad Requestをビルドします。 [詳解]
 
char * cshiori_shiori_response_build_internal_server_error ()
 SHIORI/3.x Response 500 Internal Server Errorをビルドします。 [詳解]
 

詳解

SHIORI/3.xインターフェース・パーサ・ビルダ・コンテナ

著者
Narazaka: http://narazaka.net/

(C) 2014 Narazaka : Licensed under The MIT License - http://narazaka.net/license/MIT?2014

列挙型詳解

SHIORI/3.x Request METHOD.

列挙値
NONE 

無効

GET 

GET

NOTIFY 

NOTIFY

関数詳解

bool cshiori_load ( const char *  dirpath,
bool(*)(const char *)  load 
)

SHIORI/3.x load.

load()を実行します。

引数
dirpathSHIORIのディレクトリパス
loadload()関数へのポインタ

load()関数は

1 bool load(const char* dirpath);

です。

戻り値
成功/失敗
char* cshiori_request ( char **const  lines,
const size_t  lines_length,
struct cshiori_response_message *(*)(struct cshiori_request_message *, struct cshiori_response_message *)  request 
)

SHIORI/3.x request.

SHIORI/3.x Requestをパースし、 request() 関数に渡して、戻ったSHIORI/3.x Responseを文字列にして返します。

引数
lines行単位で分割され改行文字を削除したSHIORI/3.x Request文字列
lines_lengthSHIORI/3.x Requestの行数
requestrequest()関数へのポインタ

request()関数は

1 struct cshiori_response_message* request(struct cshiori_request_message* req, struct cshiori_response_message* res);

です。

request()にはすでに初期化されたreq, resが渡されます。 reqを参照しながらresを適切に設定してそのまま返せば大丈夫です。

入力をSHIORI/3.xとしてパースできなかった場合と、request()がNULLを返した場合は、400 Bad Requestの文字列を返します。

戻り値
SHIORI/3.x Response文字列。失敗した場合NULLを返します。
void cshiori_request_message_delete ( struct cshiori_request_message req)

SHIORI/3.x Requestをfreeします。

引数
reqSHIORI/3.x Request
char* cshiori_request_message_get ( struct cshiori_request_message req,
const char *const  name 
)

SHIORI/3.x Requestのヘッダを取得します。

引数
reqSHIORI/3.x Request
nameヘッダ名
戻り値
ヘッダの値。存在しない場合NULLを返します。
struct cshiori_request_message* cshiori_request_message_new ( void  )

SHIORI/3.x Requestをmallocします。

methodは0、common headersはNULL、header_sizeは0で初期化されます。

戻り値
SHIORI/3.x Request
bool cshiori_request_message_set ( struct cshiori_request_message req,
char *const  name,
char *const  value 
)

SHIORI/3.x Requestのヘッダを設定します。

これで設定したヘッダはcommon headersのショートカットに反映されません。common headersに含まれないヘッダを扱う場合に使用してください。

同名のヘッダがある場合上書きします。

引数
reqSHIORI/3.x Request
nameヘッダ名
valueヘッダ値。NULLを指定した場合、ヘッダは削除されます。
戻り値
成功時true / 失敗時false
void cshiori_response_message_delete ( struct cshiori_response_message res)

SHIORI/3.x Responseをfreeします。

引数
resSHIORI/3.x Response
struct cshiori_response_message* cshiori_response_message_new ( void  )

SHIORI/3.x Responseをmallocします。

status_codeは0、common headersはNULLで初期化されます。

戻り値
SHIORI/3.x Response
char* cshiori_shiori_request_build ( const struct cshiori_request_message *const  req)

SHIORI/3.x Requestをビルドします。

引数
reqSHIORI/3.x Request
戻り値
SHIORI/3.x Request文字列。失敗した場合NULLを返します。
struct cshiori_request_message* cshiori_shiori_request_parse ( char **const  lines,
const size_t  lines_length 
)

SHIORI/3.x Requestをパースします。

引数
lines行単位で分割され改行文字を削除したSHIORI/3.x Request文字列
lines_lengthSHIORI/3.x Requestの行数
戻り値
SHIORI/3.x Request。失敗した場合NULLを返します。
char* cshiori_shiori_response_build ( const struct cshiori_response_message *const  res)

SHIORI/3.x Responseをビルドします。

引数
resSHIORI/3.x Response
戻り値
SHIORI/3.x Response文字列。失敗した場合NULLを返します。
char* cshiori_shiori_response_build_bad_request ( )

SHIORI/3.x Response 400 Bad Requestをビルドします。

戻り値
SHIORI/3.x Response文字列。失敗した場合NULLを返します。
char* cshiori_shiori_response_build_internal_server_error ( )

SHIORI/3.x Response 500 Internal Server Errorをビルドします。

戻り値
SHIORI/3.x Response文字列。失敗した場合NULLを返します。
bool cshiori_unload ( bool(*)(void)  unload)

SHIORI/3.x unload.

unload()を実行します。

引数
unloadunload()関数へのポインタ

unload()関数は

1 bool unload(void);

です。

戻り値
成功/失敗