Ejemplo n.º 1
0
int MQTTSPacket_send_connect(Clients* client)
{
	PacketBuffer buf;
	int rc;

	FUNC_ENTRY;
	buf = MQTTSPacketSerialize_connect(client->cleansession, (client->will != NULL), 1, client->keepAliveInterval, client->clientID);
	
	char *colon ;
	if ( client->wirelessNodeId != NULL )
	{
		buf = MQTTSPacketSerialize_forwarder_encapsulation(client , buf) ;
		// Temporary shorten client->addr until the colon before wireless node ID
		colon = strrchr(client->addr, ':');
		*(colon) = '\0';
	}
	rc = MQTTSPacket_sendPacketBuffer( client->socket, client->addr, buf);
	if ( client->wirelessNodeId != NULL )
		*(colon) = ':';

	free(buf.data);

	Log(LOG_PROTOCOL, 38, NULL, client->socket, client->addr, client->clientID, client->cleansession, rc);
	FUNC_EXIT_RC(rc);
	return rc;
}
Ejemplo n.º 2
0
int MQTTSPacket_send_connack(Clients* client, int returnCode)
{
	PacketBuffer buf;
	int rc = 0;

	FUNC_ENTRY;
	buf = MQTTSSerialize_connack(returnCode);

	char *colon ;
	if ( client->wirelessNodeId != NULL )
	{
		buf = MQTTSPacketSerialize_forwarder_encapsulation(client , buf) ;
		// Temporary shorten client->addr until the colon before wireless node ID
		colon = strrchr(client->addr, ':');
		*(colon) = '\0';
	}
	rc = MQTTSPacket_sendPacketBuffer( client->socket, client->addr, buf);
	if ( client->wirelessNodeId != NULL )
		*(colon) = ':';

	free(buf.data);
	Log(LOG_PROTOCOL, 40, NULL, socket, client->addr, client->clientID, returnCode, rc);	
	FUNC_EXIT;
	return rc;
}
Ejemplo n.º 3
0
int MQTTSPacket_send(const Clients *client, MQTTSHeader header, char* buffer, int buflen)
{
	int rc = 0;
	char *data = NULL;
	uint8_t *ptr = NULL;
	PacketBuffer buf;

	FUNC_ENTRY;
	if (header.len > 256)
	{
		header.len += 2;
		buflen += 2;
		data = malloc(header.len);
		ptr = data;
		*ptr++ = 0x01;
		writeInt(&ptr, header.len);
	}
	else
	{
		data = malloc(header.len);
		ptr = data;
		*ptr++ = (uint8_t)header.len;
	}
	*ptr++ = header.type;

	memcpy(ptr, buffer, buflen);

	buf.data = data;
	buf.len = buflen + 2;
	char *colon ;
	if ( client->wirelessNodeId != NULL )
	{
		buf = MQTTSPacketSerialize_forwarder_encapsulation(client , buf) ;
		// Temporary shorten client->addr until the colon before wireless node ID
		colon = strrchr(client->addr, ':');
		*(colon) = '\0';
	}
	rc = MQTTSPacket_sendPacketBuffer( client->socket, client->addr, buf);
	if ( client->wirelessNodeId != NULL )
		*(colon) = ':';

	if (rc == SOCKET_ERROR)
	{
		Socket_error("sendto", client->socket);
/*		if (err == EWOULDBLOCK || err == EAGAIN)
			rc = TCPSOCKET_INTERRUPTED;
*/
	}
	else
		rc = 0;

	free(buf.data);
	FUNC_EXIT_RC(rc);
	return rc;
}
int MQTTSPacket_send_ack_with_msgId(Clients* client, char type, int msgId)
{
	PacketBuffer buf;
	int rc = 0;

	FUNC_ENTRY;
	buf = MQTTSPacketSerialize_ack(type, msgId);
	rc = MQTTSPacket_sendPacketBuffer(client->socket, client->addr, buf);
	free(buf.data);
	FUNC_EXIT_RC(rc);
	return rc;
}
int MQTTSPacket_send_connack(Clients* client, int returnCode)
{
	PacketBuffer buf;
	int rc = 0;

	FUNC_ENTRY;
	buf = MQTTSSerialize_connack(returnCode);
	rc = MQTTSPacket_sendPacketBuffer(client->socket, client->addr, buf);
	free(buf.data);
	Log(LOG_PROTOCOL, 40, NULL, socket, client->addr, client->clientID, returnCode, rc);	
	FUNC_EXIT;
	return rc;
}
Ejemplo n.º 6
0
int MQTTSPacket_send_advertise(int sock, char* address, unsigned char gateway_id, short duration)
{
	PacketBuffer buf;
	int rc = 0;

	FUNC_ENTRY;
	buf = MQTTSPacketSerialize_advertise(gateway_id, duration);
	
	rc = MQTTSPacket_sendPacketBuffer(sock, address, buf);
	free(buf.data);

	Log(LOG_PROTOCOL, 30, NULL, sock, "", address, gateway_id, duration, rc);
	FUNC_EXIT_RC(rc);
	return rc;
}
int MQTTSPacket_send_connect(Clients* client)
{
	PacketBuffer buf;
	int rc;

	FUNC_ENTRY;
	buf = MQTTSPacketSerialize_connect(client->cleansession, (client->will != NULL), 1, client->keepAliveInterval, client->clientID);
	
	rc = MQTTSPacket_sendPacketBuffer(client->socket, client->addr, buf);
	free(buf.data);

	Log(LOG_PROTOCOL, 38, NULL, client->socket, client->addr, client->clientID, client->cleansession, rc);
	FUNC_EXIT_RC(rc);
	return rc;
}
int MQTTSPacket_send(int socket, char* addr, MQTTSHeader header, char* buffer, int buflen)
{
	int rc = 0;
	char *data = NULL;
	char *ptr = NULL;
	PacketBuffer buf;

	FUNC_ENTRY;
	if (header.len > 256)
	{
		header.len += 2;
		buflen += 2;
		data = malloc(header.len);
		ptr = data;
		*ptr++ = 0x01;
		writeInt(&ptr, header.len);
	}
	else
	{
		data = malloc(header.len);
		ptr = data;
		*ptr++ = header.len;
	}
	*ptr++ = header.type;

	memcpy(ptr, buffer, buflen);

	buf.data = data;
	buf.len = buflen + 2;
	rc = MQTTSPacket_sendPacketBuffer(socket, addr, buf);

	if (rc == SOCKET_ERROR)
	{
		Socket_error("sendto", socket);
/*		if (err == EWOULDBLOCK || err == EAGAIN)
			rc = TCPSOCKET_INTERRUPTED;
*/
	}
	else
		rc = 0;

	free(data);

	FUNC_EXIT_RC(rc);
	return rc;
}
Ejemplo n.º 9
0
int MQTTSPacket_send_ack_with_msgId(Clients* client, char type, int msgId)
{
	PacketBuffer buf;
	int rc = 0;

	FUNC_ENTRY;
	buf = MQTTSPacketSerialize_ack(type, msgId);

	char *colon ;
	if ( client->wirelessNodeId != NULL )
	{
		buf = MQTTSPacketSerialize_forwarder_encapsulation(client , buf) ;
		// Temporary shorten client->addr until the colon before wireless node ID
		colon = strrchr(client->addr, ':');
		*(colon) = '\0';
	}
	rc = MQTTSPacket_sendPacketBuffer( client->socket, client->addr, buf);
	if ( client->wirelessNodeId != NULL )
		*(colon) = ':';

	free(buf.data);
	FUNC_EXIT_RC(rc);
	return rc;
}