Commit Graph

447 Commits

Author SHA1 Message Date
Tatsuhiro Tsujikawa 09ba2e8c78 nghttp: Ensure that all settings can be encoded in settings_payload 2013-12-09 21:12:09 +09:00
Tatsuhiro Tsujikawa c3a361fb52 nghttpd: Create Request object in hd_before_frame_send_callback
This is pathological case, but we may get RST_STREAM to the promised
stream while we are sending PUSH_PROMISE. To handle this case,
instantiate Request object before transmission.
2013-12-09 00:22:01 +09:00
Tatsuhiro Tsujikawa ed1d7cdea4 nghttpd: Fix allow_push is not used 2013-12-09 00:04:54 +09:00
Tatsuhiro Tsujikawa 47f53940da nghttpd: Add -p, --push option to configure server push
The option syntax is <PATH>=<PUSH_PATH,...>.
Push resources PUSH_PATHs when PATH is requested. This option can be used
repeatedly to specify multiple push configurations. For example,
  -p/=/foo.png -p/doc=/bar.css
PATH and PUSH_PATHs are relative to document root.
2013-12-09 00:00:12 +09:00
Tatsuhiro Tsujikawa 658b7d0727 src: Replace MAKE_NV macros with function templates 2013-12-08 22:31:43 +09:00
Tatsuhiro Tsujikawa 6c77cec270 Remove nghttp2_submit_* API functions which has char **nv parameter
The nghttp2_submit_{request,response}2 functions are renamed as
nghttp2_submit_{request, response}.
2013-12-08 21:39:43 +09:00
Tatsuhiro Tsujikawa baa2272b0a src: Concatenate header fields with same name by NULL as delimiter
cookie and set-cookie are treated specially and won't be concatenated.
2013-12-07 00:32:14 +09:00
Tatsuhiro Tsujikawa 6ea91e57e0 Adjust struct/class alignment 2013-12-06 23:17:38 +09:00
Tatsuhiro Tsujikawa e596385fc0 src: Split NULL-separated values 2013-12-05 21:54:36 +09:00
Tatsuhiro Tsujikawa 1f0dfd4316 nghttpx: Update doc 2013-12-01 20:55:16 +09:00
Tatsuhiro Tsujikawa 93ad48fe6c nghttpx: Update usage 2013-11-29 22:59:49 +09:00
Tatsuhiro Tsujikawa d1049f389f nghttpx: Use nghttp2_submit_{request, response}2 API 2013-11-28 21:36:04 +09:00
Tatsuhiro Tsujikawa 679a389bd3 nghttpx: Code cleanup 2013-11-26 22:57:29 +09:00
Tatsuhiro Tsujikawa bbebc4ad8d nghttpx: Fix crash on CONNECT or downstream failure 2013-11-21 02:06:28 +09:00
Tatsuhiro Tsujikawa 01f7162be3 nghttpx: Add connection-level flow control window size options
This commit also changes SPDY's flow control size. Previously,
the size for SPDY is the same amount of bytes with HTTP/2.
For example, --frontend-http2-upstream-window-bits=N,
the window size is 2**N - 1. Now SPDY code uses 2**N.
2013-11-21 00:15:17 +09:00
Tatsuhiro Tsujikawa 53b3fba05b nghttpx: Add --http2-no-cookie-crumbling option 2013-11-18 00:03:55 +09:00
Tatsuhiro Tsujikawa faedc4381d nghttpx: Add options to dump HTTP headers in HTTP/2.0 upstream 2013-11-17 23:52:19 +09:00
Tatsuhiro Tsujikawa e14baf134c nghttpx: Implement cookie crumbling 2013-11-16 21:15:55 +09:00
Tatsuhiro Tsujikawa 0c669898a4 nghttp: Allow multiple same headers in -H 2013-11-16 21:13:09 +09:00
Tatsuhiro Tsujikawa a255e4efa6 nghttpx: Use same priority in frontend and backend HTTP2 2013-11-16 15:41:24 +09:00
Tatsuhiro Tsujikawa 81cf484124 Don't DIE when establishing backend HTTP2 connection failed 2013-11-16 01:31:32 +09:00
Tatsuhiro Tsujikawa d946b06e51 src/http-parser: Update to latest HEAD 2013-11-14 23:53:48 +09:00
Tatsuhiro Tsujikawa 40347487c9 Don't sort headers in library code
Remove sorting headers from library code. The application must sort
them if necessary. nghttpx and nghttpd do the sorting of the headers
in stable way if names are equal.
2013-11-13 23:56:02 +09:00
Tatsuhiro Tsujikawa 0ba2883940 nghttpx: Use initial window size in config directly 2013-11-12 11:08:43 +09:00
Tatsuhiro Tsujikawa 58beaa371d nghttpx: Support spdy/3.1, require spdylay >= 1.2.0 2013-11-12 11:03:46 +09:00
Tatsuhiro Tsujikawa b405b4bc9f src: Fix token68 decoding 2013-11-09 16:18:01 +09:00
Tatsuhiro Tsujikawa 2ae788eddd Replace nghttp2_set_option with nghttp2_session_{client,server}_new2
nghttp2_session_client_new2 and nghttp2_session_server_new2 take
additional parameters which specifies session options.
nghttp2_set_option is somewhat crumsy because of type checking.
Now we use nghttp2_opt_set, which specifies individual options with
types. We changed the value of nghttp2_opt, so this change will
require re-compile.
2013-11-08 00:12:39 +09:00
Tatsuhiro Tsujikawa e684b8149b nghttpd: Fix -c option 2013-11-06 23:32:32 +09:00
Tatsuhiro Tsujikawa be5d08647e nghttpd: Add -c, --header-table-size option 2013-11-05 23:44:20 +09:00
Tatsuhiro Tsujikawa b1905c5815 nghttpx: More replacement of spdy with http2 2013-11-04 18:22:29 +09:00
Tatsuhiro Tsujikawa 0fcd14300a nghttpx: Rename PROTO_SPDY with PROTO_HTTP2 for backend protocol name 2013-11-04 18:15:56 +09:00
Tatsuhiro Tsujikawa ba3db66cec nghttpx: Replace "spdy" in option name with "http2" 2013-11-04 18:14:05 +09:00
Tatsuhiro Tsujikawa f3d71aa5bb nghttpx: Rename Spdy{Session,DownstreamConnection} to Http2{*} 2013-11-04 17:53:57 +09:00
Tatsuhiro Tsujikawa a483105e11 nghttpx: Set read/write timeout for HTTP/2 backend as well 2013-11-04 17:22:52 +09:00
Tatsuhiro Tsujikawa 69967aeef8 nghttpx: Add --client-private-key-file and --client-cert-file options 2013-11-02 23:34:25 +09:00
Tatsuhiro Tsujikawa 5bb7066474 nghttpx: Add --verify-client-cacert option
Using --cacert to load certificate for client certificate authentication
is problematic since, --cacert is also used for client mode.
This commit adds --verify-client-cacert option which specify the CA
certficate file used only for client certificate validation.
This change also removes the default certficate load function for
client certificate validation.
2013-11-02 21:41:05 +09:00
Tatsuhiro Tsujikawa 41208950ec nghttpx: Disable push in HTTP/2 backend 2013-11-02 16:59:59 +09:00
Tatsuhiro Tsujikawa 02acfd7d70 nghttpx: Add --verify-client option
This option requires client certificate and successful verification.
Use --cacert option to add CA certificates as necessary.
2013-11-02 01:10:18 +09:00
Tatsuhiro Tsujikawa 1835bda02e nghttp, nghttpd: Add --color option to force colored log output 2013-11-01 23:06:53 +09:00
Tatsuhiro Tsujikawa d9f5451810 nghttpx: Add SETTINGS ACK timeout to HTTP/2 backend connections 2013-10-31 21:45:17 +09:00
Tatsuhiro Tsujikawa e0fe939951 nghttpx: Add SETTINGS timeout timer to Http2Upstream 2013-10-31 00:44:23 +09:00
Tatsuhiro Tsujikawa 3ea28863e4 nghttpx: Set "dconn_ is null" log in INFO 2013-10-30 01:26:28 +09:00
Tatsuhiro Tsujikawa dfa1194804 Add new API to return effective recv data/win size for connection
Using this feature, connection level flow control is now enabled
in nghttpx.
2013-10-30 00:51:01 +09:00
Tatsuhiro Tsujikawa b75455dd96 nghttpx: Remove recv data length calculation in HTTP/2 code 2013-10-30 00:10:28 +09:00
Tatsuhiro Tsujikawa 6c23c34d77 Add new API to return effective received data length and local window size 2013-10-30 00:07:35 +09:00
Tatsuhiro Tsujikawa 9b6a0e5875 nghttpx: Fix stream hang with request body
The end of request stream is not detected correct place.
Also Downstream::end_upload_data() is not called.
2013-10-30 00:00:58 +09:00
Tatsuhiro Tsujikawa 0ced4741d2 nghttpx: Remove flow control error detection code
Now flow control error detection is handled by the library
2013-10-29 22:46:38 +09:00
Tatsuhiro Tsujikawa 535329779c nghttp: Add --header-table-size option 2013-10-29 21:34:22 +09:00
Tatsuhiro Tsujikawa dc61f705df nghttp, nghttpd: Add SETTINGS timeout handling
SETTINGS timeout is 10 seconds for now.
2013-10-27 23:02:39 +09:00
Tatsuhiro Tsujikawa 5ace898392 Update error code 2013-10-27 19:31:24 +09:00
Tatsuhiro Tsujikawa a46ccdb144 Apply initiated SETTINGS changes on reception of ACK 2013-10-27 19:22:51 +09:00
Tatsuhiro Tsujikawa 2afa9f75f5 src/HttpServer: Fix compile error 2013-10-27 17:00:41 +09:00
Tatsuhiro Tsujikawa 5ca8f147f2 nghttpx: Code cleanup 2013-10-27 16:25:50 +09:00
Tatsuhiro Tsujikawa 67553d47e0 nghttpx: Use :authority and host instead of :host 2013-10-27 16:25:50 +09:00
Tatsuhiro Tsujikawa c4ae19e2a0 nghttp, nghttpd: Use :authority and host instead of :host 2013-10-27 16:25:50 +09:00
Tatsuhiro Tsujikawa 8f8c841df0 Merge branch 'master' into hpack-exp 2013-10-25 22:51:51 +09:00
Tatsuhiro Tsujikawa 896db5b24f API change: Add flags parameter to all submit_* functions
The nghttp2_submit_{request,response} family do not get this change.
2013-10-25 22:50:24 +09:00
Tatsuhiro Tsujikawa b193069110 Merge branch 'master' into hpack-exp 2013-10-23 23:23:51 +09:00
Tatsuhiro Tsujikawa 8c855c5567 src: Use std::vector to store name/value pairs 2013-10-23 23:18:24 +09:00
Tatsuhiro Tsujikawa 5add90489f Protocol ID change for HPACK experiment 2013-10-16 01:19:06 +09:00
Tatsuhiro Tsujikawa e85418f045 Fix local window size adjustments
Now shrinking local window size properly limits the amount of
WINDOW_UPDATE value so that shrinked window is honored.
2013-10-12 17:02:37 +09:00
Tatsuhiro Tsujikawa 2e7edf88bc nghttp: Add -W option to specify connection level window size bits 2013-10-10 22:04:37 +09:00
Tatsuhiro Tsujikawa 154a0014ef nghttp: Fix typo in help message 2013-10-10 21:25:53 +09:00
Tatsuhiro Tsujikawa 6249038cc0 src: Print headers in PUSH_PROMISE 2013-10-10 21:24:54 +09:00
Tatsuhiro Tsujikawa f355187176 nghttpx: Fix missing extension HTTP status code in response 2013-10-02 23:29:44 +09:00
Tatsuhiro Tsujikawa c7ce6d811e src/shrpx_config.cc: Code cleanup 2013-10-02 23:13:25 +09:00
Tatsuhiro Tsujikawa d90e0d4262 src/HtmlParser: Code cleanup 2013-10-02 23:08:47 +09:00
Tatsuhiro Tsujikawa a9ba00914e nghttpx: Log error_code when submitting RST_STREAM 2013-09-30 00:13:04 +09:00
Tatsuhiro Tsujikawa 8e9f08f81d nghttp: Assign different priority according to the resource type 2013-09-29 18:58:46 +09:00
Tatsuhiro Tsujikawa 31ae1fe660 app_helper.cc: Handle NGHTTP2_COMPRESSION_ERROR in strstatus 2013-09-28 22:57:12 +09:00
Tatsuhiro Tsujikawa bfe7a9af00 nghttp: Fix crash if attrs parameter of get_attr() is nullptr 2013-09-26 22:56:26 +09:00
Tatsuhiro Tsujikawa 55b8a0b777 shrpx_http2_upstream: Use std::unique_ptr for pre_upstream_ 2013-09-26 21:46:35 +09:00
Tatsuhiro Tsujikawa 3368c8b378 nghttpx: Fix wrong version ID in Upgrade response header field 2013-09-26 21:46:03 +09:00
Tatsuhiro Tsujikawa c5912341ad nghttpx: Fix crash on upgrade success 2013-09-26 21:39:19 +09:00
Tatsuhiro Tsujikawa 825c1bac6b shrpx_downstream.cc: Utilize std::move 2013-09-24 23:53:55 +09:00
Tatsuhiro Tsujikawa dc0af2e074 shrpx_https_upstream.cc: Code cleanup 2013-09-24 23:39:36 +09:00
Tatsuhiro Tsujikawa a0326b3f2b nghttpx: Handle error from bufferevent_socket_new and event_base_new 2013-09-24 23:17:53 +09:00
Tatsuhiro Tsujikawa 57f5730756 shrpx_http_downstream_connection.cc: Code cleanup 2013-09-24 21:42:50 +09:00
Tatsuhiro Tsujikawa 2572fb6fb4 shrpx.cc: Code cleanup 2013-09-24 21:34:59 +09:00
Tatsuhiro Tsujikawa 991f14846d shrpx_spdy_session.cc: Code cleanup 2013-09-24 21:34:04 +09:00
Tatsuhiro Tsujikawa e1dfc1cdc5 shrpx_spdy_session: Use std::unique_ptr for proxy_htp_ 2013-09-24 21:31:48 +09:00
Tatsuhiro Tsujikawa 769f560586 shrpx_https_upstream: Embed http_parser 2013-09-24 21:31:48 +09:00
Tatsuhiro Tsujikawa 811173f5c8 shrxp_worker.cc: Use std::unique_ptr for ThreadEventReceiver 2013-09-24 21:31:48 +09:00
Tatsuhiro Tsujikawa b459e42ee5 shrpx_ssl.cc: Use std::unique_ptr for ssl_locks 2013-09-24 21:31:48 +09:00
Tatsuhiro Tsujikawa cdbe6acfce shrpx_http_downstream_connection: Embed http_parser 2013-09-24 21:31:48 +09:00
Tatsuhiro Tsujikawa 3c1cad9272 shrpx_client_handler: Use std::unique_ptr for upstream_ 2013-09-24 21:31:47 +09:00
Tatsuhiro Tsujikawa ab39ae849f nghttpx: Add --npn-list option 2013-09-23 20:55:39 +09:00
Tatsuhiro Tsujikawa e5e1e9b76e shrpx_ssl.cc: Another code cleanup 2013-09-23 18:49:39 +09:00
Tatsuhiro Tsujikawa bd55f9cf2a shrxp_ssl.cc: Code cleanup 2013-09-23 18:40:17 +09:00
Tatsuhiro Tsujikawa 7d333f202a HtmlParser: Collect scripts URI as well 2013-09-19 01:19:35 +09:00
Tatsuhiro Tsujikawa 8dcaa08405 Replace steady_clock with monotonic_clock if steady_clock is not available 2013-09-17 22:48:30 +09:00
Tatsuhiro Tsujikawa 0a649e2499 src: Use std::chrono instead of gettimeofday and clock_gettime 2013-09-16 17:36:24 +09:00
Tatsuhiro Tsujikawa 04457aae62 nghttp: Code cleanup 2013-09-16 16:54:11 +09:00
Tatsuhiro Tsujikawa e2ff41c44c nghttp: Use -M as short option for --peer-max-concurrent-streams 2013-09-16 16:44:13 +09:00
Tatsuhiro Tsujikawa b14a97a273 Update .gitignore 2013-09-14 21:18:08 +09:00
Tatsuhiro Tsujikawa 99ba622fed Add NGHTTP2_OPT_PEER_MAX_CONCURRENT_STREAMS option
And utilize it in nghttp to limit initial max concurrent streams.
2013-09-14 19:41:49 +09:00
Tatsuhiro Tsujikawa c5d7d570e3 nghttpx: Code cleanup 2013-09-13 21:27:29 +09:00
Tatsuhiro Tsujikawa c48a1d7516 nghttpx: Add rate limit options 2013-09-13 21:23:55 +09:00
Tatsuhiro Tsujikawa 0f75997839 nghttpx: Share ev_token_bucket_cfg across ClientHandlers 2013-09-13 00:25:24 +09:00
Tatsuhiro Tsujikawa cbef6fd0c6 nghttpx: Replace \r\n with space when constructing HTTP/1 headers 2013-09-11 23:24:32 +09:00
Tatsuhiro Tsujikawa b7e1701f06 nghttp: Fix nghttp2_pack_settings_payload use 2013-09-09 21:25:46 +09:00
Tatsuhiro Tsujikawa 5cd1d4f0d6 Fix clang warnings 2013-09-08 23:16:08 +09:00
Tatsuhiro Tsujikawa 72802b92c5 src: Fix linker error 2013-09-08 16:29:39 +09:00
Tatsuhiro Tsujikawa cc1cfd97e3 src: Archive nghttpx sources into libnghttpx.a to reuse for tests 2013-09-08 15:52:41 +09:00
Tatsuhiro Tsujikawa 588fd3bda7 src, examples: Update .gitignore 2013-09-08 15:33:17 +09:00
Tatsuhiro Tsujikawa 1a05caf847 src: Use util::utos instead of std::to_string
Some platform (e.g., freebsd) does not define _GLIBCXX_USE_C99
and it hides std::to_string functions.
2013-09-08 14:29:18 +09:00
Tatsuhiro Tsujikawa 10f131c9d8 nghttpx: Guard ecdh use with !OPENSSL_NO_EC 2013-09-07 23:37:17 +09:00
Tatsuhiro Tsujikawa c751a6e935 Fix cosmetic errors 2013-09-07 16:38:21 +09:00
Tatsuhiro Tsujikawa 776cff3dc7 src: Use std::unique_ptr for nv 2013-09-07 01:52:46 +09:00
Tatsuhiro Tsujikawa 56f7debad6 nghttpx: Fix resource leak 2013-09-07 01:46:46 +09:00
Tatsuhiro Tsujikawa 92a6549f78 nghttp: Initialize flag to 0 2013-09-07 01:46:20 +09:00
Tatsuhiro Tsujikawa bb7361cd9b nghttp: Code cleanup 2013-09-06 00:18:43 +09:00
Tatsuhiro Tsujikawa 586533be2f nghttpx: Fix CONNECT fail on SPDY upstream 2013-09-05 23:40:48 +09:00
Tatsuhiro Tsujikawa dd4151330e nghttp: Use before_frame_send_callback to check stream_id 2013-09-03 21:27:33 +09:00
Tatsuhiro Tsujikawa d960cf8953 Add const to read-only nghttp2_frame* parameter in callbacks 2013-09-03 21:24:14 +09:00
Tatsuhiro Tsujikawa 2f26b04730 nghttpx: Code cleanup 2013-09-01 00:23:07 +09:00
Tatsuhiro Tsujikawa 9e703170cd nghttpx: Enable --honor-cipher-order automatically when --ciphers is used 2013-08-30 23:02:47 +09:00
Tatsuhiro Tsujikawa aea036c9d4 nghttpx: Support ECDHE and DHE cipher suites
Use --dh-param-file option to specify a file including DH parameters
in PEM format.

For example, you can create DH parameters with 1024 bit key using
following command:

$ openssl dhparam -outform PEM -out dhparam.pem 1024
2013-08-30 22:07:42 +09:00
Tatsuhiro Tsujikawa e818d098ec nghttp: Fix off-by-one error when allocating space for request headers 2013-08-30 21:30:04 +09:00
Tatsuhiro Tsujikawa 59286adc5e Add int return value to nghttp2_on_unknown_frame_recv_callback 2013-08-29 23:10:18 +09:00
Tatsuhiro Tsujikawa db4f519500 Add int return value to nghttp2_on_frame_recv_parse_error_callback 2013-08-29 23:07:07 +09:00
Tatsuhiro Tsujikawa 053c444769 Add int return value to nghttp2_on_request_recv_callback 2013-08-29 23:03:21 +09:00
Tatsuhiro Tsujikawa 81653c1d1b Add int return value to nghttp2_on_stream_close_callback 2013-08-29 22:58:05 +09:00
Tatsuhiro Tsujikawa 5a7f65f1f7 Add int return value to on_data_send_callback 2013-08-29 21:55:04 +09:00
Tatsuhiro Tsujikawa b9d2f9b6b0 Add int return value to on_frame_not_send_callback 2013-08-29 21:51:58 +09:00
Tatsuhiro Tsujikawa d4852b0f11 Add int return value to on_frame_send_callback 2013-08-29 21:48:34 +09:00
Tatsuhiro Tsujikawa a51cdaacfc Add int return value to nghttp2_before_frame_send_callback 2013-08-29 21:45:10 +09:00
Tatsuhiro Tsujikawa 544ac9f61f Add int return value to nghttp2_on_data_recv_callback 2013-08-29 21:41:33 +09:00
Tatsuhiro Tsujikawa 972b47d6af Add int return value to nghttp2_on_data_chunk_recv_callback 2013-08-29 21:39:32 +09:00
Tatsuhiro Tsujikawa fb7d22fcb9 Add int return value to nghttp2_on_invalid_frame_recv_callback 2013-08-29 21:37:26 +09:00
Tatsuhiro Tsujikawa a59cd3be82 Add int return value to nghttp2_on_frame_recv_callback 2013-08-29 21:33:52 +09:00
Tatsuhiro Tsujikawa 6387d18f23 nghttpx: Fix expect header field handling 2013-08-29 00:03:26 +09:00
Tatsuhiro Tsujikawa 400615ca35 nghttpd: Check disallowed headers 2013-08-28 03:14:19 +09:00
Tatsuhiro Tsujikawa 3544bfdbef src: Move pure HTTP code from shrpx_http.cc to http2.cc 2013-08-28 02:47:22 +09:00
Tatsuhiro Tsujikawa 1f3b96e233 nghttpx: Rewrite header handling 2013-08-28 00:09:46 +09:00
Tatsuhiro Tsujikawa 89cd2ff479 nghttpx: Stream error if disallowed header field in HTTP2 is received 2013-08-26 01:25:31 +09:00
Tatsuhiro Tsujikawa 33743ab832 nghttpx: Remove banned header fields in HTTP2 request and response 2013-08-26 01:09:15 +09:00
Tatsuhiro Tsujikawa 4744e90054 nghttpd: Include status code only in :status header field 2013-08-26 00:58:06 +09:00
Tatsuhiro Tsujikawa 4fb1811d18 nghttpx: Include status code only in :status header field in HTTP2 response 2013-08-25 23:28:34 +09:00
Tatsuhiro Tsujikawa 5d7b7a1691 nghttpx: Stream error if mandatory HTTP/2 request header field is missing 2013-08-25 23:21:07 +09:00
Tatsuhiro Tsujikawa 556212a602 nghttpx: Replace \r\n in the header field to SPC in http downstream 2013-08-24 23:27:45 +09:00
Tatsuhiro Tsujikawa e55abcd634 nghttpx: Fix stream hang when http2 downstream CONNECT failed 2013-08-24 01:43:05 +09:00
Tatsuhiro Tsujikawa 2764c55678 src: Code cleanup 2013-08-23 03:33:05 +09:00
Tatsuhiro Tsujikawa 5ae8605883 src: Use std::thread 2013-08-23 03:33:05 +09:00
Tatsuhiro Tsujikawa 47ee8e3c79 src: Code cleanup 2013-08-23 03:33:05 +09:00
Tatsuhiro Tsujikawa 0c9703fa2c Remove NGHTTP2_FLAG_END_FLOW_CONTROL 2013-08-23 03:33:05 +09:00
Tatsuhiro Tsujikawa c38c6cdd09 nghttpx: Fix bug writecb is nullptr for HTTP/1 connection 2013-08-23 03:32:26 +09:00
Tatsuhiro Tsujikawa b2a34c2e5b nghttpx: Fix bug content-length is removed 2013-08-23 02:49:21 +09:00
Tatsuhiro Tsujikawa 358d12a842 nghttpx: Fix bug CONNECT does not work 2013-08-22 21:28:27 +09:00
Tatsuhiro Tsujikawa b8a01f5212 nghttpx: Require content-length in HTTP2 upstream if END_STREAM flag is not set 2013-08-21 01:19:16 +09:00