OSDN Git Service

implement NAME and MAIL value cookie for compatible bbs.
authorornse01 <ornse01@users.sourceforge.jp>
Sat, 7 May 2011 10:57:10 +0000 (10:57 +0000)
committerornse01 <ornse01@users.sourceforge.jp>
Sat, 7 May 2011 10:57:10 +0000 (10:57 +0000)
git-svn-id: http://svn.sourceforge.jp/svnroot/bchan/bchan/trunk@263 20a0b8eb-f62a-4a12-8fe1-b598822500fb

src/submitutil.c
src/submitutil.h
src/test_submitutil.c

index 19b9e3e..c2dec94 100644 (file)
@@ -577,6 +577,62 @@ EXPORT W submitutil_updatecookiedb(cookiedb_t *db, UB *prev_header, W prev_heade
        return 0;
 }
 
+LOCAL W submitutil_setvolatilecookie(cookiedb_t *db, UB *host, W host_len, STIME time, UB *attr, W attr_len, UB *name, W name_len)
+{
+       cookiedb_readheadercontext_t *ctx;
+       W i, err;
+
+       ctx = cookiedb_startheaderread(db, host, host_len, "/", 1, time);
+       if (ctx == NULL) {
+               return -1; /* TODO */
+       }
+
+       for (i = 0; i < attr_len; i++) {
+               err = cookiedb_readheadercontext_appendchar_attr(ctx, attr[i]);
+               if (err < 0) {
+                       cookiedb_endheaderread(db, ctx);
+                       return err;
+               }
+       }
+       err = cookiedb_readheadercontext_appendchar_name(ctx, '"');
+       if (err < 0) {
+               cookiedb_endheaderread(db, ctx);
+               return err;
+       }
+       for (i = 0; i < name_len; i++) {
+               err = cookiedb_readheadercontext_appendchar_name(ctx, name[i]);
+               if (err < 0) {
+                       cookiedb_endheaderread(db, ctx);
+                       return err;
+               }
+       }
+       err = cookiedb_readheadercontext_appendchar_name(ctx, '"');
+       if (err < 0) {
+               cookiedb_endheaderread(db, ctx);
+               return err;
+       }
+
+       cookiedb_endheaderread(db, ctx);
+
+       return 0;
+}
+
+EXPORT W submitutil_setnamemailcookie(cookiedb_t *db, UB *host, W host_len, STIME time, UB *name, W name_len, UB *mail, W mail_len)
+{
+       W err;
+
+       err = submitutil_setvolatilecookie(db, host, host_len, time, "NAME", 4, name, name_len);
+       if (err < 0) {
+               return err;
+       }
+       err = submitutil_setvolatilecookie(db, host, host_len, time, "MAIL", 4, mail, mail_len);
+       if (err < 0) {
+               return err;
+       }
+
+       return 0;
+}
+
 LOCAL W submitutil_makecookieheader2(UB **str, W *len, cookiedb_t *cdb, UB *host, W host_len, UB *path, W path_len, STIME time)
 {
        cookiedb_writeheadercontext_t *ctx;
index fb98ee1..c808727 100644 (file)
@@ -45,6 +45,7 @@ IMPORT submitutil_poststatus_t submitutil_checkresponse(UB *body, W len);
 IMPORT W submitutil_makenextrequestbody(UB *prev_body, W prev_body_len, UB **next_body, W *next_len);
 IMPORT W submitutil_makenextheader(UB *host, W host_len, UB *board, W board_len, UB *thread, W thread_len, W content_length, UB *prev_header, W prev_header_len, UB **header, W *header_len);
 IMPORT W submitutil_updatecookiedb(cookiedb_t *db, UB *prev_header, W prev_header_len, UB *host, W host_len, STIME time);
+IMPORT W submitutil_setnamemailcookie(cookiedb_t *db, UB *host, W host_len, STIME time, UB *name, W name_len, UB *mail, W mail_len);
 IMPORT W submitutil_makeheaderstring2(UB *host, W host_len, UB *board, W board_len, UB *thread, W thread_len, W content_length, STIME time, cookiedb_t *cdb, UB **header, W *header_len);
 IMPORT W submitutil_makeerrormessage(UB *body, W body_len, TC **msg, W *msg_len);
 
index 4d37254..0f33461 100644 (file)
@@ -1365,6 +1365,28 @@ LOCAL TEST_RESULT test_makenextrequestheader_1()
        return TEST_RESULT_PASS;
 }
 
+LOCAL Bool test_submitutil_cookiecheck(UB *header, UB *expected_cookie)
+{
+       UB *found;
+       found = strstr(header, expected_cookie);
+       if (found == NULL) {
+               return False;
+       }
+       if (found[-2] != '\r') {
+               return False;
+       }
+       if (found[-1] != '\n') {
+               return False;
+       }
+       if (found[strlen(expected_cookie)] != '\r') {
+               return False;
+       }
+       if (found[strlen(expected_cookie)+1] != '\n') {
+               return False;
+       }
+       return True;
+}
+
 LOCAL TEST_RESULT test_makenextrequestheader_2()
 {
        UB expected_cookie[] = "Cookie: PON=xxxxx.yyyy.zzzz.ad.jp; HAP=XYZABCD;";
@@ -1375,9 +1397,9 @@ LOCAL TEST_RESULT test_makenextrequestheader_2()
        UB *next = NULL;
        W next_len;
        W err, fd;
-       UB *found;
        cookiedb_t *db;
        LINK test_lnk;
+       Bool ok;
 
        fd = test_util_gen_file(&test_lnk);
        if (fd < 0) {
@@ -1408,24 +1430,218 @@ LOCAL TEST_RESULT test_makenextrequestheader_2()
                return TEST_RESULT_FAIL;
        }
 
-       found = strstr(next, expected_cookie);
-       if (found == NULL) {
+       ok = test_submitutil_cookiecheck(next, expected_cookie);
+       if (ok == False) {
                free(next);
                return TEST_RESULT_FAIL;
        }
-       if (found[-2] != '\r') {
+       free(next);
+       return TEST_RESULT_PASS;
+}
+
+/* submitutil_setnamemailcookie */
+
+LOCAL TEST_RESULT test_setnamemailcookie_1()
+{
+       UB expected_cookie[] = "Cookie: NAME=\"nameA\"; MAIL=\"mailB\";";
+       UB host[] = "dummy.test.net";
+       UB board[] = "dummyborad";
+       UB thread[] = "0123456789";
+       W content_length = 227;
+       W next_len;
+       UB *next = NULL;
+       W err, fd;
+       cookiedb_t *db;
+       LINK test_lnk;
+       Bool ok;
+
+       fd = test_util_gen_file(&test_lnk);
+       if (fd < 0) {
+               return TEST_RESULT_FAIL;
+       }
+       cls_fil(fd);
+       db = cookiedb_new(&test_lnk, TEST_SUBMITUTIL_SAMPLE_RECTYPE, TEST_SUBMITUTIL_SAMPLE_SUBTYPE);
+       if (db == NULL) {
+               del_fil(NULL, &test_lnk, 0);
+               return TEST_RESULT_FAIL;
+       }
+
+       err = submitutil_setnamemailcookie(db, host, strlen(host), 0x3a000000, "nameA", 5, "mailB", 5);
+       if (err < 0) {
+               cookiedb_delete(db);
+               del_fil(NULL, &test_lnk, 0);
+               return TEST_RESULT_FAIL;
+       }
+       err = submitutil_makeheaderstring2(host, strlen(host), board, strlen(board), thread, strlen(thread), content_length, 0x3a000000, db, &next, &next_len);
+
+       cookiedb_delete(db);
+       del_fil(NULL, &test_lnk, 0);
+
+       if (err < 0) {
+               return TEST_RESULT_FAIL;
+       }
+       if (next == NULL) {
+               return TEST_RESULT_FAIL;
+       }
+
+       ok = test_submitutil_cookiecheck(next, expected_cookie);
+       if (ok == False) {
                free(next);
                return TEST_RESULT_FAIL;
        }
-       if (found[-1] != '\n') {
+       free(next);
+       return TEST_RESULT_PASS;
+}
+
+LOCAL TEST_RESULT test_setnamemailcookie_2()
+{
+       UB expected_cookie[] = "Cookie: NAME=\"nameA\"; MAIL=\"\";";
+       UB host[] = "dummy.test.net";
+       UB board[] = "dummyborad";
+       UB thread[] = "0123456789";
+       W content_length = 227;
+       W next_len;
+       UB *next = NULL;
+       W err, fd;
+       cookiedb_t *db;
+       LINK test_lnk;
+       Bool ok;
+
+       fd = test_util_gen_file(&test_lnk);
+       if (fd < 0) {
+               return TEST_RESULT_FAIL;
+       }
+       cls_fil(fd);
+       db = cookiedb_new(&test_lnk, TEST_SUBMITUTIL_SAMPLE_RECTYPE, TEST_SUBMITUTIL_SAMPLE_SUBTYPE);
+       if (db == NULL) {
+               del_fil(NULL, &test_lnk, 0);
+               return TEST_RESULT_FAIL;
+       }
+
+       err = submitutil_setnamemailcookie(db, host, strlen(host), 0x3a000000, "nameA", 5, "", 0);
+       if (err < 0) {
+               cookiedb_delete(db);
+               del_fil(NULL, &test_lnk, 0);
+               return TEST_RESULT_FAIL;
+       }
+       err = submitutil_makeheaderstring2(host, strlen(host), board, strlen(board), thread, strlen(thread), content_length, 0x3a000000, db, &next, &next_len);
+
+       cookiedb_delete(db);
+       del_fil(NULL, &test_lnk, 0);
+
+       if (err < 0) {
+               return TEST_RESULT_FAIL;
+       }
+       if (next == NULL) {
+               return TEST_RESULT_FAIL;
+       }
+
+       ok = test_submitutil_cookiecheck(next, expected_cookie);
+       if (ok == False) {
                free(next);
                return TEST_RESULT_FAIL;
        }
-       if (found[strlen(expected_cookie)] != '\r') {
+       free(next);
+       return TEST_RESULT_PASS;
+}
+
+LOCAL TEST_RESULT test_setnamemailcookie_3()
+{
+       UB expected_cookie[] = "Cookie: NAME=\"\"; MAIL=\"mailB\";";
+       UB host[] = "dummy.test.net";
+       UB board[] = "dummyborad";
+       UB thread[] = "0123456789";
+       W content_length = 227;
+       W next_len;
+       UB *next = NULL;
+       W err, fd;
+       cookiedb_t *db;
+       LINK test_lnk;
+       Bool ok;
+
+       fd = test_util_gen_file(&test_lnk);
+       if (fd < 0) {
+               return TEST_RESULT_FAIL;
+       }
+       cls_fil(fd);
+       db = cookiedb_new(&test_lnk, TEST_SUBMITUTIL_SAMPLE_RECTYPE, TEST_SUBMITUTIL_SAMPLE_SUBTYPE);
+       if (db == NULL) {
+               del_fil(NULL, &test_lnk, 0);
+               return TEST_RESULT_FAIL;
+       }
+
+       err = submitutil_setnamemailcookie(db, host, strlen(host), 0x3a000000, "", 0, "mailB", 5);
+       if (err < 0) {
+               cookiedb_delete(db);
+               del_fil(NULL, &test_lnk, 0);
+               return TEST_RESULT_FAIL;
+       }
+       err = submitutil_makeheaderstring2(host, strlen(host), board, strlen(board), thread, strlen(thread), content_length, 0x3a000000, db, &next, &next_len);
+
+       cookiedb_delete(db);
+       del_fil(NULL, &test_lnk, 0);
+
+       if (err < 0) {
+               return TEST_RESULT_FAIL;
+       }
+       if (next == NULL) {
+               return TEST_RESULT_FAIL;
+       }
+
+       ok = test_submitutil_cookiecheck(next, expected_cookie);
+       if (ok == False) {
                free(next);
                return TEST_RESULT_FAIL;
        }
-       if (found[strlen(expected_cookie)+1] != '\n') {
+       free(next);
+       return TEST_RESULT_PASS;
+}
+
+LOCAL TEST_RESULT test_setnamemailcookie_4()
+{
+       UB expected_cookie[] = "Cookie: NAME=\"\"; MAIL=\"\";";
+       UB host[] = "dummy.test.net";
+       UB board[] = "dummyborad";
+       UB thread[] = "0123456789";
+       W content_length = 227;
+       W next_len;
+       UB *next = NULL;
+       W err, fd;
+       cookiedb_t *db;
+       LINK test_lnk;
+       Bool ok;
+
+       fd = test_util_gen_file(&test_lnk);
+       if (fd < 0) {
+               return TEST_RESULT_FAIL;
+       }
+       cls_fil(fd);
+       db = cookiedb_new(&test_lnk, TEST_SUBMITUTIL_SAMPLE_RECTYPE, TEST_SUBMITUTIL_SAMPLE_SUBTYPE);
+       if (db == NULL) {
+               del_fil(NULL, &test_lnk, 0);
+               return TEST_RESULT_FAIL;
+       }
+
+       err = submitutil_setnamemailcookie(db, host, strlen(host), 0x3a000000, "", 0, "", 0);
+       if (err < 0) {
+               cookiedb_delete(db);
+               del_fil(NULL, &test_lnk, 0);
+               return TEST_RESULT_FAIL;
+       }
+       err = submitutil_makeheaderstring2(host, strlen(host), board, strlen(board), thread, strlen(thread), content_length, 0x3a000000, db, &next, &next_len);
+
+       cookiedb_delete(db);
+       del_fil(NULL, &test_lnk, 0);
+
+       if (err < 0) {
+               return TEST_RESULT_FAIL;
+       }
+       if (next == NULL) {
+               return TEST_RESULT_FAIL;
+       }
+
+       ok = test_submitutil_cookiecheck(next, expected_cookie);
+       if (ok == False) {
                free(next);
                return TEST_RESULT_FAIL;
        }
@@ -1814,6 +2030,10 @@ EXPORT VOID test_submitutil_main()
        test_submituril_printresult(test_makenextrequestbody_1, "test_makenextrequestbody_1");
        test_submituril_printresult(test_makenextrequestheader_1, "test_makenextrequestheader_1");
        test_submituril_printresult(test_makenextrequestheader_2, "test_makenextrequestheader_2");
+       test_submituril_printresult(test_setnamemailcookie_1, "test_setnamemailcookie_1");
+       test_submituril_printresult(test_setnamemailcookie_2, "test_setnamemailcookie_2");
+       test_submituril_printresult(test_setnamemailcookie_3, "test_setnamemailcookie_3");
+       test_submituril_printresult(test_setnamemailcookie_4, "test_setnamemailcookie_4");
        test_submituril_printresult(test_makeerrormessage_1, "test_makeerrormessage_1");
        test_submituril_printresult(test_makeerrormessage_2, "test_makeerrormessage_2");
        test_submituril_printresult(test_makeerrormessage_3, "test_makeerrormessage_3");