summaryrefslogtreecommitdiff
path: root/src/plugins/httpd.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/httpd.h')
-rw-r--r--src/plugins/httpd.h107
1 files changed, 107 insertions, 0 deletions
diff --git a/src/plugins/httpd.h b/src/plugins/httpd.h
new file mode 100644
index 000000000..9eef7d915
--- /dev/null
+++ b/src/plugins/httpd.h
@@ -0,0 +1,107 @@
+#ifndef _HTTPD_H_
+#define _HTTPD_H_
+
+struct httpd_session_data;
+
+// NOTE by Celest: This file is not used by httpd.c, but included only as an API reference.
+
+// 注意
+// 1.athena内蔵のhttpd で大きなファイルを送信することはお勧めしません。
+// 200KB を超えるようなファイルは、別のソフトを利用することを勧めます。
+// 2.ファイル名に使える文字は、[A-Za-z0-9-_\.] です。他の文字を使うと、
+// BAD REQUEST で弾かれます。
+
+
+
+void httpd_pages(const char* url,void(*httpd_func)(struct httpd_session_data* sd,const char* url));
+
+// 指定されたURL に対するコールバック関数を設定する。この関数は、以下のように
+// 実装する必要がある。
+//
+// 1. URL は、先頭のスラッシュが省かれたファイル名です。例えば、"GET / HTTP/1.0"
+// という風にリクエストされた時、URL には""(空文字)が入り、"GET /hoge HTTP/1.0"
+// の時には、"hoge"が入ります。
+// 2. リクエストされたページが見つかったら、httpd_send() または、httpd_send_head()
+// とhttpd_send_data() の組を呼び出し、データを出力する。
+// 3. httpd_send_file を指定すると、httpd/ 以下にあるファイルを出力する。ファイルに
+// 空文字が指定された時は、index.htmlが指定されたものとみなされる。
+
+
+
+char* httpd_get_value(struct httpd_session_data* sd,const char* val);
+
+// リクエストされたアドレスに渡されたフォームデータのうち、該当する文字列を返す。
+// 例えば、"GET /status/graph?image=users HTTP/1.0"というリクエストの場合、
+// httpd_get_value(sd,"image"); は、 "users"を返す。この関数の戻り値は、呼び出し元が
+// 解放しなければならない。また、該当する文字列が無い時は、空の文字列を返す。
+
+unsigned int httpd_get_ip(struct httpd_session_data *sd);
+
+// クライアントのIPを返す。
+
+
+void httpd_default_page(void(*httpd_func)(struct httpd_session_data* sd,const char* url));
+
+// 指定されたURL が登録されていない時に呼び出す関数を設定する。この関数を呼び出さないか、
+// 関数の引数にNULLを指定すると、404 Not Found を返す。
+
+
+
+
+void httpd_send(struct httpd_session_data* sd,int status,const char *content_type,int content_len,const void *data);
+
+// HTTPヘッダ、データを組にして送信する。この関数を呼び出した後に、httpd_send_data を
+// 呼び出してはならない。
+//
+// sd : httpd_set_parse_func() に渡されたものをそのまま渡すこと。
+// status : HTTPヘッダに加えるstatus。通常は200。
+// content_type : 送信するデータのタイプ。text/html , image/jpeg など。
+// content_len : 送信するデータの長さ。
+// data : 送信するデータへのポインタ
+
+
+
+void httpd_send_head(struct httpd_session_data* sd,int status,const char *content_type,int content_len);
+
+// HTTPヘッダを送信する。
+//
+// sd : 同上
+// status : 同上
+// content_type : 同上
+// content_len : content_lenを-1に指定することで、この関数が呼ばれた時点で
+// 長さが分からないデータを送信することができる。この場合は
+// 強制的にHTTP/1.0 接続となり、オーバーヘッドが大きくなるので、
+// あまりお勧めはしない。
+
+
+
+
+void httpd_send_data(struct httpd_session_data* sd,int content_len,const void *data);
+
+// データを送信する。この関数を、httpd_send_head() を呼び出す前に呼び出された場合、
+// content_type = application/octet-stream, content_len = -1 としてヘッダが送信される。
+// sd : 同上
+// content_len : 送信するデータのdata長さを指定する。
+// data : 送信するデータ
+
+
+
+void httpd_send_file(struct httpd_session_data* sd,const char* url);
+
+// ファイルを送信する。この関数は、httpd_send_head() を呼び出す前に呼び出さなければ
+// ならない。ファイルに空文字が指定されたときは、index.htmlが指定されたと見なされる。
+
+
+
+void httpd_send_error(struct httpd_session_data* sd,int status);
+
+// HTTPエラーメッセージを送信する。status はHTTPのエラーコードと同じ。
+// 400 Bad Request, 404 Not Found, 500 Internal Server Error など。
+
+int httpd_parse(int fd);
+
+// 初期化処理
+void do_init_httpd(void);
+void do_final_httpd(void);
+
+#endif