mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 23:58:49 -05:00
parent
03bb481598
commit
3d4c0c8b9b
37
lib/http2.c
37
lib/http2.c
@ -1149,7 +1149,8 @@ static int h2_session_send(struct Curl_easy *data,
|
|||||||
*/
|
*/
|
||||||
static int h2_process_pending_input(struct Curl_easy *data,
|
static int h2_process_pending_input(struct Curl_easy *data,
|
||||||
struct http_conn *httpc,
|
struct http_conn *httpc,
|
||||||
CURLcode *err) {
|
CURLcode *err)
|
||||||
|
{
|
||||||
ssize_t nread;
|
ssize_t nread;
|
||||||
char *inbuf;
|
char *inbuf;
|
||||||
ssize_t rv;
|
ssize_t rv;
|
||||||
@ -1197,9 +1198,41 @@ static int h2_process_pending_input(struct Curl_easy *data,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Called from transfer.c:done_sending when we stop uploading.
|
||||||
|
*/
|
||||||
|
CURLcode Curl_http2_done_sending(struct connectdata *conn)
|
||||||
|
{
|
||||||
|
CURLcode result = CURLE_OK;
|
||||||
|
|
||||||
|
if((conn->handler == &Curl_handler_http2_ssl) ||
|
||||||
|
(conn->handler == &Curl_handler_http2)) {
|
||||||
|
/* make sure this is only attempted for HTTP/2 transfers */
|
||||||
|
|
||||||
|
struct HTTP *stream = conn->data->req.protop;
|
||||||
|
|
||||||
|
if(stream->upload_left) {
|
||||||
|
/* If the stream still thinks there's data left to upload. */
|
||||||
|
struct http_conn *httpc = &conn->proto.httpc;
|
||||||
|
nghttp2_session *h2 = httpc->h2;
|
||||||
|
|
||||||
|
stream->upload_left = 0; /* DONE! */
|
||||||
|
|
||||||
|
/* resume sending here to trigger the callback to get called again so
|
||||||
|
that it can signal EOF to nghttp2 */
|
||||||
|
(void)nghttp2_session_resume_data(h2, stream->stream_id);
|
||||||
|
|
||||||
|
(void)h2_process_pending_input(conn->data, httpc, &result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static ssize_t http2_handle_stream_close(struct connectdata *conn,
|
static ssize_t http2_handle_stream_close(struct connectdata *conn,
|
||||||
struct Curl_easy *data,
|
struct Curl_easy *data,
|
||||||
struct HTTP *stream, CURLcode *err) {
|
struct HTTP *stream, CURLcode *err)
|
||||||
|
{
|
||||||
char *trailer_pos, *trailer_end;
|
char *trailer_pos, *trailer_end;
|
||||||
CURLcode result;
|
CURLcode result;
|
||||||
struct http_conn *httpc = &conn->proto.httpc;
|
struct http_conn *httpc = &conn->proto.httpc;
|
||||||
|
@ -52,6 +52,7 @@ CURLcode Curl_http2_switched(struct connectdata *conn,
|
|||||||
void Curl_http2_setup_conn(struct connectdata *conn);
|
void Curl_http2_setup_conn(struct connectdata *conn);
|
||||||
void Curl_http2_setup_req(struct Curl_easy *data);
|
void Curl_http2_setup_req(struct Curl_easy *data);
|
||||||
void Curl_http2_done(struct connectdata *conn, bool premature);
|
void Curl_http2_done(struct connectdata *conn, bool premature);
|
||||||
|
CURLcode Curl_http2_done_sending(struct connectdata *conn);
|
||||||
#else /* USE_NGHTTP2 */
|
#else /* USE_NGHTTP2 */
|
||||||
#define Curl_http2_init(x) CURLE_UNSUPPORTED_PROTOCOL
|
#define Curl_http2_init(x) CURLE_UNSUPPORTED_PROTOCOL
|
||||||
#define Curl_http2_send_request(x) CURLE_UNSUPPORTED_PROTOCOL
|
#define Curl_http2_send_request(x) CURLE_UNSUPPORTED_PROTOCOL
|
||||||
@ -63,6 +64,7 @@ void Curl_http2_done(struct connectdata *conn, bool premature);
|
|||||||
#define Curl_http2_init_state(x)
|
#define Curl_http2_init_state(x)
|
||||||
#define Curl_http2_init_userset(x)
|
#define Curl_http2_init_userset(x)
|
||||||
#define Curl_http2_done(x,y)
|
#define Curl_http2_done(x,y)
|
||||||
|
#define Curl_http2_done_sending(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* HEADER_CURL_HTTP2_H */
|
#endif /* HEADER_CURL_HTTP2_H */
|
||||||
|
@ -75,6 +75,7 @@
|
|||||||
#include "multiif.h"
|
#include "multiif.h"
|
||||||
#include "connect.h"
|
#include "connect.h"
|
||||||
#include "non-ascii.h"
|
#include "non-ascii.h"
|
||||||
|
#include "http2.h"
|
||||||
|
|
||||||
/* The last 3 #include files should be in this order */
|
/* The last 3 #include files should be in this order */
|
||||||
#include "curl_printf.h"
|
#include "curl_printf.h"
|
||||||
@ -832,6 +833,8 @@ static CURLcode done_sending(struct connectdata *conn,
|
|||||||
{
|
{
|
||||||
k->keepon &= ~KEEP_SEND; /* we're done writing */
|
k->keepon &= ~KEEP_SEND; /* we're done writing */
|
||||||
|
|
||||||
|
Curl_http2_done_sending(conn);
|
||||||
|
|
||||||
if(conn->bits.rewindaftersend) {
|
if(conn->bits.rewindaftersend) {
|
||||||
CURLcode result = Curl_readrewind(conn);
|
CURLcode result = Curl_readrewind(conn);
|
||||||
if(result)
|
if(result)
|
||||||
|
Loading…
Reference in New Issue
Block a user