diff options
Diffstat (limited to 'libs/libmosquitto/src/send_connect.c')
-rw-r--r-- | libs/libmosquitto/src/send_connect.c | 204 |
1 files changed, 0 insertions, 204 deletions
diff --git a/libs/libmosquitto/src/send_connect.c b/libs/libmosquitto/src/send_connect.c deleted file mode 100644 index 210f125a80..0000000000 --- a/libs/libmosquitto/src/send_connect.c +++ /dev/null @@ -1,204 +0,0 @@ -/* -Copyright (c) 2009-2019 Roger Light <roger@atchoo.org> - -All rights reserved. This program and the accompanying materials -are made available under the terms of the Eclipse Public License v1.0 -and Eclipse Distribution License v1.0 which accompany this distribution. - -The Eclipse Public License is available at - http://www.eclipse.org/legal/epl-v10.html -and the Eclipse Distribution License is available at - http://www.eclipse.org/org/documents/edl-v10.php. - -Contributors: - Roger Light - initial implementation and documentation. -*/ - -#include "config.h" - -#include <assert.h> -#include <string.h> - -#ifdef WITH_BROKER -# include "mosquitto_broker_internal.h" -#endif - -#include "logging_mosq.h" -#include "memory_mosq.h" -#include "mosquitto.h" -#include "mosquitto_internal.h" -#include "mqtt_protocol.h" -#include "packet_mosq.h" -#include "property_mosq.h" - -int send__connect(struct mosquitto *mosq, uint16_t keepalive, bool clean_session, const mosquitto_property *properties) -{ - struct mosquitto__packet *packet = NULL; - int payloadlen; - uint8_t will = 0; - uint8_t byte; - int rc; - uint8_t version; - char *clientid, *username, *password; - int headerlen; - int proplen = 0, will_proplen, varbytes; - mosquitto_property *local_props = NULL; - uint16_t receive_maximum; - - assert(mosq); - - if(mosq->protocol == mosq_p_mqtt31 && !mosq->id) return MOSQ_ERR_PROTOCOL; - -#if defined(WITH_BROKER) && defined(WITH_BRIDGE) - if(mosq->bridge){ - clientid = mosq->bridge->remote_clientid; - username = mosq->bridge->remote_username; - password = mosq->bridge->remote_password; - }else{ - clientid = mosq->id; - username = mosq->username; - password = mosq->password; - } -#else - clientid = mosq->id; - username = mosq->username; - password = mosq->password; -#endif - - if(mosq->protocol == mosq_p_mqtt5){ - /* Generate properties from options */ - if(!mosquitto_property_read_int16(properties, MQTT_PROP_RECEIVE_MAXIMUM, &receive_maximum, false)){ - rc = mosquitto_property_add_int16(&local_props, MQTT_PROP_RECEIVE_MAXIMUM, mosq->msgs_in.inflight_maximum); - if(rc) return rc; - }else{ - mosq->msgs_in.inflight_maximum = receive_maximum; - mosq->msgs_in.inflight_quota = receive_maximum; - } - - version = MQTT_PROTOCOL_V5; - headerlen = 10; - proplen = 0; - proplen += property__get_length_all(properties); - proplen += property__get_length_all(local_props); - varbytes = packet__varint_bytes(proplen); - headerlen += proplen + varbytes; - }else if(mosq->protocol == mosq_p_mqtt311){ - version = MQTT_PROTOCOL_V311; - headerlen = 10; - }else if(mosq->protocol == mosq_p_mqtt31){ - version = MQTT_PROTOCOL_V31; - headerlen = 12; - }else{ - return MOSQ_ERR_INVAL; - } - - packet = mosquitto__calloc(1, sizeof(struct mosquitto__packet)); - if(!packet) return MOSQ_ERR_NOMEM; - - if(clientid){ - payloadlen = 2+strlen(clientid); - }else{ - payloadlen = 2; - } - if(mosq->will){ - will = 1; - assert(mosq->will->msg.topic); - - payloadlen += 2+strlen(mosq->will->msg.topic) + 2+mosq->will->msg.payloadlen; - if(mosq->protocol == mosq_p_mqtt5){ - will_proplen = property__get_length_all(mosq->will->properties); - varbytes = packet__varint_bytes(will_proplen); - payloadlen += will_proplen + varbytes; - } - } - - /* After this check we can be sure that the username and password are - * always valid for the current protocol, so there is no need to check - * username before checking password. */ - if(mosq->protocol == mosq_p_mqtt31 || mosq->protocol == mosq_p_mqtt311){ - if(password != NULL && username == NULL){ - return MOSQ_ERR_INVAL; - } - } - - if(username){ - payloadlen += 2+strlen(username); - } - if(password){ - payloadlen += 2+strlen(password); - } - - packet->command = CMD_CONNECT; - packet->remaining_length = headerlen + payloadlen; - rc = packet__alloc(packet); - if(rc){ - mosquitto__free(packet); - return rc; - } - - /* Variable header */ - if(version == MQTT_PROTOCOL_V31){ - packet__write_string(packet, PROTOCOL_NAME_v31, strlen(PROTOCOL_NAME_v31)); - }else{ - packet__write_string(packet, PROTOCOL_NAME, strlen(PROTOCOL_NAME)); - } -#if defined(WITH_BROKER) && defined(WITH_BRIDGE) - if(mosq->bridge && mosq->bridge->try_private && mosq->bridge->try_private_accepted){ - version |= 0x80; - }else{ - } -#endif - packet__write_byte(packet, version); - byte = (clean_session&0x1)<<1; - if(will){ - byte = byte | ((mosq->will->msg.retain&0x1)<<5) | ((mosq->will->msg.qos&0x3)<<3) | ((will&0x1)<<2); - } - if(username){ - byte = byte | 0x1<<7; - } - if(mosq->password){ - byte = byte | 0x1<<6; - } - packet__write_byte(packet, byte); - packet__write_uint16(packet, keepalive); - - if(mosq->protocol == mosq_p_mqtt5){ - /* Write properties */ - packet__write_varint(packet, proplen); - property__write_all(packet, properties, false); - property__write_all(packet, local_props, false); - } - - /* Payload */ - if(clientid){ - packet__write_string(packet, clientid, strlen(clientid)); - }else{ - packet__write_uint16(packet, 0); - } - if(will){ - if(mosq->protocol == mosq_p_mqtt5){ - /* Write will properties */ - property__write_all(packet, mosq->will->properties, true); - } - packet__write_string(packet, mosq->will->msg.topic, strlen(mosq->will->msg.topic)); - packet__write_string(packet, (const char *)mosq->will->msg.payload, mosq->will->msg.payloadlen); - } - - if(username){ - packet__write_string(packet, username, strlen(username)); - } - if(password){ - packet__write_string(packet, password, strlen(password)); - } - - mosq->keepalive = keepalive; -#ifdef WITH_BROKER -# ifdef WITH_BRIDGE - log__printf(mosq, MOSQ_LOG_DEBUG, "Bridge %s sending CONNECT", clientid); -# endif -#else - log__printf(mosq, MOSQ_LOG_DEBUG, "Client %s sending CONNECT", clientid); -#endif - return packet__queue(mosq, packet); -} - |