1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
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 �ő傫�ȃt�@�C���𑗐M���邱�Ƃ͂����߂��܂���B
// 200KB ����悤�ȃt�@�C���́A�ʂ̃\�t�g�𗘗p���邱�Ƃ����߂܂��B
// 2.�t�@�C�����Ɏg���镶���́A[A-Za-z0-9-_\.] �ł��B���̕������g���ƁA
// BAD REQUEST �Œe����܂��B
void httpd_pages(const char* url,void(*httpd_func)(struct httpd_session_data* sd,const char* url));
// �w�肳�ꂽURL �ɑ���R�[���o�b�N����ݒ肷��B���̊��́A�ȉ��̂悤��
// ��������K�v������B
//
// 1. URL �́A�擪�̃X���b�V�����Ȃ��ꂽ�t�@�C�����ł��B�Ⴆ�A"GET / HTTP/1.0"
// �Ƃ������Ƀ��N�G�X�g���ꂽ���AURL �ɂ�""(��)������A"GET /hoge HTTP/1.0"
// �̎��ɂ́A"hoge"������܂��B
// 2. ���N�G�X�g���ꂽ�y�[�W������������Ahttpd_send() �܂��́Ahttpd_send_head()
// ��httpd_send_data() �̑g���Ăяo���A�f�[�^���o�͂���B
// 3. httpd_send_file ���w�肷��ƁAhttpd/ �ȉ��ɂ���t�@�C�����o�͂���B�t�@�C����
// �����w�肳�ꂽ���́Aindex.html���w�肳�ꂽ���̂Ƃ݂Ȃ����B
char* httpd_get_value(struct httpd_session_data* sd,const char* val);
// ���N�G�X�g���ꂽ�A�h���X�ɓn���ꂽ�t�H�[���f�[�^�̂����A�Y�����镶�����Ԃ��B
// �Ⴆ�A"GET /status/graph?image=users HTTP/1.0"�Ƃ������N�G�X�g�̏ꍇ�A
// httpd_get_value(sd,"image"); �́A "users"��Ԃ��B���̊��̖߂�l�́A�Ăяo������
// ������Ȃ���Ȃ�Ȃ��B�܂��A�Y�����镶���������́A��̕������Ԃ��B
unsigned int httpd_get_ip(struct httpd_session_data *sd);
// �N���C�A���g��IP��Ԃ��B
void httpd_default_page(void(*httpd_func)(struct httpd_session_data* sd,const char* url));
// �w�肳�ꂽURL ���o�^����Ă��Ȃ����ɌĂяo������ݒ肷��B���̊����Ăяo���Ȃ����A
// ���̈�����NULL���w�肷��ƁA404 Not Found ��Ԃ��B
void httpd_send(struct httpd_session_data* sd,int status,const char *content_type,int content_len,const void *data);
// HTTP�w�b�_�A�f�[�^��g�ɂ��đ��M����B���̊����Ăяo������ɁAhttpd_send_data ��
// �Ăяo���Ă͂Ȃ�Ȃ��B
//
// sd : httpd_set_parse_func() �ɓn���ꂽ���̂����̂܂ܓn�����ƁB
// status : HTTP�w�b�_�ɉ�����status�B�ʏ��200�B
// content_type : ���M����f�[�^�̃^�C�v�Btext/html , image/jpeg �ȂǁB
// content_len : ���M����f�[�^�̒����B
// data : ���M����f�[�^�ւ̃|�C���^
void httpd_send_head(struct httpd_session_data* sd,int status,const char *content_type,int content_len);
// HTTP�w�b�_�𑗐M����B
//
// sd : ����
// status : ����
// content_type : ����
// content_len : content_len��-1�Ɏw�肷�邱�ƂŁA���̊����Ăꂽ���_��
// ������������Ȃ��f�[�^�𑗐M���邱�Ƃ��ł���B���̏ꍇ��
// �����I��HTTP/1.0 �ڑ��ƂȂ�A�I�[�o�[�w�b�h���傫���Ȃ�̂ŁA
// ���܂肨���߂͂��Ȃ��B
void httpd_send_data(struct httpd_session_data* sd,int content_len,const void *data);
// �f�[�^�𑗐M����B���̊����Ahttpd_send_head() ���Ăяo���O�ɌĂяo���ꂽ�ꍇ�A
// content_type = application/octet-stream, content_len = -1 �Ƃ��ăw�b�_�����M�����B
// sd : ����
// content_len : ���M����f�[�^��data�������w�肷��B
// data : ���M����f�[�^
void httpd_send_file(struct httpd_session_data* sd,const char* url);
// �t�@�C���𑗐M����B���̊��́Ahttpd_send_head() ���Ăяo���O�ɌĂяo���Ȃ����
// �Ȃ�Ȃ��B�t�@�C���ɋ����w�肳�ꂽ�Ƃ��́Aindex.html���w�肳�ꂽ�ƌ��Ȃ����B
void httpd_send_error(struct httpd_session_data* sd,int status);
// HTTP�G���[���b�Z�[�W�𑗐M����Bstatus ��HTTP�̃G���[�R�[�h�Ɠ����B
// 400 Bad Request, 404 Not Found, 500 Internal Server Error �ȂǁB
int httpd_parse(int fd);
// ����������
void do_init_httpd(void);
void do_final_httpd(void);
#endif
|