Skip to content

Commit

Permalink
Deprecation warnings for C++ wrapper.
Browse files Browse the repository at this point in the history
  • Loading branch information
ralight committed Apr 17, 2019
1 parent 6438ce8 commit f42a72b
Showing 1 changed file with 57 additions and 48 deletions.
105 changes: 57 additions & 48 deletions lib/cpp/mosquittopp.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,22 +27,31 @@ and the Eclipse Distribution License is available at
# define mosqpp_EXPORT
#endif

#if defined(__GNUC__) || defined(__clang__)
# define DEPRECATED __attribute__ ((deprecated))
#elif defined(_MSC_VER)
# define DEPRECATED __declspec(deprecated)
#else
# define DEPRECATED
#endif

#include <cstdlib>
#include <mosquitto.h>
#include <time.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);
mosqpp_EXPORT int validate_utf8(const char *str, int len);
mosqpp_EXPORT int subscribe_simple(

mosqpp_EXPORT const char * DEPRECATED strerror(int mosq_errno);
mosqpp_EXPORT const char * DEPRECATED connack_string(int connack_code);
mosqpp_EXPORT int DEPRECATED sub_topic_tokenise(const char *subtopic, char ***topics, int *count);
mosqpp_EXPORT int DEPRECATED sub_topic_tokens_free(char ***topics, int count);
mosqpp_EXPORT int DEPRECATED lib_version(int *major, int *minor, int *revision);
mosqpp_EXPORT int DEPRECATED lib_init();
mosqpp_EXPORT int DEPRECATED lib_cleanup();
mosqpp_EXPORT int DEPRECATED topic_matches_sub(const char *sub, const char *topic, bool *result);
mosqpp_EXPORT int DEPRECATED validate_utf8(const char *str, int len);
mosqpp_EXPORT int DEPRECATED subscribe_simple(
struct mosquitto_message **messages,
int msg_count,
bool retained,
Expand All @@ -58,7 +67,7 @@ mosqpp_EXPORT int subscribe_simple(
const struct libmosquitto_will *will=NULL,
const struct libmosquitto_tls *tls=NULL);

mosqpp_EXPORT int subscribe_callback(
mosqpp_EXPORT int DEPRECATED subscribe_callback(
int (*callback)(struct mosquitto *, void *, const struct mosquitto_message *),
void *userdata,
const char *topic,
Expand All @@ -80,48 +89,48 @@ mosqpp_EXPORT int subscribe_callback(
* 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 {
class mosqpp_EXPORT DEPRECATED mosquittopp {
private:
struct mosquitto *m_mosq;
public:
mosquittopp(const char *id=NULL, bool clean_session=true);
DEPRECATED mosquittopp(const char *id=NULL, bool clean_session=true);
virtual ~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 opts_set(enum mosq_opt_t option, void *value);

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();
int threaded_set(bool threaded=true);
int socks5_set(const char *host, int port=1080, const char *username=NULL, const char *password=NULL);
int DEPRECATED reinitialise(const char *id, bool clean_session);
int DEPRECATED socket();
int DEPRECATED will_set(const char *topic, int payloadlen=0, const void *payload=NULL, int qos=0, bool retain=false);
int DEPRECATED will_clear();
int DEPRECATED username_pw_set(const char *username, const char *password=NULL);
int DEPRECATED connect(const char *host, int port=1883, int keepalive=60);
int DEPRECATED connect_async(const char *host, int port=1883, int keepalive=60);
int DEPRECATED connect(const char *host, int port, int keepalive, const char *bind_address);
int DEPRECATED connect_async(const char *host, int port, int keepalive, const char *bind_address);
int DEPRECATED reconnect();
int DEPRECATED reconnect_async();
int DEPRECATED disconnect();
int DEPRECATED publish(int *mid, const char *topic, int payloadlen=0, const void *payload=NULL, int qos=0, bool retain=false);
int DEPRECATED subscribe(int *mid, const char *sub, int qos=0);
int DEPRECATED unsubscribe(int *mid, const char *sub);
void DEPRECATED reconnect_delay_set(unsigned int reconnect_delay, unsigned int reconnect_delay_max, bool reconnect_exponential_backoff);
int DEPRECATED max_inflight_messages_set(unsigned int max_inflight_messages);
void DEPRECATED message_retry_set(unsigned int message_retry);
void DEPRECATED user_data_set(void *userdata);
int DEPRECATED 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 DEPRECATED tls_opts_set(int cert_reqs, const char *tls_version=NULL, const char *ciphers=NULL);
int DEPRECATED tls_insecure_set(bool value);
int DEPRECATED tls_psk_set(const char *psk, const char *identity, const char *ciphers=NULL);
int DEPRECATED opts_set(enum mosq_opt_t option, void *value);

int DEPRECATED loop(int timeout=-1, int max_packets=1);
int DEPRECATED loop_misc();
int DEPRECATED loop_read(int max_packets=1);
int DEPRECATED loop_write(int max_packets=1);
int DEPRECATED loop_forever(int timeout=-1, int max_packets=1);
int DEPRECATED loop_start();
int DEPRECATED loop_stop(bool force=false);
bool DEPRECATED want_write();
int DEPRECATED threaded_set(bool threaded=true);
int DEPRECATED socks5_set(const char *host, int port=1080, const char *username=NULL, const char *password=NULL);

// names in the functions commented to prevent unused parameter warning
virtual void on_connect(int /*rc*/) {return;}
Expand Down

4 comments on commit f42a72b

@sogartar
Copy link

@sogartar sogartar commented on f42a72b Apr 29, 2019

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ralight Why is the C++ interface being deprecated? Is the C interface the preferred alternative?

@ralight
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The C++ wrapper is an extremely thin wrapper around the C library that came about by an external request. At the time there were no other MQTT C++ libraries around. The Paho C++ library offers a better C++ experience that uses modern C++ features. I don't feel that the Mosquitto C++ wrapper is a sufficiently compelling offering over the C library by comparison.

@UEckhardt
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Paho C++ library has currently the disadvantage that it is not included in the standard debian distribution and the library has other prerequisites.

I love your thin wrapper, because it is thin and very useful for easy projects. So it would be nice if this interface still will be supported.

@schnedann
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, I currently use the C++ Wrapper, but indeed, the first thing I did was to write a wrapper around the wrapper with a more C++ like API, e.g std::string references to replace Pointers to char... which is a bit baroque for my taste...

Please sign in to comment.