/*
* postres.c
*
- * Copyright (c) 2009-2011 project bchan
+ * Copyright (c) 2009-2015 project bchan
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
#include <btron/hmi.h>
#include <btron/tf.h>
+#include <coding/htmlform_urlencoder.h>
+
#include "postres.h"
#include "sjisstring.h"
#include "tadimf.h"
return err;
}
- err = sjstring_appendurlencodestring(dest, dlen, buf, buf_len);
+ err = sjstring_appendasciistring(dest, dlen, buf, buf_len);
free(buf);
return err;
return sjstring_appendasciistring(dest, dest_len, str, len);
}
+#define POST_FIELDS (7)
+
struct postresdata_genbodycontext_t_ {
postresdata_t *post;
- UB *board;
- W board_len;
- UB *thread;
- W thread_len;
- STIME time;
- enum {
- POSTRESDATA_GENBODYCONTEXT_STATE_NAME_BBS,
- POSTRESDATA_GENBODYCONTEXT_STATE_BOARD,
- POSTRESDATA_GENBODYCONTEXT_STATE_NAME_KEY,
- POSTRESDATA_GENBODYCONTEXT_STATE_THREAD,
- POSTRESDATA_GENBODYCONTEXT_STATE_NAME_TIME,
- POSTRESDATA_GENBODYCONTEXT_STATE_TIME,
- POSTRESDATA_GENBODYCONTEXT_STATE_NAME_FROM,
- POSTRESDATA_GENBODYCONTEXT_STATE_FROM,
- POSTRESDATA_GENBODYCONTEXT_STATE_NAME_MAIL,
- POSTRESDATA_GENBODYCONTEXT_STATE_MAIL,
- POSTRESDATA_GENBODYCONTEXT_STATE_NAME_MESSAGE,
- POSTRESDATA_GENBODYCONTEXT_STATE_MESSAGE,
- POSTRESDATA_GENBODYCONTEXT_STATE_NAME_SUBMIT,
- POSTRESDATA_GENBODYCONTEXT_STATE_END
- } state;
UB timebuf[10];
+ htmlform_field fields[POST_FIELDS];
+ htmlform_urlencoder_t encoder;
} ;
typedef struct postresdata_genbodycontext_t_ postresdata_genbodycontext_t;
-LOCAL UB name_bbs[] = "bbs=";
-LOCAL UB name_key[] = "&key=";
-LOCAL UB name_time[] = "&time=";
-LOCAL UB name_FROM[] = "&FROM=";
-LOCAL UB name_mail[] = "&mail=";
-LOCAL UB name_MESSAGE[] = "&MESSAGE=";
-LOCAL UB name_submit[] = "&submit=%8F%91%82%AB%8D%9E%82%DE";
+LOCAL UB name_bbs[] = "bbs";
+LOCAL UB name_key[] = "key";
+LOCAL UB name_time[] = "time";
+LOCAL UB name_FROM[] = "FROM";
+LOCAL UB name_mail[] = "mail";
+LOCAL UB name_MESSAGE[] = "MESSAGE";
+LOCAL UB name_submit[] = "submit";
+LOCAL UB value_submit[] = { 0x8F, 0x91, 0x82, 0xAB, 0x8D, 0x9E, 0x82, 0xDE };
LOCAL Bool postresdata_genbodycontext_next(postresdata_genbodycontext_t *ctx, UB **str, W *len)
{
- switch (ctx->state) {
- case POSTRESDATA_GENBODYCONTEXT_STATE_NAME_BBS:
- *str = name_bbs;
- *len = strlen(name_bbs);
- ctx->state = POSTRESDATA_GENBODYCONTEXT_STATE_BOARD;
- return True;
- case POSTRESDATA_GENBODYCONTEXT_STATE_BOARD:
- *str = ctx->board;
- *len = ctx->board_len;
- ctx->state = POSTRESDATA_GENBODYCONTEXT_STATE_NAME_KEY;
- return True;
- case POSTRESDATA_GENBODYCONTEXT_STATE_NAME_KEY:
- *str = name_key;
- *len = strlen(name_key);
- ctx->state = POSTRESDATA_GENBODYCONTEXT_STATE_THREAD;
- return True;
- case POSTRESDATA_GENBODYCONTEXT_STATE_THREAD:
- *str = ctx->thread;
- *len = ctx->thread_len;
- ctx->state = POSTRESDATA_GENBODYCONTEXT_STATE_NAME_TIME;
- return True;
- case POSTRESDATA_GENBODYCONTEXT_STATE_NAME_TIME:
- *str = name_time;
- *len = strlen(name_time);
- ctx->state = POSTRESDATA_GENBODYCONTEXT_STATE_TIME;
- return True;
- case POSTRESDATA_GENBODYCONTEXT_STATE_TIME:
- *str = ctx->timebuf;
- *len = sjstring_writeUWstring(ctx->timebuf, ctx->time + 473385600);
- ctx->state = POSTRESDATA_GENBODYCONTEXT_STATE_NAME_FROM;
- return True;
- case POSTRESDATA_GENBODYCONTEXT_STATE_NAME_FROM:
- *str = name_FROM;
- *len = strlen(name_FROM);
- ctx->state = POSTRESDATA_GENBODYCONTEXT_STATE_FROM;
- return True;
- case POSTRESDATA_GENBODYCONTEXT_STATE_FROM:
- *str = ctx->post->asc_from;
- *len = ctx->post->asc_from_len;
- ctx->state = POSTRESDATA_GENBODYCONTEXT_STATE_NAME_MAIL;
- return True;
- case POSTRESDATA_GENBODYCONTEXT_STATE_NAME_MAIL:
- *str = name_mail;
- *len = strlen(name_mail);
- ctx->state = POSTRESDATA_GENBODYCONTEXT_STATE_MAIL;
- return True;
- case POSTRESDATA_GENBODYCONTEXT_STATE_MAIL:
- *str = ctx->post->asc_mail;
- *len = ctx->post->asc_mail_len;
- ctx->state = POSTRESDATA_GENBODYCONTEXT_STATE_NAME_MESSAGE;
- return True;
- case POSTRESDATA_GENBODYCONTEXT_STATE_NAME_MESSAGE:
- *str = name_MESSAGE;
- *len = strlen(name_MESSAGE);
- ctx->state = POSTRESDATA_GENBODYCONTEXT_STATE_MESSAGE;
- return True;
- case POSTRESDATA_GENBODYCONTEXT_STATE_MESSAGE:
- *str = ctx->post->asc_message;
- *len = ctx->post->asc_message_len;
- ctx->state = POSTRESDATA_GENBODYCONTEXT_STATE_NAME_SUBMIT;
- return True;
- case POSTRESDATA_GENBODYCONTEXT_STATE_NAME_SUBMIT:
- *str = name_submit;
- *len = strlen(name_submit);
- ctx->state = POSTRESDATA_GENBODYCONTEXT_STATE_END;
- return True;
- case POSTRESDATA_GENBODYCONTEXT_STATE_END:
- default:
- }
- *str = NULL;
- *len = 0;
- return False;
+ return htmlform_urlencoder_next(&ctx->encoder, str, len);
}
LOCAL VOID postresdata_genbodycontext_initialize(postresdata_genbodycontext_t *ctx, postresdata_t *post, UB *board, W board_len, UB *thread, W thread_len, STIME time)
{
ctx->post = post;
- ctx->board = board;
- ctx->board_len = board_len;
- ctx->thread = thread;
- ctx->thread_len = thread_len;
- ctx->time = time;
- ctx->state = POSTRESDATA_GENBODYCONTEXT_STATE_NAME_BBS;
+
+ ctx->fields[0].name = name_bbs;
+ ctx->fields[0].name_len = strlen(name_bbs);
+ ctx->fields[0].value = board;
+ ctx->fields[0].value_len = board_len;
+ ctx->fields[1].name = name_key;
+ ctx->fields[1].name_len = strlen(name_key);
+ ctx->fields[1].value = thread;
+ ctx->fields[1].value_len = thread_len;
+ ctx->fields[2].name = name_time;
+ ctx->fields[2].name_len = strlen(name_time);
+ ctx->fields[2].value = ctx->timebuf;
+ ctx->fields[2].value_len = sjstring_writeUWstring(ctx->timebuf, time + 473385600);
+ ctx->fields[3].name = name_FROM;
+ ctx->fields[3].name_len = strlen(name_FROM);
+ ctx->fields[3].value = ctx->post->asc_from;
+ ctx->fields[3].value_len = ctx->post->asc_from_len;
+ ctx->fields[4].name = name_mail;
+ ctx->fields[4].name_len = strlen(name_mail);
+ ctx->fields[4].value = ctx->post->asc_mail;
+ ctx->fields[4].value_len = ctx->post->asc_mail_len;
+ ctx->fields[5].name = name_MESSAGE;
+ ctx->fields[5].name_len = strlen(name_MESSAGE);
+ ctx->fields[5].value = ctx->post->asc_message;
+ ctx->fields[5].value_len = ctx->post->asc_message_len;
+ ctx->fields[6].name = name_submit;
+ ctx->fields[6].name_len = strlen(name_submit);
+ ctx->fields[6].value = value_submit;
+ ctx->fields[6].value_len = strlen(value_submit);
+
+ htmlform_urlencoder_initialize(&ctx->encoder, ctx->fields, POST_FIELDS);
}
LOCAL VOID postresdata_genbodycontext_finalize(postresdata_genbodycontext_t *ctx)
{
+ htmlform_urlencoder_finalize(&ctx->encoder);
}
EXPORT W postresdata_genrequestbody(postresdata_t *post, UB *board, W board_len, UB *thread, W thread_len, STIME time, UB **body, W *body_len)
return 0;
}
-EXPORT W postresdata_gennamemail(postresdata_t *post, UB **name, W *name_len, UB **mail, W *mail_len)
-{
- UB *buf_name = NULL, *buf_mail = NULL;
- W err, buf_name_len = 0, buf_mail_len = 0;
-
- buf_name = malloc(sizeof(UB));
- if (buf_name == NULL) {
- return -1;
- }
- buf_name[0] = '\0';
- buf_mail = malloc(sizeof(UB));
- if (buf_mail == NULL) {
- free(buf_name);
- return -1;
- }
- buf_mail[0] = '\0';
-
- err = postresdata_appendasciistring(&buf_name, &buf_name_len, post->asc_from, post->asc_from_len);
- if (err < 0) {
- free(buf_mail);
- free(buf_name);
- return err;
- }
- err = postresdata_appendasciistring(&buf_mail, &buf_mail_len, post->asc_mail, post->asc_mail_len);
- if (err < 0) {
- free(buf_mail);
- free(buf_name);
- return err;
- }
-
- *name = buf_name;
- *name_len = buf_name_len;
- *mail = buf_mail;
- *mail_len = buf_mail_len;
-
- return 0;
-}
-
EXPORT postresdata_t* postresdata_new()
{
postresdata_t *post;
/*
* test_postres.c
*
- * Copyright (c) 2010-2012 project bchan
+ * Copyright (c) 2010-2015 project bchan
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages
return test_genrequestbody_checkdata_update(testdata1, testdata1_len, testdata2, testdata2_len, board, strlen(board), thread, strlen(thread), time, expected, strlen(expected));
}
-LOCAL UNITTEST_RESULT test_gennamemail_checkdata(UB *testdata, W testdata_len, UB *expected_name, W expected_name_len, UB *expected_mail, W expected_mail_len)
-{
- LINK test_lnk;
- W fd, err;
- postresdata_t *postres;
- UB *name = NULL, *mail = NULL;
- W name_len = 0, mail_len = 0;
- UNITTEST_RESULT result;
-
- fd = test_postres_util_gen_file(&test_lnk);
- if (fd < 0) {
- return UNITTEST_RESULT_FAIL;
- }
- err = ins_rec(fd, testdata, testdata_len, RT_TADDATA, 0, 0);
- if (err < 0) {
- cls_fil(fd);
- del_fil(NULL, &test_lnk, 0);
- return UNITTEST_RESULT_FAIL;
- }
- cls_fil(fd);
-
- postres = postresdata_new();
- if (postres == NULL) {
- del_fil(NULL, &test_lnk, 0);
- return UNITTEST_RESULT_FAIL;
- }
- err = postresdata_readfile(postres, (VLINK *)&test_lnk);
- if (err < 0) {
- postresdata_delete(postres);
- del_fil(NULL, &test_lnk, 0);
- return UNITTEST_RESULT_FAIL;
- }
- err = postresdata_gennamemail(postres, &name, &name_len, &mail, &mail_len);
- if (err < 0) {
- postresdata_delete(postres);
- del_fil(NULL, &test_lnk, 0);
- return UNITTEST_RESULT_FAIL;
- }
- postresdata_delete(postres);
-
- if (name_len != expected_name_len) {
- printf("name length different\n");
- result = UNITTEST_RESULT_FAIL;
- } else {
- if (strncmp(name, expected_name, expected_name_len) != 0) {
- printf("name string different\n");
- result = UNITTEST_RESULT_FAIL;
- } else {
- result = UNITTEST_RESULT_PASS;
- }
- }
- if (mail_len != expected_mail_len) {
- printf("mail length different\n");
- result = UNITTEST_RESULT_FAIL;
- } else {
- if (strncmp(mail, expected_mail, expected_mail_len) != 0) {
- printf("mail string different\n");
- result = UNITTEST_RESULT_FAIL;
- } else {
- result = UNITTEST_RESULT_PASS;
- }
- }
- if (result != UNITTEST_RESULT_PASS) {
- printf("length: generated = %d, expected = %d\n", name_len, expected_name_len);
- printf("string\n");
- printf(" generated name: ");
- SJSTRING_DP(name, name_len);
- printf("\n");
- printf(" expected name: ");
- SJSTRING_DP(expected_name, expected_name_len);
- printf("\n");
- printf("length: generated = %d, expected = %d\n", mail_len, expected_mail_len);
- printf("string\n");
- printf(" generated mail: ");
- SJSTRING_DP(mail, mail_len);
- printf("\n");
- printf(" expected mail: ");
- SJSTRING_DP(expected_mail, expected_mail_len);
- printf("\n");
- }
-
- free(mail);
- free(name);
-
- del_fil(NULL, &test_lnk, 0);
-
- return result;
-}
-
-LOCAL UNITTEST_RESULT test_gennamemail_1()
-{
- UB *testdata = test_genrequestbody_testdata01;
- W testdata_len = sizeof(test_genrequestbody_testdata01);
- UB expected_name[] = "%82%8E%82%81%82%8D%82%85";
- UB expected_mail[] = "%82%8D%82%81%82%89%82%8C";
-
- return test_gennamemail_checkdata(testdata, testdata_len, expected_name, strlen(expected_name), expected_mail, strlen(expected_mail));
-}
-
-LOCAL UNITTEST_RESULT test_gennamemail_2()
-{
- UB *testdata = test_genrequestbody_testdata02;
- W testdata_len = sizeof(test_genrequestbody_testdata02);
- UB expected_name[] = "";
- UB expected_mail[] = "%82%8D%82%81%82%89%82%8C";
-
- return test_gennamemail_checkdata(testdata, testdata_len, expected_name, strlen(expected_name), expected_mail, strlen(expected_mail));
-}
-
-LOCAL UNITTEST_RESULT test_gennamemail_3()
-{
- UB *testdata = test_genrequestbody_testdata03;
- W testdata_len = sizeof(test_genrequestbody_testdata03);
- UB expected_name[] = "%82%8E%82%81%82%8D%82%85";
- UB expected_mail[] = "";
-
- return test_gennamemail_checkdata(testdata, testdata_len, expected_name, strlen(expected_name), expected_mail, strlen(expected_mail));
-}
-
-LOCAL UNITTEST_RESULT test_gennamemail_4()
-{
- UB *testdata = test_genrequestbody_testdata04;
- W testdata_len = sizeof(test_genrequestbody_testdata04);
- UB expected_name[] = "";
- UB expected_mail[] = "";
-
- return test_gennamemail_checkdata(testdata, testdata_len, expected_name, strlen(expected_name), expected_mail, strlen(expected_mail));
-}
-
EXPORT VOID test_postres_main(unittest_driver_t *driver)
{
UNITTEST_DRIVER_REGIST(driver, test_genrequestbody_1);
UNITTEST_DRIVER_REGIST(driver, test_genrequestbody_4);
UNITTEST_DRIVER_REGIST(driver, test_genrequestbody_5);
UNITTEST_DRIVER_REGIST(driver, test_genrequestbody_6);
- UNITTEST_DRIVER_REGIST(driver, test_gennamemail_1);
- UNITTEST_DRIVER_REGIST(driver, test_gennamemail_2);
- UNITTEST_DRIVER_REGIST(driver, test_gennamemail_3);
- UNITTEST_DRIVER_REGIST(driver, test_gennamemail_4);
}