Lines Matching refs:data
64 static CURLcode mqtt_do(struct Curl_easy *data, bool *done);
65 static CURLcode mqtt_done(struct Curl_easy *data,
67 static CURLcode mqtt_doing(struct Curl_easy *data, bool *done);
68 static int mqtt_getsock(struct Curl_easy *data, struct connectdata *conn,
70 static CURLcode mqtt_setup_conn(struct Curl_easy *data,
100 static CURLcode mqtt_setup_conn(struct Curl_easy *data,
107 DEBUGASSERT(data->req.p.mqtt == NULL);
113 data->req.p.mqtt = mq;
117 static CURLcode mqtt_send(struct Curl_easy *data,
121 struct MQTT *mq = data->req.p.mqtt;
123 result = Curl_nwrite(data, FIRSTSOCKET, buf, len, &n);
126 Curl_debug(data, CURLINFO_HEADER_OUT, buf, (size_t)n);
145 static int mqtt_getsock(struct Curl_easy *data,
149 (void)data;
249 static CURLcode mqtt_connect(struct Curl_easy *data)
266 const char *username = data->state.aptr.user ?
267 data->state.aptr.user : "";
270 const char *passwd = data->state.aptr.passwd ?
271 data->state.aptr.passwd : "";
299 result = Curl_rand_alnum(data, (unsigned char *)&client_id[clen],
304 failf(data, "Client ID length mismatched: [%zu]", strlen(client_id));
308 infof(data, "Using client id '%s'", client_id);
321 failf(data, "Username is too large: [%zu]", ulen);
331 failf(data, "Password is too large: [%zu]", plen);
338 result = mqtt_send(data, packet, packetlen);
343 Curl_safefree(data->state.aptr.user);
344 Curl_safefree(data->state.aptr.passwd);
348 static CURLcode mqtt_disconnect(struct Curl_easy *data)
351 struct MQTT *mq = data->req.p.mqtt;
352 result = mqtt_send(data, (char *)"\xe0\x00", 2);
358 static CURLcode mqtt_recv_atleast(struct Curl_easy *data, size_t nbytes)
360 struct MQTT *mq = data->req.p.mqtt;
369 result = Curl_read(data, data->conn->sock[FIRSTSOCKET],
381 static void mqtt_recv_consume(struct Curl_easy *data, size_t nbytes)
383 struct MQTT *mq = data->req.p.mqtt;
391 static CURLcode mqtt_verify_connack(struct Curl_easy *data)
393 struct MQTT *mq = data->req.p.mqtt;
397 result = mqtt_recv_atleast(data, MQTT_CONNACK_LEN);
404 Curl_debug(data, CURLINFO_HEADER_IN, ptr, MQTT_CONNACK_LEN);
407 failf(data, "Expected %02x%02x but got %02x%02x",
413 mqtt_recv_consume(data, MQTT_CONNACK_LEN);
418 static CURLcode mqtt_get_topic(struct Curl_easy *data,
421 char *path = data->state.up.path;
426 failf(data, "Too long MQTT topic");
431 failf(data, "No MQTT topic found. Forgot to URL encode it?");
436 static CURLcode mqtt_subscribe(struct Curl_easy *data)
445 struct connectdata *conn = data->conn;
447 result = mqtt_get_topic(data, &topic, &topiclen);
473 result = mqtt_send(data, (char *)packet, packetlen);
484 static CURLcode mqtt_verify_suback(struct Curl_easy *data)
486 struct MQTT *mq = data->req.p.mqtt;
487 struct connectdata *conn = data->conn;
492 result = mqtt_recv_atleast(data, MQTT_SUBACK_LEN);
499 Curl_debug(data, CURLINFO_HEADER_IN, ptr, MQTT_SUBACK_LEN);
508 mqtt_recv_consume(data, MQTT_SUBACK_LEN);
513 static CURLcode mqtt_publish(struct Curl_easy *data)
516 char *payload = data->set.postfields;
525 curl_off_t postfieldsize = data->set.postfieldsize;
528 DEBUGF(infof(data, "mqtt_publish without payload, return bad arg"));
536 result = mqtt_get_topic(data, &topic, &topiclen);
560 result = mqtt_send(data, (char *)pkt, i);
603 static void mqstate(struct Curl_easy *data,
607 struct connectdata *conn = data->conn;
610 infof(data, "%s (from %s) (next is %s)",
621 static CURLcode mqtt_read_publish(struct Curl_easy *data, bool *done)
624 struct connectdata *conn = data->conn;
629 struct MQTT *mq = data->req.p.mqtt;
635 result = mqtt_verify_suback(data);
639 mqstate(data, MQTT_FIRST, MQTT_PUBWAIT);
647 mqstate(data, MQTT_PUB_REMAIN, MQTT_NOSTATE);
649 mqstate(data, MQTT_SUBACK_COMING, MQTT_NOSTATE);
653 infof(data, "Got DISCONNECT");
664 infof(data, "Remaining length: %zu bytes", remlen);
665 if(data->set.max_filesize &&
666 (curl_off_t)remlen > data->set.max_filesize) {
667 failf(data, "Maximum file size exceeded");
671 Curl_pgrsSetDownloadSize(data, remlen);
672 data->req.bytecount = 0;
673 data->req.size = remlen;
682 result = Curl_read(data, sockfd, buffer, rest, &nread);
685 infof(data, "EEEE AAAAGAIN");
690 infof(data, "server disconnected");
696 result = Curl_client_write(data, CLIENTWRITE_BODY, buffer, nread);
703 mqstate(data, MQTT_FIRST, MQTT_PUBWAIT);
715 static CURLcode mqtt_do(struct Curl_easy *data, bool *done)
720 result = mqtt_connect(data);
722 failf(data, "Error %d sending MQTT CONNECT request", result);
725 mqstate(data, MQTT_FIRST, MQTT_CONNACK);
729 static CURLcode mqtt_done(struct Curl_easy *data,
732 struct MQTT *mq = data->req.p.mqtt;
740 static CURLcode mqtt_doing(struct Curl_easy *data, bool *done)
743 struct connectdata *conn = data->conn;
745 struct MQTT *mq = data->req.p.mqtt;
755 result = mqtt_send(data, mq->sendleftovers, mq->nsend);
761 infof(data, "mqtt_doing: state [%d]", (int) mqtt->state);
765 result = Curl_read(data, sockfd, (char *)&mq->firstbyte, 1, &nread);
769 failf(data, "Connection disconnected");
774 Curl_debug(data, CURLINFO_HEADER_IN, (char *)&mq->firstbyte, 1);
777 mqstate(data, MQTT_REMAINING_LENGTH, MQTT_NOSTATE);
781 result = Curl_read(data, sockfd, (char *)&byte, 1, &nread);
784 Curl_debug(data, CURLINFO_HEADER_IN, (char *)&byte, 1);
796 mqstate(data, mqtt->nextstate, MQTT_NOSTATE);
799 mqstate(data, MQTT_FIRST, MQTT_FIRST);
802 infof(data, "Got DISCONNECT");
807 result = mqtt_verify_connack(data);
811 if(data->state.httpreq == HTTPREQ_POST) {
812 result = mqtt_publish(data);
814 result = mqtt_disconnect(data);
820 result = mqtt_subscribe(data);
822 mqstate(data, MQTT_FIRST, MQTT_SUBACK);
830 result = mqtt_read_publish(data, done);
834 failf(data, "State not handled yet");