void MQTTConnector::sendIdentityMessage() {
	IBMRAS_DEBUG_1(debug, "sending identity message: %s", agentIdMessage.c_str());
	char topic[] = CLIENT_IDENTITY_TOPIC;
	char* idMessage = new char[agentIdMessage.length() + 1];
	strcpy(idMessage, agentIdMessage.c_str());
	MQTTAsync_send(mqttClient, topic, strlen(idMessage), idMessage, 1, 0, NULL);
	delete[] idMessage;
}
Example #2
0
void test1_onSubscribe(void* context, MQTTAsync_successData* response)
{
	MQTTAsync c = (MQTTAsync)context;
	MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
	int rc;
	
	MyLog(LOGA_DEBUG, "In subscribe onSuccess callback %p granted qos %d", c, response->alt.qos);

	pubmsg.payload = "a much longer message that we can shorten to the extent that we need to payload up to 11";
	pubmsg.payloadlen = 11;
	pubmsg.qos = 2;
	pubmsg.retained = 0;

	rc = MQTTAsync_send(c, test_topic, pubmsg.payloadlen, pubmsg.payload, pubmsg.qos, pubmsg.retained, NULL);
}
Example #3
0
void test3_onSubscribe(void* context, MQTTAsync_successData* response)
{
	client_data* cd = (client_data*)context;
	MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
	int rc;
	
	MyLog(LOGA_DEBUG, "In subscribe onSuccess callback \"%s\"", cd->clientid);

	pubmsg.payload = "a much longer message that we can shorten to the extent that we need to payload up to 11";
	pubmsg.payloadlen = 11;
	pubmsg.qos = 2;
	pubmsg.retained = 0;

	rc = MQTTAsync_send(cd->c, cd->test_topic, pubmsg.payloadlen, pubmsg.payload, pubmsg.qos, pubmsg.retained, NULL);
	assert("Good rc from publish", rc == MQTTASYNC_SUCCESS, "rc was %d", rc);
}
int MQTTConnector::stop() {
	IBMRAS_DEBUG(debug, "stop");

	if (mqttClient != NULL) {
		if (MQTTAsync_isConnected(mqttClient)) {
			// Send will message before our clean termination
			char* message = new char[willMessage.length() + 1];
			strcpy(message, willMessage.c_str());
			MQTTAsync_send(mqttClient, willTopic.c_str(), strlen(message),
					message, 1, 0, NULL);
			delete[] message;

			return MQTTAsync_disconnect(mqttClient, NULL);
		}
	}
	return -1;
}
Example #5
0
void test4_onSubscribe(void* context, MQTTAsync_successData* response)
{
	MQTTAsync c = (MQTTAsync)context;
	MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
	int rc, i;
	
	MyLog(LOGA_DEBUG, "In subscribe onSuccess callback %p", c);

	pubmsg.payload = test4_payload = malloc(options.size);
	pubmsg.payloadlen = test4_payloadlen = options.size;

	srand(33);
	for (i = 0; i < options.size; ++i)
		((char*)pubmsg.payload)[i] = rand() % 256;
	
	pubmsg.qos = 2;
	pubmsg.retained = 0;

	rc = MQTTAsync_send(c, test_topic, pubmsg.payloadlen, pubmsg.payload, pubmsg.qos, pubmsg.retained, NULL);
}
int MQTTConnector::sendMessage(const std::string &sourceId, uint32 size,
		void *data) {

	if (!enabled) {
		return 0;
	}

	if (mqttClient == NULL) {
		return -1;
	}

	if (!MQTTAsync_isConnected(mqttClient)) {
		if (sourceId == "heartbeat") {
			connect();
			return 0;
		} else {
			return -1;
		}
	}

	IBMRAS_DEBUG_3(fine, "Sending message : topic %s : data %p : length %d", sourceId.c_str(), data, size);

	/* topic = <clientId>/sourceId */
	char *topic = new char[rootTopic.length() + 1 + sourceId.length() + 1];
#if defined(_ZOS)
#pragma convert("ISO8859-1")
#endif
	sprintf(topic, "%s/%s", rootTopic.c_str(), sourceId.c_str());
#if defined(_ZOS)
#pragma convert(pop)
#endif

	//	MQTTAsync_deliveryToken token;
	MQTTAsync_send(mqttClient, topic, size, data, 1, 0, NULL);

	delete[] topic;

	return size;
}
int main(int argc, char** argv)
{
	MQTTAsync_disconnectOptions disc_opts = MQTTAsync_disconnectOptions_initializer;
	MQTTAsync_responseOptions pub_opts = MQTTAsync_responseOptions_initializer;
	MQTTAsync_createOptions create_opts = MQTTAsync_createOptions_initializer;
	MQTTAsync client;
	char* topic = NULL;
	char* buffer = NULL;
	int rc = 0;
	char url[100];

	if (argc < 2)
		usage();

	getopts(argc, argv);

	sprintf(url, "%s:%s", opts.host, opts.port);
	if (opts.verbose)
		printf("URL is %s\n", url);

	topic = argv[1];
	printf("Using topic %s\n", topic);

	create_opts.sendWhileDisconnected = 1;
	rc = MQTTAsync_createWithOptions(&client, url, opts.clientid, MQTTCLIENT_PERSISTENCE_NONE, NULL, &create_opts);

	signal(SIGINT, cfinish);
	signal(SIGTERM, cfinish);

	rc = MQTTAsync_setCallbacks(client, client, connectionLost, messageArrived, NULL);

	myconnect(&client);

	buffer = malloc(opts.maxdatalen);

	while (!toStop)
	{
		int data_len = 0;
		int delim_len = 0;

		delim_len = (int)strlen(opts.delimiter);
		do
		{
			buffer[data_len++] = getchar();
			if (data_len > delim_len)
			{
			/* printf("comparing %s %s\n", opts.delimiter, &buffer[data_len - delim_len]); */
			if (strncmp(opts.delimiter, &buffer[data_len - delim_len], delim_len) == 0)
				break;
			}
		} while (data_len < opts.maxdatalen);

		if (opts.verbose)
				printf("Publishing data of length %d\n", data_len);
		pub_opts.onSuccess = onPublish;
		pub_opts.onFailure = onPublishFailure;
		do
		{
			rc = MQTTAsync_send(client, topic, data_len, buffer, opts.qos, opts.retained, &pub_opts);
		}
		while (rc != MQTTASYNC_SUCCESS);
	}

	printf("Stopping\n");

	free(buffer);

	disc_opts.onSuccess = onDisconnect;
	if ((rc = MQTTAsync_disconnect(client, &disc_opts)) != MQTTASYNC_SUCCESS)
	{
		printf("Failed to start disconnect, return code %d\n", rc);
		exit(EXIT_FAILURE);
	}

	while	(!disconnected)
		#if defined(WIN32)
			Sleep(100);
		#else
			usleep(10000L);
		#endif

	MQTTAsync_destroy(&client);

	return EXIT_SUCCESS;
}