mirror of
https://github.com/eclipse-mosquitto/mosquitto.git
synced 2026-08-18 01:48:32 +08:00
Initial contribution.
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
include_directories(${mosquitto_SOURCE_DIR}/lib ${mosquitto_SOURCE_DIR}/lib/cpp
|
||||
${STDBOOL_H_PATH} ${STDINT_H_PATH})
|
||||
link_directories(${mosquitto_BINARY_DIR}/lib)
|
||||
|
||||
add_library(mosquittopp SHARED
|
||||
mosquittopp.cpp mosquittopp.h)
|
||||
|
||||
target_link_libraries(mosquittopp mosquitto)
|
||||
set_target_properties(mosquittopp PROPERTIES
|
||||
VERSION ${VERSION}
|
||||
SOVERSION 1
|
||||
)
|
||||
install(TARGETS mosquittopp RUNTIME DESTINATION ${BINDIR} LIBRARY DESTINATION ${LIBDIR})
|
||||
install(FILES mosquittopp.h DESTINATION ${INCLUDEDIR})
|
||||
|
||||
if (UNIX)
|
||||
install(CODE "EXEC_PROGRAM(/sbin/ldconfig)")
|
||||
endif (UNIX)
|
||||
@@ -0,0 +1,31 @@
|
||||
include ../../config.mk
|
||||
|
||||
ifneq ($(UNAME),SunOS)
|
||||
LIB_LDFLAGS:=$(LDFLAGS) -Wl,-soname,libmosquittopp.so.${SOVERSION}
|
||||
endif
|
||||
|
||||
.PHONY : clean install
|
||||
|
||||
all : libmosquittopp.so.${SOVERSION}
|
||||
|
||||
install : all
|
||||
$(INSTALL) -d ${DESTDIR}$(prefix)/lib${LIB_SUFFIX}/
|
||||
$(INSTALL) -s libmosquittopp.so.${SOVERSION} ${DESTDIR}${prefix}/lib${LIB_SUFFIX}/libmosquittopp.so.${SOVERSION}
|
||||
ln -sf libmosquittopp.so.${SOVERSION} ${DESTDIR}${prefix}/lib${LIB_SUFFIX}/libmosquittopp.so
|
||||
$(INSTALL) -d ${DESTDIR}${prefix}/include/
|
||||
$(INSTALL) mosquittopp.h ${DESTDIR}${prefix}/include/mosquittopp.h
|
||||
|
||||
uninstall :
|
||||
-rm -f ${DESTDIR}${prefix}/lib${LIB_SUFFIX}/libmosquittopp.so.${SOVERSION}
|
||||
-rm -f ${DESTDIR}${prefix}/lib${LIB_SUFFIX}/libmosquittopp.so
|
||||
-rm -f ${DESTDIR}${prefix}/include/mosquittopp.h
|
||||
|
||||
clean :
|
||||
-rm -f *.o libmosquittopp.so.${SOVERSION}
|
||||
|
||||
libmosquittopp.so.${SOVERSION} : mosquittopp.o
|
||||
$(CXX) -shared $(LIB_LDFLAGS) $< -o $@ ../libmosquitto.so.${SOVERSION}
|
||||
|
||||
mosquittopp.o : mosquittopp.cpp mosquittopp.h
|
||||
$(CXX) $(LIB_CXXFLAGS) -c $< -o $@
|
||||
|
||||
@@ -0,0 +1,292 @@
|
||||
/*
|
||||
Copyright (c) 2010-2014 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 <cstdlib>
|
||||
#include <mosquitto.h>
|
||||
#include <mosquittopp.h>
|
||||
|
||||
namespace mosqpp {
|
||||
|
||||
static void on_connect_wrapper(struct mosquitto *mosq, void *userdata, int rc)
|
||||
{
|
||||
class mosquittopp *m = (class mosquittopp *)userdata;
|
||||
m->on_connect(rc);
|
||||
}
|
||||
|
||||
static void on_disconnect_wrapper(struct mosquitto *mosq, void *userdata, int rc)
|
||||
{
|
||||
class mosquittopp *m = (class mosquittopp *)userdata;
|
||||
m->on_disconnect(rc);
|
||||
}
|
||||
|
||||
static void on_publish_wrapper(struct mosquitto *mosq, void *userdata, int mid)
|
||||
{
|
||||
class mosquittopp *m = (class mosquittopp *)userdata;
|
||||
m->on_publish(mid);
|
||||
}
|
||||
|
||||
static void on_message_wrapper(struct mosquitto *mosq, void *userdata, const struct mosquitto_message *message)
|
||||
{
|
||||
class mosquittopp *m = (class mosquittopp *)userdata;
|
||||
m->on_message(message);
|
||||
}
|
||||
|
||||
static void on_subscribe_wrapper(struct mosquitto *mosq, void *userdata, int mid, int qos_count, const int *granted_qos)
|
||||
{
|
||||
class mosquittopp *m = (class mosquittopp *)userdata;
|
||||
m->on_subscribe(mid, qos_count, granted_qos);
|
||||
}
|
||||
|
||||
static void on_unsubscribe_wrapper(struct mosquitto *mosq, void *userdata, int mid)
|
||||
{
|
||||
class mosquittopp *m = (class mosquittopp *)userdata;
|
||||
m->on_unsubscribe(mid);
|
||||
}
|
||||
|
||||
|
||||
static void on_log_wrapper(struct mosquitto *mosq, void *userdata, int level, const char *str)
|
||||
{
|
||||
class mosquittopp *m = (class mosquittopp *)userdata;
|
||||
m->on_log(level, str);
|
||||
}
|
||||
|
||||
int lib_version(int *major, int *minor, int *revision)
|
||||
{
|
||||
if(major) *major = LIBMOSQUITTO_MAJOR;
|
||||
if(minor) *minor = LIBMOSQUITTO_MINOR;
|
||||
if(revision) *revision = LIBMOSQUITTO_REVISION;
|
||||
return LIBMOSQUITTO_VERSION_NUMBER;
|
||||
}
|
||||
|
||||
int lib_init()
|
||||
{
|
||||
return mosquitto_lib_init();
|
||||
}
|
||||
|
||||
int lib_cleanup()
|
||||
{
|
||||
return mosquitto_lib_cleanup();
|
||||
}
|
||||
|
||||
const char* strerror(int mosq_errno)
|
||||
{
|
||||
return mosquitto_strerror(mosq_errno);
|
||||
}
|
||||
|
||||
const char* connack_string(int connack_code)
|
||||
{
|
||||
return mosquitto_connack_string(connack_code);
|
||||
}
|
||||
|
||||
int sub_topic_tokenise(const char *subtopic, char ***topics, int *count)
|
||||
{
|
||||
return mosquitto_sub_topic_tokenise(subtopic, topics, count);
|
||||
}
|
||||
|
||||
int sub_topic_tokens_free(char ***topics, int count)
|
||||
{
|
||||
return mosquitto_sub_topic_tokens_free(topics, count);
|
||||
}
|
||||
|
||||
int topic_matches_sub(const char *sub, const char *topic, bool *result)
|
||||
{
|
||||
return mosquitto_topic_matches_sub(sub, topic, result);
|
||||
}
|
||||
|
||||
mosquittopp::mosquittopp(const char *id, bool clean_session)
|
||||
{
|
||||
m_mosq = mosquitto_new(id, clean_session, this);
|
||||
mosquitto_connect_callback_set(m_mosq, on_connect_wrapper);
|
||||
mosquitto_disconnect_callback_set(m_mosq, on_disconnect_wrapper);
|
||||
mosquitto_publish_callback_set(m_mosq, on_publish_wrapper);
|
||||
mosquitto_message_callback_set(m_mosq, on_message_wrapper);
|
||||
mosquitto_subscribe_callback_set(m_mosq, on_subscribe_wrapper);
|
||||
mosquitto_unsubscribe_callback_set(m_mosq, on_unsubscribe_wrapper);
|
||||
mosquitto_log_callback_set(m_mosq, on_log_wrapper);
|
||||
}
|
||||
|
||||
mosquittopp::~mosquittopp()
|
||||
{
|
||||
mosquitto_destroy(m_mosq);
|
||||
}
|
||||
|
||||
int mosquittopp::reinitialise(const char *id, bool clean_session)
|
||||
{
|
||||
int rc;
|
||||
rc = mosquitto_reinitialise(m_mosq, id, clean_session, this);
|
||||
if(rc == MOSQ_ERR_SUCCESS){
|
||||
mosquitto_connect_callback_set(m_mosq, on_connect_wrapper);
|
||||
mosquitto_disconnect_callback_set(m_mosq, on_disconnect_wrapper);
|
||||
mosquitto_publish_callback_set(m_mosq, on_publish_wrapper);
|
||||
mosquitto_message_callback_set(m_mosq, on_message_wrapper);
|
||||
mosquitto_subscribe_callback_set(m_mosq, on_subscribe_wrapper);
|
||||
mosquitto_unsubscribe_callback_set(m_mosq, on_unsubscribe_wrapper);
|
||||
mosquitto_log_callback_set(m_mosq, on_log_wrapper);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
int mosquittopp::connect(const char *host, int port, int keepalive)
|
||||
{
|
||||
return mosquitto_connect(m_mosq, host, port, keepalive);
|
||||
}
|
||||
|
||||
int mosquittopp::connect(const char *host, int port, int keepalive, const char *bind_address)
|
||||
{
|
||||
return mosquitto_connect_bind(m_mosq, host, port, keepalive, bind_address);
|
||||
}
|
||||
|
||||
int mosquittopp::connect_async(const char *host, int port, int keepalive)
|
||||
{
|
||||
return mosquitto_connect_async(m_mosq, host, port, keepalive);
|
||||
}
|
||||
|
||||
int mosquittopp::connect_async(const char *host, int port, int keepalive, const char *bind_address)
|
||||
{
|
||||
return mosquitto_connect_bind_async(m_mosq, host, port, keepalive, bind_address);
|
||||
}
|
||||
|
||||
int mosquittopp::reconnect()
|
||||
{
|
||||
return mosquitto_reconnect(m_mosq);
|
||||
}
|
||||
|
||||
int mosquittopp::reconnect_async()
|
||||
{
|
||||
return mosquitto_reconnect_async(m_mosq);
|
||||
}
|
||||
|
||||
int mosquittopp::disconnect()
|
||||
{
|
||||
return mosquitto_disconnect(m_mosq);
|
||||
}
|
||||
|
||||
int mosquittopp::socket()
|
||||
{
|
||||
return mosquitto_socket(m_mosq);
|
||||
}
|
||||
|
||||
int mosquittopp::will_set(const char *topic, int payloadlen, const void *payload, int qos, bool retain)
|
||||
{
|
||||
return mosquitto_will_set(m_mosq, topic, payloadlen, payload, qos, retain);
|
||||
}
|
||||
|
||||
int mosquittopp::will_clear()
|
||||
{
|
||||
return mosquitto_will_clear(m_mosq);
|
||||
}
|
||||
|
||||
int mosquittopp::username_pw_set(const char *username, const char *password)
|
||||
{
|
||||
return mosquitto_username_pw_set(m_mosq, username, password);
|
||||
}
|
||||
|
||||
int mosquittopp::publish(int *mid, const char *topic, int payloadlen, const void *payload, int qos, bool retain)
|
||||
{
|
||||
return mosquitto_publish(m_mosq, mid, topic, payloadlen, payload, qos, retain);
|
||||
}
|
||||
|
||||
void mosquittopp::reconnect_delay_set(unsigned int reconnect_delay, unsigned int reconnect_delay_max, bool reconnect_exponential_backoff)
|
||||
{
|
||||
mosquitto_reconnect_delay_set(m_mosq, reconnect_delay, reconnect_delay_max, reconnect_exponential_backoff);
|
||||
}
|
||||
|
||||
int mosquittopp::max_inflight_messages_set(unsigned int max_inflight_messages)
|
||||
{
|
||||
return mosquitto_max_inflight_messages_set(m_mosq, max_inflight_messages);
|
||||
}
|
||||
|
||||
void mosquittopp::message_retry_set(unsigned int message_retry)
|
||||
{
|
||||
mosquitto_message_retry_set(m_mosq, message_retry);
|
||||
}
|
||||
|
||||
int mosquittopp::subscribe(int *mid, const char *sub, int qos)
|
||||
{
|
||||
return mosquitto_subscribe(m_mosq, mid, sub, qos);
|
||||
}
|
||||
|
||||
int mosquittopp::unsubscribe(int *mid, const char *sub)
|
||||
{
|
||||
return mosquitto_unsubscribe(m_mosq, mid, sub);
|
||||
}
|
||||
|
||||
int mosquittopp::loop(int timeout, int max_packets)
|
||||
{
|
||||
return mosquitto_loop(m_mosq, timeout, max_packets);
|
||||
}
|
||||
|
||||
int mosquittopp::loop_misc()
|
||||
{
|
||||
return mosquitto_loop_misc(m_mosq);
|
||||
}
|
||||
|
||||
int mosquittopp::loop_read(int max_packets)
|
||||
{
|
||||
return mosquitto_loop_read(m_mosq, max_packets);
|
||||
}
|
||||
|
||||
int mosquittopp::loop_write(int max_packets)
|
||||
{
|
||||
return mosquitto_loop_write(m_mosq, max_packets);
|
||||
}
|
||||
|
||||
int mosquittopp::loop_forever(int timeout, int max_packets)
|
||||
{
|
||||
return mosquitto_loop_forever(m_mosq, timeout, max_packets);
|
||||
}
|
||||
|
||||
int mosquittopp::loop_start()
|
||||
{
|
||||
return mosquitto_loop_start(m_mosq);
|
||||
}
|
||||
|
||||
int mosquittopp::loop_stop(bool force)
|
||||
{
|
||||
return mosquitto_loop_stop(m_mosq, force);
|
||||
}
|
||||
|
||||
bool mosquittopp::want_write()
|
||||
{
|
||||
return mosquitto_want_write(m_mosq);
|
||||
}
|
||||
|
||||
void mosquittopp::user_data_set(void *userdata)
|
||||
{
|
||||
mosquitto_user_data_set(m_mosq, userdata);
|
||||
}
|
||||
|
||||
int mosquittopp::tls_set(const char *cafile, const char *capath, const char *certfile, const char *keyfile, int (*pw_callback)(char *buf, int size, int rwflag, void *userdata))
|
||||
{
|
||||
return mosquitto_tls_set(m_mosq, cafile, capath, certfile, keyfile, pw_callback);
|
||||
}
|
||||
|
||||
int mosquittopp::tls_opts_set(int cert_reqs, const char *tls_version, const char *ciphers)
|
||||
{
|
||||
return mosquitto_tls_opts_set(m_mosq, cert_reqs, tls_version, ciphers);
|
||||
}
|
||||
|
||||
int mosquittopp::tls_insecure_set(bool value)
|
||||
{
|
||||
return mosquitto_tls_insecure_set(m_mosq, value);
|
||||
}
|
||||
|
||||
int mosquittopp::tls_psk_set(const char *psk, const char *identity, const char *ciphers)
|
||||
{
|
||||
return mosquitto_tls_psk_set(m_mosq, psk, identity, ciphers);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
/*
|
||||
Copyright (c) 2010-2013 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.
|
||||
*/
|
||||
|
||||
#ifndef _MOSQUITTOPP_H_
|
||||
#define _MOSQUITTOPP_H_
|
||||
|
||||
#ifdef _WIN32
|
||||
# ifdef mosquittopp_EXPORTS
|
||||
# define mosqpp_EXPORT __declspec(dllexport)
|
||||
# else
|
||||
# define mosqpp_EXPORT __declspec(dllimport)
|
||||
# endif
|
||||
#else
|
||||
# define mosqpp_EXPORT
|
||||
#endif
|
||||
|
||||
#include <cstdlib>
|
||||
#include <time.h>
|
||||
#include <mosquitto.h>
|
||||
|
||||
namespace mosqpp {
|
||||
|
||||
mosqpp_EXPORT const char *strerror(int mosq_errno);
|
||||
mosqpp_EXPORT const char *connack_string(int connack_code);
|
||||
mosqpp_EXPORT int sub_topic_tokenise(const char *subtopic, char ***topics, int *count);
|
||||
mosqpp_EXPORT int sub_topic_tokens_free(char ***topics, int count);
|
||||
mosqpp_EXPORT int lib_version(int *major, int *minor, int *revision);
|
||||
mosqpp_EXPORT int lib_init();
|
||||
mosqpp_EXPORT int lib_cleanup();
|
||||
mosqpp_EXPORT int topic_matches_sub(const char *sub, const char *topic, bool *result);
|
||||
|
||||
/*
|
||||
* Class: mosquittopp
|
||||
*
|
||||
* A mosquitto client class. This is a C++ wrapper class for the mosquitto C
|
||||
* library. Please see mosquitto.h for details of the functions.
|
||||
*/
|
||||
class mosqpp_EXPORT mosquittopp {
|
||||
private:
|
||||
struct mosquitto *m_mosq;
|
||||
public:
|
||||
mosquittopp(const char *id=NULL, bool clean_session=true);
|
||||
~mosquittopp();
|
||||
|
||||
int reinitialise(const char *id, bool clean_session);
|
||||
int socket();
|
||||
int will_set(const char *topic, int payloadlen=0, const void *payload=NULL, int qos=0, bool retain=false);
|
||||
int will_clear();
|
||||
int username_pw_set(const char *username, const char *password=NULL);
|
||||
int connect(const char *host, int port=1883, int keepalive=60);
|
||||
int connect_async(const char *host, int port=1883, int keepalive=60);
|
||||
int connect(const char *host, int port, int keepalive, const char *bind_address);
|
||||
int connect_async(const char *host, int port, int keepalive, const char *bind_address);
|
||||
int reconnect();
|
||||
int reconnect_async();
|
||||
int disconnect();
|
||||
int publish(int *mid, const char *topic, int payloadlen=0, const void *payload=NULL, int qos=0, bool retain=false);
|
||||
int subscribe(int *mid, const char *sub, int qos=0);
|
||||
int unsubscribe(int *mid, const char *sub);
|
||||
void reconnect_delay_set(unsigned int reconnect_delay, unsigned int reconnect_delay_max, bool reconnect_exponential_backoff);
|
||||
int max_inflight_messages_set(unsigned int max_inflight_messages);
|
||||
void message_retry_set(unsigned int message_retry);
|
||||
void user_data_set(void *userdata);
|
||||
int tls_set(const char *cafile, const char *capath=NULL, const char *certfile=NULL, const char *keyfile=NULL, int (*pw_callback)(char *buf, int size, int rwflag, void *userdata)=NULL);
|
||||
int tls_opts_set(int cert_reqs, const char *tls_version=NULL, const char *ciphers=NULL);
|
||||
int tls_insecure_set(bool value);
|
||||
int tls_psk_set(const char *psk, const char *identity, const char *ciphers=NULL);
|
||||
|
||||
int loop(int timeout=-1, int max_packets=1);
|
||||
int loop_misc();
|
||||
int loop_read(int max_packets=1);
|
||||
int loop_write(int max_packets=1);
|
||||
int loop_forever(int timeout=-1, int max_packets=1);
|
||||
int loop_start();
|
||||
int loop_stop(bool force=false);
|
||||
bool want_write();
|
||||
|
||||
virtual void on_connect(int rc) {return;};
|
||||
virtual void on_disconnect(int rc) {return;};
|
||||
virtual void on_publish(int mid) {return;};
|
||||
virtual void on_message(const struct mosquitto_message *message) {return;};
|
||||
virtual void on_subscribe(int mid, int qos_count, const int *granted_qos) {return;};
|
||||
virtual void on_unsubscribe(int mid) {return;};
|
||||
virtual void on_log(int level, const char *str) {return;};
|
||||
virtual void on_error() {return;};
|
||||
};
|
||||
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user