summaryrefslogtreecommitdiff
path: root/lib/http.h
Commit message (Collapse)AuthorAgeFilesLines
* Curl_checkheaders: make it available for IMAP and SMTP tooDaniel Stenberg2017-09-111-2/+0
| | | | | | ... not only HTTP uses this now. Closes #1875
* mime: unified to use the typedef'd mime structs everywhereDaniel Stenberg2017-09-051-2/+2
| | | | ... and slightly edited to follow our code style better.
* mime: new MIME API.Patrick Monnerat2017-09-021-2/+2
| | | | | | | Available in HTTP, SMTP and IMAP. Deprecates the FORM API. See CURLOPT_MIMEPOST. Lib code and associated documentation.
* http: s/TINY_INITIAL_POST_SIZE/EXPECT_100_THRESHOLDDaniel Stenberg2017-07-061-3/+8
| | | | | Make the name reflect its use better, and add a short comment describing what it's for.
* http2: disable server push if not requestedAlessandro Ghedini2017-01-151-0/+4
| | | | Ref: https://github.com/curl/curl/pull/1160
* http2: handle closed streams when uploadingTatsuhiro Tsujikawa2016-08-281-0/+1
| | | | Fixes #986
* internals: rename the SessionHandle struct to Curl_easyDaniel Stenberg2016-06-221-4/+4
|
* http2: Use size_t type for data drain countJay Satiro2016-04-121-1/+1
| | | | | Ref: https://github.com/curl/curl/issues/659 Ref: https://github.com/curl/curl/pull/663
* http2: Ensure that http2_handle_stream_close is calledTatsuhiro Tsujikawa2016-04-111-0/+1
| | | | | | | | | | | | | | | | | | | This commit ensures that streams which was closed in on_stream_close callback gets passed to http2_handle_stream_close. Previously, this might not happen. To achieve this, we increment drain property to forcibly call recv function for that stream. To more accurately check that we have no pending event before shutting down HTTP/2 session, we sum up drain property into http_conn.drain_total. We only shutdown session if that value is 0. With this commit, when stream was closed before reading response header fields, error code CURLE_HTTP2_STREAM is returned even if HTTP/2 level error is NO_ERROR. This signals the upper layer that stream was closed by error just like TCP connection close in HTTP/1. Ref: https://github.com/curl/curl/issues/659 Ref: https://github.com/curl/curl/pull/663
* URLs: change all http:// URLs to https://Daniel Stenberg2016-02-031-1/+1
|
* http2: Support trailer fieldsTatsuhiro Tsujikawa2015-12-151-0/+1
| | | | | | | | | | | | | | | | | | | | | | | This commit adds trailer support in HTTP/2. In HTTP/1.1, chunked encoding must be used to send trialer fields. HTTP/2 deprecated any trandfer-encoding, including chunked. But trailer fields are now always available. Since trailer fields are relatively rare these days (gRPC uses them extensively though), allocating buffer for trailer fields is done when we detect that HEADERS frame containing trailer fields is started. We use Curl_add_buffer_* functions to buffer all trailers, just like we do for regular header fields. And then deliver them when stream is closed. We have to be careful here so that all data are delivered to upper layer before sending trailers to the application. We can deliver trailer field one by one using NGHTTP2_ERR_PAUSE mechanism, but current method is far more simple. Another possibility is use chunked encoding internally for HTTP/2 traffic. I have not tested it, but it could add another overhead. Closes #564
* http2: discard frames with no SessionHandleAnders Bakken2015-08-111-1/+0
| | | | | | | | | | | | Return 0 instead of NGHTTP2_ERR_CALLBACK_FAILURE if we can't locate the SessionHandle. Apparently mod_h2 will sometimes send a frame for a stream_id we're finished with. Use nghttp2_session_get_stream_user_data and nghttp2_session_set_stream_user_data to identify SessionHandles instead of a hash. Closes #372
* http2: fixed the header accessor functions for the push callbackDaniel Stenberg2015-06-241-1/+4
|
* http2: setup the new pushed stream properlyDaniel Stenberg2015-06-241-0/+1
|
* http: Add some include guards for the new HTTP/2 stuffJay Satiro2015-05-181-0/+4
|
* http2: store upload state per streamDaniel Stenberg2015-05-181-3/+4
| | | | Use a curl_off_t for upload left
* http2: rename s/data/pausedataDaniel Stenberg2015-05-181-2/+2
|
* http2: separate multiplex/pipelining + cleanup memory leaksDaniel Stenberg2015-05-181-0/+1
|
* http2: Don't call nghttp2_session_mem_recv while it is paused by a streamTatsuhiro Tsujikawa2015-05-181-0/+2
|
* http2: Read data left in connection buffer after pauseTatsuhiro Tsujikawa2015-05-181-0/+2
| | | | | | | | Previously when we do pause because of out of buffer, we just throw away unread data in connection buffer. This just broke protocol framing, and I saw occasional FRAME_SIZE_ERROR. This commit fix this issue by remembering how much data read, and in the next iteration, we process remaining data.
* http2: store incoming h2 SETTINGSDaniel Stenberg2015-05-181-0/+8
|
* http2: force "drainage" of streamsDaniel Stenberg2015-05-181-0/+1
| | | | | ... which is necessary since the socket won't be readable but there is data waiting in the buffer.
* http2: move the mem+len pair to the stream structDaniel Stenberg2015-05-181-2/+3
|
* http2: more stream-oriented data, stream ID 0 is for connectionsDaniel Stenberg2015-05-181-2/+2
|
* http2: move lots of state data to the 'stream' structDaniel Stenberg2015-05-181-6/+5
| | | | | | | | | ... from the connection struct. The stream one being the 'struct HTTP' which is kept in the SessionHandle struct (easy handle). lookup streams for incoming frames in the stream hash, hashing is based on the stream id and we get the SessionHandle for the incoming stream that way.
* HTTP: partial start at fixing up hash-lookups on http2 frame receivalDaniel Stenberg2015-05-181-5/+5
|
* http: a stream hash for h2 multiplexingDaniel Stenberg2015-05-181-0/+3
|
* http2: move stream_id to the HTTP struct (per-stream)Daniel Stenberg2015-05-181-1/+3
|
* http2: Return error if stream was closed with other than NO_ERRORTatsuhiro Tsujikawa2015-02-271-1/+2
| | | | | | | | Previously, we just ignored error code passed to on_stream_close_callback and just return 0 (success) after stream closure even if stream was reset with error. This patch records error code in on_stream_close_callback, and return -1 and use CURLE_HTTP2 error code on abnormal stream closure.
* HTTP2: Support expect: 100-continueTatsuhiro Tsujikawa2014-08-021-1/+4
| | | | | | | "Expect: 100-continue", which was once deprecated in HTTP/2, is now resurrected in HTTP/2 draft 14. This change adds its support to HTTP/2 code. This change also includes stricter header field checking.
* CURLOPT_PROXYHEADER: set headers for proxy-onlyDaniel Stenberg2014-04-041-2/+7
| | | | | | Includes docs and new test cases: 1525, 1526 and 1527 Co-written-by: Vijay Panghal
* http2: Support HTTP POST/PUTTatsuhiro Tsujikawa2014-02-171-1/+9
| | | | | | | | | This patch enables HTTP POST/PUT in HTTP2. We disabled Expect header field and chunked transfer encoding since HTTP2 forbids them. In HTTP1, Curl sends small upload data with request headers, but HTTP2 requires upload data must be in DATA frame separately. So we added some conditionals to achieve this.
* http2: handle incoming data larger than remaining bufferTatsuhiro Tsujikawa2014-02-041-0/+4
|
* http2: Check stream ID we are interested inTatsuhiro Tsujikawa2014-02-041-0/+1
|
* http2: store response header in temporary bufferTatsuhiro Tsujikawa2014-02-041-0/+3
|
* HTTP2: add layer between existing http and socket(TLS) layerTatsuhiro Tsujikawa2014-02-041-0/+6
| | | | | | | | | | | | | | | | | | This patch chooses different approach to integrate HTTP2 into HTTP curl stack. The idea is that we insert HTTP2 layer between HTTP code and socket(TLS) layer. When HTTP2 is initialized (either in NPN or Upgrade), we replace the Curl_recv/Curl_send callbacks with HTTP2's, but keep the original callbacks in http_conn struct. When sending serialized data by nghttp2, we use original Curl_send callback. Likewise, when reading data from network, we use original Curl_recv callback. In this way we can treat both TLS and non-TLS connections. With this patch, one can transfer contents from https://twitter.com and from nghttp2 test server in plain HTTP as well. The code still has rough edges. The notable one is I could not figure out how to call nghttp2_session_send() when underlying socket is writable.
* http2: add CRLF when first data arrivesDaniel Stenberg2014-01-301-1/+1
|
* http2: convert HEADER frames to HTTP1-like headersDaniel Stenberg2014-01-301-1/+1
| | | | ... and then go through the "normal" HTTP engine.
* http2: do the POST Upgrade dance properlyDaniel Stenberg2014-01-301-1/+4
|
* http2: switch recv/send functions to http2 ones after 101Daniel Stenberg2014-01-291-0/+3
|
* http: Post base64 decoding tidy upSteve Holme2013-11-031-4/+4
| | | | | | | | | | | Renamed copy_header_value() to Curl_copy_header_value() as this function is now non static. Simplified proxy flag in Curl_http_input_auth() when calling sub-functions. Removed unnecessary white space removal when using negotiate as it had been missed in commit cdccb422671aeb.
* http: Added proxy tunnel authentication message header value extractionSteve Holme2013-11-021-1/+2
| | | | | | ...following recent changes to Curl_base64_decode() rather than trying to parse a header line for the authentication mechanisms which is CRLF terminated and inline zero terminate it.
* http: fix build warning under LLVMNick Zitzmann2013-09-071-0/+2
| | | | | | | When building the code using LLVM Clang without NGHTTP2, I was getting this warning: ../lib/http.h:155:1: warning: empty struct is a GNU extension [-Wgnu] Placing a dummy variable into the data structure silenced the warning.
* http2: actually init nghttp2 and send HTTP2-Settings properlyDaniel Stenberg2013-09-071-0/+12
|
* urldata: clean up the use of the protocol specific structsDaniel Stenberg2013-08-121-1/+2
| | | | | | | | 1 - always allocate the struct in protocol->setup_connection. Some protocol handlers had to get this function added. 2 - always free at the end of a request. This is also an attempt to keep less memory in the handle after it is completed.
* Revert changes relative to lib/*.[ch] recent renamingYang Tse2013-01-061-0/+171
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts renaming and usage of lib/*.h header files done 28-12-2012, reverting 2 commits: f871de0... build: make use of 76 lib/*.h renamed files ffd8e12... build: rename 76 lib/*.h files This also reverts removal of redundant include guard (redundant thanks to changes in above commits) done 2-12-2013, reverting 1 commit: c087374... curl_setup.h: remove redundant include guard This also reverts renaming and usage of lib/*.c source files done 3-12-2013, reverting 3 commits: 13606bb... build: make use of 93 lib/*.c renamed files 5b6e792... build: rename 93 lib/*.c files 7d83dff... build: commit 13606bbfde follow-up 1 Start of related discussion thread: http://curl.haxx.se/mail/lib-2013-01/0012.html Asking for confirmation on pushing this revertion commit: http://curl.haxx.se/mail/lib-2013-01/0048.html Confirmation summary: http://curl.haxx.se/mail/lib-2013-01/0079.html NOTICE: The list of 2 files that have been modified by other intermixed commits, while renamed, and also by at least one of the 6 commits this one reverts follows below. These 2 files will exhibit a hole in history unless git's '--follow' option is used when viewing logs. lib/curl_imap.h lib/curl_smtp.h
* build: rename 76 lib/*.h filesYang Tse2012-12-281-171/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 76 private header files renamed to use our standard naming scheme. This commit only does the file renaming. ---------------------------------------- renamed: amigaos.h -> curl_amigaos.h renamed: arpa_telnet.h -> curl_arpa_telnet.h renamed: asyn.h -> curl_asyn.h renamed: axtls.h -> curl_axtls.h renamed: bundles.h -> curl_bundles.h renamed: conncache.h -> curl_conncache.h renamed: connect.h -> curl_connect.h renamed: content_encoding.h -> curl_content_encoding.h renamed: cookie.h -> curl_cookie.h renamed: cyassl.h -> curl_cyassl.h renamed: dict.h -> curl_dict.h renamed: easyif.h -> curl_easyif.h renamed: escape.h -> curl_escape.h renamed: file.h -> curl_file.h renamed: fileinfo.h -> curl_fileinfo.h renamed: formdata.h -> curl_formdata.h renamed: ftp.h -> curl_ftp.h renamed: ftplistparser.h -> curl_ftplistparser.h renamed: getinfo.h -> curl_getinfo.h renamed: gopher.h -> curl_gopher.h renamed: gtls.h -> curl_gtls.h renamed: hash.h -> curl_hash.h renamed: hostcheck.h -> curl_hostcheck.h renamed: hostip.h -> curl_hostip.h renamed: http.h -> curl_http.h renamed: http_chunks.h -> curl_http_chunks.h renamed: http_digest.h -> curl_http_digest.h renamed: http_negotiate.h -> curl_http_negotiate.h renamed: http_proxy.h -> curl_http_proxy.h renamed: if2ip.h -> curl_if2ip.h renamed: imap.h -> curl_imap.h renamed: inet_ntop.h -> curl_inet_ntop.h renamed: inet_pton.h -> curl_inet_pton.h renamed: krb4.h -> curl_krb4.h renamed: llist.h -> curl_llist.h renamed: memdebug.h -> curl_memdebug.h renamed: multiif.h -> curl_multiif.h renamed: netrc.h -> curl_netrc.h renamed: non-ascii.h -> curl_non-ascii.h renamed: nonblock.h -> curl_nonblock.h renamed: nssg.h -> curl_nssg.h renamed: parsedate.h -> curl_parsedate.h renamed: pingpong.h -> curl_pingpong.h renamed: polarssl.h -> curl_polarssl.h renamed: pop3.h -> curl_pop3.h renamed: progress.h -> curl_progress.h renamed: qssl.h -> curl_qssl.h renamed: rawstr.h -> curl_rawstr.h renamed: rtsp.h -> curl_rtsp.h renamed: select.h -> curl_select.h renamed: sendf.h -> curl_sendf.h renamed: setup.h -> curl_setup.h renamed: setup_once.h -> curl_setup_once.h renamed: share.h -> curl_share.h renamed: slist.h -> curl_slist.h renamed: smtp.h -> curl_smtp.h renamed: sockaddr.h -> curl_sockaddr.h renamed: socks.h -> curl_socks.h renamed: speedcheck.h -> curl_speedcheck.h renamed: splay.h -> curl_splay.h renamed: ssh.h -> curl_ssh.h renamed: sslgen.h -> curl_sslgen.h renamed: ssluse.h -> curl_ssluse.h renamed: strdup.h -> curl_strdup.h renamed: strequal.h -> curl_strequal.h renamed: strerror.h -> curl_strerror.h renamed: strtok.h -> curl_strtok.h renamed: strtoofft.h -> curl_strtoofft.h renamed: telnet.h -> curl_telnet.h renamed: tftp.h -> curl_tftp.h renamed: timeval.h -> curl_timeval.h renamed: transfer.h -> curl_transfer.h renamed: url.h -> curl_url.h renamed: urldata.h -> curl_urldata.h renamed: warnless.h -> curl_warnless.h renamed: wildcard.h -> curl_wildcard.h ----------------------------------------
* lib/*.h: use our standard naming scheme for header inclusion guardsYang Tse2012-12-281-4/+4
|
* privatise: make private functions staticDaniel Stenberg2011-06-031-5/+0
|
* http-proxy: move proxy code to http_proxy.cDaniel Stenberg2011-04-041-7/+22
| | | | | | | The new http_proxy.* files now host HTTP proxy specific code (500+ lines moved out from http.c), and as a consequence there is a macro introduced for the Curl_proxyCONNECT() function so that code can use it without actually supporting proxy (or HTTP) in builds.