/*
    mod_bbs Multi Thread BBS Engine
    Copyright (C)2003 1000GEX Project 1000gex@1000gex.net
*/

#include "httpd.h"
#include "http_config.h"
#include "http_protocol.h"
#include "ap_config.h"
#include <time.h>

/* 基本マクロ */
#define DEBUG 1
#define BBS_VERSION "0.3BETA"
#define READ_PATH_MAX 10
#define BBS_BUFFER_SIZE 1024
#define RES_MAX 1001
#define THREAD_MAX 1000
#define THREAD_MAX_STR "THREAD_MAX"

/* returnコード*/
#define TRUE 0;
#define FALSE -1;

/* error文 */
#define SUBJECT_OPEN_FAILED "subject.txtのオープンに失敗しました"
#define SUBJECT_OVER "subject.txtの行数が規定数を超えています"
#define SUBJECT_BUFFER_NONE "subjext.txt部でエラートラップを超えてNULL値を参照しました"
#define RES_OVER "発言数が1000行を超えたスレッドには投稿できません"
#define THREAD_SIZE_OVER "スレッドのサイズが512KBを超えています"
#define DAT_OPEN_FAILED "datファイルのオープンに失敗しました"
#define DATA_NONE "指定のdatファイルは存在しません"
#define THREAD_OVER "発言数が" THREAD_MAX_STR "行を超えたスレッドには投稿できません"

module MODULE_VAR_EXPORT bbs_module;

/* 基本情報コンテナ用構造体 */
typedef struct {
    char *remote_addr;
    char *remote_host;
    char *method;
    char *query_string;
    char *content_length;
    char *referer;
    char *cookie;
    char *user_agent;
    int flag;
    int new_flag;
    char *title;
    char *noname;
    char *cgi;
    char *bbs;
    char *key;
    char *opt;
    char *subject;
    char *from;
    char *date;
    char *mail;
    char *message;
    int res_num;
    int res_start;
    int res_end;
    time_t *time;
}bbs_t;

/* レス内容構造体 */
typedef struct {
    char *from;
    char *date;
    char *mail;
    char *message;
    char *subject;
}res_t;

/* subject.txtトークン用構造体 */
typedef struct {
    char *dat;
    char *title;
}subject_t;

/* HTMLマクロ */
#define READ_HTML_HEADER "<html><head>"

/* common.c */
static void error_html(request_rec *r, const char *message);
int safe_strlen(char *string);
int get_res_num(request_rec *r, char *string);
static table *request_token(pool *p, char *src);
static table *get_request_body(request_rec *r);
subject_t *ap_psubtoken(pool *p, char *string);
void bbs_html_escape(pool *p,bbs_t *bbs);
API_EXPORT(char *) ap_escape_html2(pool *p, const char *s);

/* read */
static int bbs_read(bbs_t *bbs,request_rec *r);
static int bbs_read_check(bbs_t *bbs,request_rec *r);
res_t *ap_restoken(request_rec *r, char *string);

/* bbs.c */
int bbs_post(bbs_t *bbs, request_rec *r);
int post_init(bbs_t *bbs,request_rec *r);
int post_dat(bbs_t *bbs, request_rec *r);
int post_back(bbs_t *bbs, request_rec *r);

/* とりあえず一括コンパイル */
#include "common.c"
#include "read.c"
#include "bbs.c"

