diff options
| author | thegeorg <[email protected]> | 2024-10-11 21:07:18 +0300 |
|---|---|---|
| committer | thegeorg <[email protected]> | 2024-10-11 21:17:24 +0300 |
| commit | 1df197e6035ea9826bfedee7d48812e318ba9c7a (patch) | |
| tree | 76b8e9de41820755adf209854d06a84a8b5a1988 /contrib/libs/curl/lib/mqtt.c | |
| parent | f9c007ea1b59b960201def74990810b26ecdfd48 (diff) | |
Revert "Update contrib/libs/curl to 8.10.1" to fix
Revert "Update contrib/libs/curl to 8.10.1"
This reverts commit 428ef806a15515cdaa325530aa8cc6903fac5fb6, reversing
changes made to 40e46e6394df409d1545a3771c8a47a86ed55eac.
Revert "Fix formatting after rXXXXXX"
This reverts commit a73689311a92e195d14136c5a0049ef1e40b1f3e, reversing
changes made to 17980b8756d1f74d3dacddc7ca4945c30f35611c.
commit_hash:5c5194831e5455b61fbee61619066396626beab1
Diffstat (limited to 'contrib/libs/curl/lib/mqtt.c')
| -rw-r--r-- | contrib/libs/curl/lib/mqtt.c | 67 |
1 files changed, 35 insertions, 32 deletions
diff --git a/contrib/libs/curl/lib/mqtt.c b/contrib/libs/curl/lib/mqtt.c index 22d354a5c26..366235c559c 100644 --- a/contrib/libs/curl/lib/mqtt.c +++ b/contrib/libs/curl/lib/mqtt.c @@ -75,7 +75,7 @@ static CURLcode mqtt_setup_conn(struct Curl_easy *data, */ const struct Curl_handler Curl_handler_mqtt = { - "mqtt", /* scheme */ + "MQTT", /* scheme */ mqtt_setup_conn, /* setup_connection */ mqtt_do, /* do_it */ mqtt_done, /* done */ @@ -88,8 +88,7 @@ const struct Curl_handler Curl_handler_mqtt = { ZERO_NULL, /* domore_getsock */ ZERO_NULL, /* perform_getsock */ ZERO_NULL, /* disconnect */ - ZERO_NULL, /* write_resp */ - ZERO_NULL, /* write_resp_hd */ + ZERO_NULL, /* readwrite */ ZERO_NULL, /* connection_check */ ZERO_NULL, /* attach connection */ PORT_MQTT, /* defport */ @@ -120,12 +119,12 @@ static CURLcode mqtt_send(struct Curl_easy *data, { CURLcode result = CURLE_OK; struct MQTT *mq = data->req.p.mqtt; - size_t n; - result = Curl_xfer_send(data, buf, len, FALSE, &n); + ssize_t n; + result = Curl_nwrite(data, FIRSTSOCKET, buf, len, &n); if(result) return result; Curl_debug(data, CURLINFO_HEADER_OUT, buf, (size_t)n); - if(len != n) { + if(len != (size_t)n) { size_t nsend = len - n; char *sendleftovers = Curl_memdup(&buf[n], nsend); if(!sendleftovers) @@ -154,15 +153,15 @@ static int mqtt_getsock(struct Curl_easy *data, static int mqtt_encode_len(char *buf, size_t len) { + unsigned char encoded; int i; for(i = 0; (len > 0) && (i<4); i++) { - unsigned char encoded; encoded = len % 0x80; len /= 0x80; if(len) encoded |= 0x80; - buf[i] = (char)encoded; + buf[i] = encoded; } return i; @@ -312,7 +311,7 @@ static CURLcode mqtt_connect(struct Curl_easy *data) start_user = pos + 3 + MQTT_CLIENTID_LEN; /* position where starts the password payload */ start_pwd = start_user + ulen; - /* if username was provided, add it to the packet */ + /* if user name was provided, add it to the packet */ if(ulen) { start_pwd += 2; @@ -367,7 +366,8 @@ static CURLcode mqtt_recv_atleast(struct Curl_easy *data, size_t nbytes) ssize_t nread; DEBUGASSERT(nbytes - rlen < sizeof(readbuf)); - result = Curl_xfer_recv(data, (char *)readbuf, nbytes - rlen, &nread); + result = Curl_read(data, data->conn->sock[FIRSTSOCKET], + (char *)readbuf, nbytes - rlen, &nread); if(result) return result; DEBUGASSERT(nread >= 0); @@ -524,10 +524,8 @@ static CURLcode mqtt_publish(struct Curl_easy *data) char encodedbytes[4]; curl_off_t postfieldsize = data->set.postfieldsize; - if(!payload) { - DEBUGF(infof(data, "mqtt_publish without payload, return bad arg")); + if(!payload) return CURLE_BAD_FUNCTION_ARGUMENT; - } if(postfieldsize < 0) payloadlen = strlen(payload); else @@ -585,7 +583,7 @@ static size_t mqtt_decode_len(unsigned char *buf, return len; } -#ifdef DEBUGBUILD +#ifdef CURLDEBUG static const char *statenames[]={ "MQTT_FIRST", "MQTT_REMAINING_LENGTH", @@ -606,7 +604,7 @@ static void mqstate(struct Curl_easy *data, { struct connectdata *conn = data->conn; struct mqtt_conn *mqtt = &conn->proto.mqtt; -#ifdef DEBUGBUILD +#ifdef CURLDEBUG infof(data, "%s (from %s) (next is %s)", statenames[state], statenames[mqtt->state], @@ -622,7 +620,9 @@ static CURLcode mqtt_read_publish(struct Curl_easy *data, bool *done) { CURLcode result = CURLE_OK; struct connectdata *conn = data->conn; + curl_socket_t sockfd = conn->sock[FIRSTSOCKET]; ssize_t nread; + unsigned char *pkt = (unsigned char *)data->state.buffer; size_t remlen; struct mqtt_conn *mqtt = &conn->proto.mqtt; struct MQTT *mq = data->req.p.mqtt; @@ -671,14 +671,13 @@ MQTT_SUBACK_COMING: data->req.bytecount = 0; data->req.size = remlen; mq->npacket = remlen; /* get this many bytes */ - FALLTHROUGH(); + /* FALLTHROUGH */ case MQTT_PUB_REMAIN: { /* read rest of packet, but no more. Cap to buffer size */ - char buffer[4*1024]; size_t rest = mq->npacket; - if(rest > sizeof(buffer)) - rest = sizeof(buffer); - result = Curl_xfer_recv(data, buffer, rest, &nread); + if(rest > (size_t)data->set.buffer_size) + rest = (size_t)data->set.buffer_size; + result = Curl_read(data, sockfd, (char *)pkt, rest, &nread); if(result) { if(CURLE_AGAIN == result) { infof(data, "EEEE AAAAGAIN"); @@ -691,12 +690,14 @@ MQTT_SUBACK_COMING: goto end; } + mq->npacket -= nread; + /* if QoS is set, message contains packet id */ - result = Curl_client_write(data, CLIENTWRITE_BODY, buffer, nread); + + result = Curl_client_write(data, CLIENTWRITE_BODY, (char *)pkt, nread); if(result) goto end; - mq->npacket -= nread; if(!mq->npacket) /* no more PUBLISH payload, back to subscribe wait state */ mqstate(data, MQTT_FIRST, MQTT_PUBWAIT); @@ -743,7 +744,9 @@ static CURLcode mqtt_doing(struct Curl_easy *data, bool *done) struct mqtt_conn *mqtt = &conn->proto.mqtt; struct MQTT *mq = data->req.p.mqtt; ssize_t nread; - unsigned char recvbyte; + curl_socket_t sockfd = conn->sock[FIRSTSOCKET]; + unsigned char *pkt = (unsigned char *)data->state.buffer; + unsigned char byte; *done = FALSE; @@ -760,7 +763,7 @@ static CURLcode mqtt_doing(struct Curl_easy *data, bool *done) switch(mqtt->state) { case MQTT_FIRST: /* Read the initial byte only */ - result = Curl_xfer_recv(data, (char *)&mq->firstbyte, 1, &nread); + result = Curl_read(data, sockfd, (char *)&mq->firstbyte, 1, &nread); if(result) break; else if(!nread) { @@ -773,22 +776,22 @@ static CURLcode mqtt_doing(struct Curl_easy *data, bool *done) /* remember the first byte */ mq->npacket = 0; mqstate(data, MQTT_REMAINING_LENGTH, MQTT_NOSTATE); - FALLTHROUGH(); + /* FALLTHROUGH */ case MQTT_REMAINING_LENGTH: do { - result = Curl_xfer_recv(data, (char *)&recvbyte, 1, &nread); - if(result || !nread) + result = Curl_read(data, sockfd, (char *)&byte, 1, &nread); + if(!nread) break; - Curl_debug(data, CURLINFO_HEADER_IN, (char *)&recvbyte, 1); - mq->pkt_hd[mq->npacket++] = recvbyte; - } while((recvbyte & 0x80) && (mq->npacket < 4)); - if(!result && nread && (recvbyte & 0x80)) + Curl_debug(data, CURLINFO_HEADER_IN, (char *)&byte, 1); + pkt[mq->npacket++] = byte; + } while((byte & 0x80) && (mq->npacket < 4)); + if(nread && (byte & 0x80)) /* MQTT supports up to 127 * 128^0 + 127 * 128^1 + 127 * 128^2 + 127 * 128^3 bytes. server tried to send more */ result = CURLE_WEIRD_SERVER_REPLY; if(result) break; - mq->remaining_length = mqtt_decode_len(mq->pkt_hd, mq->npacket, NULL); + mq->remaining_length = mqtt_decode_len(&pkt[0], mq->npacket, NULL); mq->npacket = 0; if(mq->remaining_length) { mqstate(data, mqtt->nextstate, MQTT_NOSTATE); |
