Commit Graph

315 Commits

Author SHA1 Message Date
Tatsuhiro Tsujikawa a47abdba9b Update .gitignore 2014-01-11 01:05:42 +09:00
Tatsuhiro Tsujikawa 0e9390d5ad Move http-parser to third-party dir and fix `make distcheck` 2014-01-11 00:36:20 +09:00
Tatsuhiro Tsujikawa 46b3a7e1b3 examples: Remove EXTRA_DIST 2014-01-11 00:22:23 +09:00
MATSUMOTO Ryosuke 87f4f1d4f5 Fix :host header bug 2013-12-31 20:51:34 +09:00
Tatsuhiro Tsujikawa a94fb43bb9 examples: Code cleanup, cut request path after '?' 2013-12-26 21:45:29 +09:00
Tatsuhiro Tsujikawa 9cb8754d09 Rename nghttp2_session_fail_session as nghttp2_session_terminate_session 2013-12-26 00:23:07 +09:00
Tatsuhiro Tsujikawa 286345a2ef examples/libevent-client.c: Fix memory leak, use nghttp2_session_fail_session 2013-12-25 00:29:36 +09:00
Tatsuhiro Tsujikawa 946d3150ba examples: Add minimum error handling for API functions 2013-12-24 21:30:49 +09:00
Tatsuhiro Tsujikawa 9fc9ef9a40 examples: Refactor a bit 2013-12-24 19:55:26 +09:00
Tatsuhiro Tsujikawa 0fb7e430d7 examples: Set TCP_NODELAY option 2013-12-24 00:01:44 +09:00
Tatsuhiro Tsujikawa 4e01ed1a95 examples: Add libevent-server.c 2013-12-23 23:49:30 +09:00
Tatsuhiro Tsujikawa e04e6ccdf9 examples: Remove false README.rst 2013-12-22 19:28:26 +09:00
Tatsuhiro Tsujikawa dcfd9b22fc examples: Add libevent-client, requires libevent for examples 2013-12-22 19:26:32 +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 6ea91e57e0 Adjust struct/class alignment 2013-12-06 23:17:38 +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 588fd3bda7 src, examples: Update .gitignore 2013-09-08 15:33:17 +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 27c0f76afb examples: Remove unused source files 2013-09-02 22:55:37 +09:00
Tatsuhiro Tsujikawa 666ab068ff examples: Rewrite client example 2013-09-02 22:55:37 +09:00
Tatsuhiro Tsujikawa 0edce70343 Rebranding nghttp2 2013-07-13 00:43:06 +09:00
Tatsuhiro Tsujikawa ba8bc5cae7 spdycli: Fix missing last by with IPv6 addr and check argc 2013-02-14 21:15:41 +09:00
Tatsuhiro Tsujikawa 50bff9e647 spdycli: Handle error return from connect_to() 2013-01-25 22:58:07 +09:00
Tatsuhiro Tsujikawa 4d0db62f1d examples: Remove unused htparse 2012-12-08 00:38:53 +09:00
Tatsuhiro Tsujikawa a28e1c6e7d Add src/.gitignore and edit examples/.gitignore 2012-10-06 00:01:13 +09:00
Tatsuhiro Tsujikawa e69947a054 Removed trailing spaces 2012-10-01 21:51:24 +09:00
Tatsuhiro Tsujikawa 3acfae37bb examples: Add README 2012-09-10 22:45:33 +09:00
Tatsuhiro Tsujikawa b0fcd68783 Move spdycat, spdyd and shrpx from examples to src
To distinguish the to-be-installed programs and non-installable
example source code, the former programs, spdycat, spdydyd and shrpx,
were moved to src directory. spdynative was removed from Makefile
because it does not appeal to any users much.
2012-09-10 21:39:51 +09:00
Tatsuhiro Tsujikawa 5634c7ffdc shrpx: Ignore response body if HTTP status code is 1xx, 204 or 304 2012-09-09 17:45:06 +09:00
Tatsuhiro Tsujikawa bafcbfde88 Remove unused zlib.h header file from spdylay.h 2012-08-22 00:14:02 +09:00
Tatsuhiro Tsujikawa 0be5ac6ffb spdycat: use locale-free strieq instead strcasecmp 2012-08-21 23:22:33 +09:00
Tatsuhiro Tsujikawa cdded94305 spdycat: wrap line longer than 79 chars 2012-08-21 22:02:35 +09:00
Tatsuhiro Tsujikawa ccf225641e spdycat: disallow empty header name with -H 2012-08-21 21:39:33 +09:00
Stephen Ludin 2266b102e3 Adding arbitrary headers form the command line 2012-08-21 21:28:06 +09:00
Tatsuhiro Tsujikawa a69b61c40c shrpx: add --ciphers option to specify allowed cipher list 2012-08-20 21:50:03 +09:00
Tatsuhiro Tsujikawa fce4be9555 shrpx: Change default values of -f and -b option
-f now defaults to 0.0.0.0,3000. -b now defaults to 127.0.0.1,80.
2012-08-03 22:20:59 +09:00
Tatsuhiro Tsujikawa 0b3eca7d40 shrpx: Fix netbsd compile warning 2012-08-02 02:07:51 +09:00
Tatsuhiro Tsujikawa fd9f5991f5 shrpx: Fill initial values for flags 2012-08-02 01:32:33 +09:00
Tatsuhiro Tsujikawa 4623413a99 shrpx: Added --backlog option 2012-08-02 01:28:59 +09:00
Tatsuhiro Tsujikawa 0c10528ca3 shrpx: Add syslog support 2012-08-02 01:20:18 +09:00
Tatsuhiro Tsujikawa 7962c1bf6c shrpx: drop root priviledgs after loading private key 2012-08-02 00:29:37 +09:00
Tatsuhiro Tsujikawa 75c9840644 shrpx:: Use LOG() instead of std::cerr 2012-08-02 00:26:24 +09:00
Tatsuhiro Tsujikawa 1dd61d5973 shrpx: Support configuration file
By default, configuration file is /etc/shrpx/shrpx.conf.  It can be
overridden using --conf option. See shrpx.conf.sample to know how to
write shrpx.conf. The configurations given in shrpx.conf will be
overridden by the options specified in cmmand-line.
2012-08-02 00:06:41 +09:00
Tatsuhiro Tsujikawa f3587e1591 shrpx: Added --pid-file and --user option
--pid-file option saves PID to the specified file.  user option is
--used to drop root privileges.
2012-08-01 01:55:31 +09:00
Tatsuhiro Tsujikawa 05e6d527b1 Fix compile error on netbsd
Include config.h from sources under examples.  Added kevent.udata type
check.
2012-07-27 22:11:13 +09:00
Tatsuhiro Tsujikawa 51c4f4f5b0 shrpx: Added --frontend-spdy-window-bits option 2012-07-26 23:18:37 +09:00
Tatsuhiro Tsujikawa f89112b5e9 shrpx: Added --backend-keep-alive-timeout option 2012-07-26 23:08:51 +09:00
Tatsuhiro Tsujikawa 17802de7f7 spdyd: Use SSL_CTX_use_certificate_chain_file 2012-07-26 21:46:05 +09:00
Tatsuhiro Tsujikawa 24453cf0bd Don't add X-Forwarded-Spdy in SPDY proxy mode 2012-07-24 00:08:12 +09:00
Tatsuhiro Tsujikawa 75f93d8333 shrpx: Check spdylay_session_want_{read,write} 2012-07-19 01:59:55 +09:00
Tatsuhiro Tsujikawa 4bc200f9dc Added simple accesslog 2012-07-18 01:08:05 +09:00
Tatsuhiro Tsujikawa b7335a949f shrpx: Log stream id for spdy connection 2012-07-18 00:16:52 +09:00
Tatsuhiro Tsujikawa c7fe718dcf Added read/write timeout options for both upstream and downstream 2012-07-18 00:13:11 +09:00
Tatsuhiro Tsujikawa f10848febd shrpx: Handle the case when evbuffer_add() returned -1 2012-07-17 00:12:31 +09:00
Tatsuhiro Tsujikawa a95981f3da shrpx: Check the fatal error inside downstream http-parser callback 2012-07-16 23:55:08 +09:00
Tatsuhiro Tsujikawa f56cfc920e shrpx: fixed read/write timeouts of upstream are interchanged. 2012-07-16 23:48:02 +09:00
Tatsuhiro Tsujikawa 6fb76831c0 shrpx: Increased default downstream timeout to 60s 2012-07-16 23:43:43 +09:00
Tatsuhiro Tsujikawa 0f5a37fa2a shrpx: Added error handling when error_reply() failed 2012-07-16 23:29:48 +09:00
Tatsuhiro Tsujikawa e817995063 shrpx: Log fatal error in spdy upstream 2012-07-16 23:03:07 +09:00
Tatsuhiro Tsujikawa 2afc50bf49 shrpx: Specify long enough timeout to emulate removing timeout
It seems that specifying NULL to bufferevent_set_timeouts() does not
remove timeout, which is described in bufferevent book (but it is not
described in header). As a workaround, we specify long enough timeout
to emulate removing timeout.
2012-07-16 18:42:42 +09:00
Tatsuhiro Tsujikawa d36f9f1c5b shrpx: Load certificate chain from file 2012-07-16 18:31:52 +09:00
Tatsuhiro Tsujikawa 06eac680e8 Prefer SPDY/2 for spdy proxy connection
Chrome SPDY/3 flow control does not work well in spdy proxy
connection.
2012-07-15 21:39:19 +09:00
Tatsuhiro Tsujikawa 7f2b9ae75d Ensure that upstream->send() is called in callback.
Log error string in case of network error
2012-07-15 21:15:28 +09:00
Tatsuhiro Tsujikawa 317ad6f4ad Fixed free() for new. Any 2xx status means success in CONNECT response 2012-07-15 03:32:05 +09:00
Tatsuhiro Tsujikawa 7465289919 Enable SSL/TLS session caching. Share SSL_CTX access workers. 2012-07-14 23:24:03 +09:00
Tatsuhiro Tsujikawa 06ed17ff26 shrpx: fixed timeout change is not triggered when tunneling.
For upstream timeout, it seems OpenSSL backed bufferevent does not
remove timeout. Set large timeout as a workaround.
2012-07-14 21:47:28 +09:00
Tatsuhiro Tsujikawa 17699b1fdf shrpx: Create absoluteURI only when path starts with '/' 2012-07-14 17:36:55 +09:00
Tatsuhiro Tsujikawa 3fc0e4dd6b spdycat: Use TLSv1_client_method
Jetty refuses connection if SSLv23_client_method is used.
2012-07-13 23:05:24 +09:00
Tatsuhiro Tsujikawa a47feb22cb Don't prepend scheme and host to path if path starts with scheme.
This is just a sanity check in caes of path contains absoluteURI.
2012-07-12 23:44:30 +09:00
Tatsuhiro Tsujikawa e5249538a6 Added --add-x-forwarded-for option.
This option append X-Forwarded-For header field to the downstream
request.
2012-07-12 23:39:11 +09:00
Tatsuhiro Tsujikawa 63adaad93a Updated usage 2012-07-11 22:13:36 +09:00
Tatsuhiro Tsujikawa e5de9c9708 Issue RST_STREAM if the remote end of tunnel is closed. 2012-07-11 19:48:07 +09:00
Tatsuhiro Tsujikawa a143133d43 Use http_parser for tunneling connection transparently 2012-07-11 18:46:00 +09:00
Tatsuhiro Tsujikawa 12ab6863c4 Use http-parser instead of htparse 2012-07-11 18:32:04 +09:00
Tatsuhiro Tsujikawa 9fd49121ee Added http-parser 2012-07-11 18:31:32 +09:00
Tatsuhiro Tsujikawa 2c5f40b175 Added SPDY proxy mode.
To enable SPDY proxy, use --spdy-proxy option.  At time of this
writing, the only browser which supports SSL/SPDY proxy is Chrome.

Removed Location and Host header field rewrite.
2012-07-11 16:20:16 +09:00
Tatsuhiro Tsujikawa db8a62c0d7 htparse: enhancements and bug fixes
CONNECT method supported. Fixed _str8cmp and _str9cmp comparison.
Support no content-length case.  Fixed hook_uri_run args. Run
hook_on_hdrs_complete if no header field is present. Supported empty
header value. Case insensitive match for particular header values
(e.g., keep-alive).
2012-07-11 16:02:08 +09:00
Tatsuhiro Tsujikawa fe5dfe533f Updated htparse 2012-07-01 18:37:12 +09:00
Piotr Sikora ebfc313a26 spdycat: add support for Server Name Indication (SNI).
Signed-off-by: Piotr Sikora <piotr.sikora@frickle.com>
2012-06-25 15:05:12 +00:00
Tatsuhiro Tsujikawa 27dd0b7405 Don't forward keep-alive, connection and proxy-connection header fields 2012-06-15 20:56:30 +09:00
Tatsuhiro Tsujikawa 9d84db230d Enclose downstream IPv6 numeric address in hostport with square blackets 2012-06-14 23:01:47 +09:00
Tatsuhiro Tsujikawa 14d1a5a547 Reverted accidental chagnes in spdycat.cc 2012-06-14 20:07:00 +09:00
Tatsuhiro Tsujikawa 9893b7e2b0 Modify Location header field if redirect URI refers to downstream 2012-06-13 00:08:28 +09:00
Tatsuhiro Tsujikawa eb9458bba9 Adjust read/write timeout depending on the request/response state 2012-06-12 23:02:01 +09:00
Tatsuhiro Tsujikawa 22f5bb3ebb Added implementation note for deletion of downstream 2012-06-12 22:43:28 +09:00
Tatsuhiro Tsujikawa 6702d34651 Enable EV_READ for downstream connection.
Removed Downstream::force_resume_read() calls.  Added missing delete
downstream in shrpx_spdy_upstream.cc.  In on_stream_close_callback,
delete downstream even if response state != MSG_COMPLETE. This may
cause segmentaiton fault.
2012-06-12 21:56:41 +09:00
Tatsuhiro Tsujikawa 0ffa4bcb46 Added missing shrpx.h and shrpx_error.h to shrpx_SOURCES 2012-06-11 23:36:02 +09:00
Tatsuhiro Tsujikawa 7b8768bd3a Fixed compile error with --enable-maintainer-mode 2012-06-11 23:12:23 +09:00
Tatsuhiro Tsujikawa d8637958dd Added missing \r\n after chunk 2012-06-10 02:51:42 +09:00
Tatsuhiro Tsujikawa 1fa784c709 Handle Expect: 100-continue 2012-06-10 02:33:34 +09:00
Tatsuhiro Tsujikawa e871768d84 Disable read for downstream by default to avoid timeout before request 2012-06-10 01:46:33 +09:00
Tatsuhiro Tsujikawa c29dd0b80f Added SPDY/3 flow control 2012-06-10 01:36:30 +09:00
Tatsuhiro Tsujikawa c2785955ca HTTPS: Flow control in request chain 2012-06-10 00:50:50 +09:00
Tatsuhiro Tsujikawa bff22fd1e9 Check upstream header length only in Downstream::INITIAL state. 2012-06-10 00:30:44 +09:00
Tatsuhiro Tsujikawa 9d19e2bfe9 Rewrite connection pooling 2012-06-09 23:14:00 +09:00
Tatsuhiro Tsujikawa 183cce1707 Use bitmask instead of std::vector 2012-06-08 22:52:08 +09:00
Tatsuhiro Tsujikawa 6df709b441 Added -pthread to AM_LDFLAGS for examples 2012-06-08 22:44:09 +09:00
Tatsuhiro Tsujikawa f2a6b3c9d6 Set OpenSSL locking_function. 2012-06-08 22:41:24 +09:00
Tatsuhiro Tsujikawa 1199db690e gcc-4.7 fix 2012-06-08 21:40:03 +09:00
Tatsuhiro Tsujikawa 5ea6ea476e Rewritten to_uint32 using shift 2012-06-08 02:10:02 +09:00
Tatsuhiro Tsujikawa 01c6f7af4c Code cleanup 2012-06-08 00:39:55 +09:00
Tatsuhiro Tsujikawa 17025a96d9 SPDY: Use keep-alive connection to downstream server 2012-06-08 00:36:19 +09:00
Tatsuhiro Tsujikawa 695dd50612 HTTPS: Keep-Alive connection to downstream servers.
Reset status = 0 when entering s_status state in htparse_run
2012-06-07 23:42:11 +09:00
Tatsuhiro Tsujikawa 9303cca430 Send back Connection: keep-alive for the request with http/1.0 keep-alive 2012-06-07 22:40:42 +09:00
Tatsuhiro Tsujikawa 7319620160 Added SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION and TCP_NODELAY 2012-06-07 22:39:57 +09:00
Tatsuhiro Tsujikawa 3a39745784 Add via header field to SPDY upstream response 2012-06-07 02:29:00 +09:00
Tatsuhiro Tsujikawa c240368ee5 Change severity level of getaddrinfo failure to INFO 2012-06-07 02:16:30 +09:00
Tatsuhiro Tsujikawa 5f5fb18b77 Option value fixes.
Set -n default value to 1. Show missing default values.  Use -c value
in SPDY session.
2012-06-07 02:09:59 +09:00
Tatsuhiro Tsujikawa 673f9c7df0 Merge branch 'rproxy' 2012-06-07 01:59:20 +09:00
Tatsuhiro Tsujikawa 18f557f743 Conditional compilation with libevent-openssl
Require Libevent-openssl 2.0.8 because we use
evconnlistener_set_error_cb().
2012-06-07 01:43:02 +09:00
Tatsuhiro Tsujikawa b189e291a9 Added htparse library
htparse is written by Mark Ellzey and part of libevhtp.
https://github.com/ellzey/libevhtp

The included code are modified by me for bugfixes.
See my fork:
https://github.com/tatsuhiro-t/libevhtp/tree/master/htparse
2012-06-07 01:43:02 +09:00
Tatsuhiro Tsujikawa e37ec7b765 Append Via header field. Don't modify Server header field. 2012-06-07 01:43:02 +09:00
Tatsuhiro Tsujikawa 908ec2e695 Made -D option work. Get private key and certificate file from cmd-line 2012-06-07 01:43:02 +09:00
Tatsuhiro Tsujikawa 8e0a1c91a3 Added command-line options 2012-06-07 01:43:02 +09:00
Tatsuhiro Tsujikawa 8da4938031 Listen both on IPv6 and IPv4 if possible 2012-06-07 01:43:02 +09:00
Tatsuhiro Tsujikawa 28ed887463 Don't sleep. Just log the error 2012-06-06 21:44:08 +09:00
Tatsuhiro Tsujikawa faee23a925 Fixed assertion failure. Resume downstream read on SPDY stream close. 2012-06-06 21:39:55 +09:00
Tatsuhiro Tsujikawa 4ac689526b Don't modify user-agent 2012-06-06 21:11:54 +09:00
Tatsuhiro Tsujikawa ac84b68189 Enable SSL partial write 2012-06-06 21:10:13 +09:00
Tatsuhiro Tsujikawa 117a39d35b Zeroed wev 2012-06-06 02:30:20 +09:00
Tatsuhiro Tsujikawa 71a3a70c02 Handle error when fd runs out
The default log level is now WARNING.
2012-06-06 02:23:07 +09:00
Tatsuhiro Tsujikawa 8f1c49e75c Added multi thread support 2012-06-06 01:26:04 +09:00
Tatsuhiro Tsujikawa c0b564abe4 Tidied up 2012-06-05 22:55:19 +09:00
Tatsuhiro Tsujikawa 67669bf3ca Delete downstream if SPDY stream has been already closed 2012-06-05 22:46:47 +09:00
Tatsuhiro Tsujikawa e8cefa9238 Handle too long upstream request headers 2012-06-05 22:13:22 +09:00
Tatsuhiro Tsujikawa be1c6bb968 Removed commented send() 2012-06-05 21:25:05 +09:00
Jim Morrison b1c0287c84 Enable writing partial buffers. 2012-06-04 13:01:36 -07:00
Tatsuhiro Tsujikawa c04c09ff3e Avoid too large buffering in upstream output. 2012-06-05 03:11:43 +09:00
Tatsuhiro Tsujikawa fad7f51f8d Initial commit of shrpx: SPDY/HTTPS to HTTP reverse proxy
Put libhtparse in examples/htparse
2012-06-04 23:48:31 +09:00
Tatsuhiro Tsujikawa 08f76b09e3 Aded included <functional> from spdy.h 2012-05-25 21:55:15 +09:00
Tatsuhiro Tsujikawa 80ab232060 Guard include of config.h with HAVE_CONFIG_H 2012-05-19 22:11:51 +09:00
Tatsuhiro Tsujikawa 14f5c463e9 Added missing examples/HtmlParser.{cc,h} 2012-05-19 22:10:07 +09:00
Tatsuhiro Tsujikawa e2332abc1d Added -s, --stat option to print statistics
Print, for each stream, time delta from SSL/TLS handshake and each
SYN_STREAM. The time deltas are measured after SYN_REPLY received and
all data received.
For example, the following output:

  SYN_REPLY: X(Y)

means SYN_REPLY was received X ms after SSL/TLS handshake and Y ms
after the corresponding SYN_STREAM was sent.
2012-05-19 21:54:41 +09:00
Tatsuhiro Tsujikawa 991ded912d Added -a, --get-asserts option to spdycat
If this option is used, spdycat also downloads assets such as
stylesheets, images and script files linked from the downloaded
resource. They are queued in the same SPDY session.
2012-05-19 17:09:40 +09:00
Tatsuhiro Tsujikawa 8b8d79eeff Include text/html in content-type for error status response 2012-05-19 17:01:11 +09:00
Tatsuhiro Tsujikawa caf592402c Added -2 option to spdycat 2012-05-12 21:20:19 +09:00
Tatsuhiro Tsujikawa ca5ccae927 Prefer spdy/3 to spdy/2 in spdyd 2012-05-12 21:19:38 +09:00
Tatsuhiro Tsujikawa 9b22165072 Updated usage output for example programs 2012-05-12 21:13:56 +09:00
Tatsuhiro Tsujikawa 5c187b950f spdylay_data_source_read_callback can return
SPDYLAY_ERR_TEMPORAL_CALLBACK_FAILURE to signal stream error.
2012-05-12 18:19:05 +09:00
Tatsuhiro Tsujikawa 5789f35f5e Print error message using spdylay_strerror in spdycli 2012-05-11 21:43:37 +09:00
Tatsuhiro Tsujikawa c1d360469a Return SPDYLAY_ERR_EOF when SSL_read() returned 0 2012-05-11 21:40:51 +09:00
Tatsuhiro Tsujikawa b0761a3eba Don't print "Fatal" if EOF is received and all requests has been responded. 2012-05-11 00:23:52 +09:00
Tatsuhiro Tsujikawa aba18f4ba7 Return SPDYLAY_ERR_EOF when SSL/TLS or underlying TCP connection is closed. 2012-05-11 00:22:38 +09:00
Tatsuhiro Tsujikawa aca4269610 Updated help output of spdycat 2012-05-09 23:41:15 +09:00
Tatsuhiro Tsujikawa f45e68e05b Added debug output for incoming invalid frames to SpdyServer 2012-05-09 23:35:06 +09:00
Tatsuhiro Tsujikawa 0288bedabb Renamed FRAME_TOO_LARGE as SPDYLAY_FRAME_TOO_LARGE 2012-05-09 23:29:33 +09:00
Tatsuhiro Tsujikawa 21e85281fa Added debug output using on_invalid_ctrl_recv_callback to spdycat. 2012-05-09 23:27:44 +09:00
Tatsuhiro Tsujikawa d377fe0dc6 Added spdylay_strerror() public API. 2012-05-09 23:01:46 +09:00
Tatsuhiro Tsujikawa c68a0b5e6d Added spdylay_on_unknown_ctrl_recv_callback.
This callback function is invoked when the unknown frame type is received.
Added debug output using this callback to spdycat.
2012-05-09 22:41:08 +09:00
Tatsuhiro Tsujikawa 171bede1fa Added spdylay_session_on_ctrl_recv_parse_error_callback.
This callback function is invoked when the received frame data could not
be parsed correctly.
Added debug output using this callback to spdycat.
2012-05-09 21:55:21 +09:00