From d50aa9e85291f840cda5c704ad59ce4fd75351a8 Mon Sep 17 00:00:00 2001 From: chenyong Date: Tue, 17 Dec 2019 10:48:16 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BF=AE=E5=A4=8D=E3=80=91http=20loca?= =?UTF-8?q?tion=20=E8=B7=B3=E8=BD=AC=E5=8A=9F=E8=83=BD=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E7=9A=84=20session=20=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=92=8C=E9=87=8A=E6=94=BE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: chenyong --- src/webclient.c | 65 ++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/src/webclient.c b/src/webclient.c index a4ce1ea..b136ba8 100644 --- a/src/webclient.c +++ b/src/webclient.c @@ -374,9 +374,6 @@ static int webclient_connect(struct webclient_session *session, const char *URI) RT_ASSERT(session); RT_ASSERT(URI); - /* initialize the socket of session */ - session->socket = -1; - timeout.tv_sec = WEBCLIENT_DEFAULT_TIMEO; timeout.tv_usec = 0; @@ -864,6 +861,8 @@ struct webclient_session *webclient_session_create(size_t header_sz) return RT_NULL; } + /* initialize the socket of session */ + session->socket = -1; session->content_length = -1; session->header = (struct webclient_header *) web_calloc(1, sizeof(struct webclient_header)); @@ -889,6 +888,8 @@ struct webclient_session *webclient_session_create(size_t header_sz) return session; } +static int webclient_clean(struct webclient_session *session); + /** * send GET request to http server and get response header. * @@ -943,15 +944,11 @@ int webclient_get(struct webclient_session *session, const char *URI) return -WEBCLIENT_NOMEM; } - /* close old client session */ - webclient_close(session); - - /* create new client session by location url */ - session = webclient_session_create(WEBCLIENT_HEADER_BUFSZ); - if (session == RT_NULL) - { - return -WEBCLIENT_NOMEM; - } + /* clean webclient session */ + webclient_clean(session); + /* clean webclient session header */ + session->header->length = 0; + rt_memset(session->header->buffer, 0, session->header->size); rc = webclient_get(session, new_url); @@ -1020,15 +1017,11 @@ int webclient_get_position(struct webclient_session *session, const char *URI, i return -WEBCLIENT_NOMEM; } - /* close old client session */ - webclient_close(session); - - /* create new client session by location url */ - session = webclient_session_create(WEBCLIENT_HEADER_BUFSZ); - if (session == RT_NULL) - { - return -WEBCLIENT_NOMEM; - } + /* clean webclient session */ + webclient_clean(session); + /* clean webclient session header */ + session->header->length = 0; + rt_memset(session->header->buffer, 0, session->header->size); rc = webclient_get_position(session, new_url, position); @@ -1369,17 +1362,9 @@ int webclient_write(struct webclient_session *session, const unsigned char *buff return total_write; } -/** - * close a webclient client session. - * - * @param session http client session - * - * @return 0: close success - */ -int webclient_close(struct webclient_session *session) +/* close session socket, free host and request url */ +static int webclient_clean(struct webclient_session *session) { - RT_ASSERT(session); - #ifdef WEBCLIENT_USING_MBED_TLS if (session->tls_session) { @@ -1411,6 +1396,24 @@ int webclient_close(struct webclient_session *session) web_free(session->req_url); } + session->content_length = -1; + + return 0; +} + +/** + * close a webclient client session. + * + * @param session http client session + * + * @return 0: close success + */ +int webclient_close(struct webclient_session *session) +{ + RT_ASSERT(session); + + webclient_clean(session); + if (session->header && session->header->buffer) { web_free(session->header->buffer);