bool MosquittoHandler::init(std::string id) { int minor, major, revision; mosquitto_lib_version(&major, &minor, &revision); if(numOfInstances == 0) { mosquitto_lib_init(); } m_libInit = true; numOfInstances++; void* obj = (void*) this; m_mosquittoStruct = mosquitto_new(id.c_str(), obj); if(!m_mosquittoStruct) { m_lastErrorString = "Cannot create new Mosquitto instance"; return false; } mosquitto_log_init(m_mosquittoStruct, MOSQ_LOG_ERR || MOSQ_LOG_WARNING, MOSQ_LOG_STDOUT); mosquitto_connect_callback_set(m_mosquittoStruct, MosquittoHandler::onConnectWrapper); mosquitto_disconnect_callback_set(m_mosquittoStruct, MosquittoHandler::onDisconnectWrapper); mosquitto_message_callback_set(m_mosquittoStruct, MosquittoHandler::onMessageWrapper); return true; }
void print_usage(void) { int major, minor, revision; mosquitto_lib_version(&major, &minor, &revision); printf("mosquitto_pub is a simple mqtt client that will publish a message on a single topic and exit.\n"); printf("mosquitto_pub version %s running on libmosquitto %d.%d.%d.\n\n", VERSION, major, minor, revision); printf("Usage: mosquitto_pub [-h host] [-p port] [-q qos] [-r] {-f file | -l | -n | -m message} -t topic\n"); printf(" [-i id] [-I id_prefix]\n"); printf(" [-d] [--quiet]\n"); printf(" [-u username [-P password]]\n"); printf(" [--will-topic [--will-payload payload] [--will-qos qos] [--will-retain]]\n"); #ifdef WITH_TLS printf(" [{--cafile file | --capath dir} [--cert file] [--key file]]\n"); #ifdef WITH_TLS_PSK printf(" [--psk hex-key --psk-identity identity]\n"); #endif #endif printf(" mosquitto_pub --help\n\n"); printf(" -d : enable debug messages.\n"); printf(" -f : send the contents of a file as the message.\n"); printf(" -h : mqtt host to connect to. Defaults to localhost.\n"); printf(" -i : id to use for this client. Defaults to mosquitto_pub_ appended with the process id.\n"); printf(" -I : define the client id as id_prefix appended with the process id. Useful for when the\n"); printf(" broker is using the clientid_prefixes option.\n"); printf(" -l : read messages from stdin, sending a separate message for each line.\n"); printf(" -m : message payload to send.\n"); printf(" -n : send a null (zero length) message.\n"); printf(" -p : network port to connect to. Defaults to 1883.\n"); printf(" -q : quality of service level to use for all messages. Defaults to 0.\n"); printf(" -r : message should be retained.\n"); printf(" -s : read message from stdin, sending the entire input as a message.\n"); printf(" -t : mqtt topic to publish to.\n"); printf(" -u : provide a username (requires MQTT 3.1 broker)\n"); printf(" -P : provide a password (requires MQTT 3.1 broker)\n"); printf(" --help : display this message.\n"); printf(" --quiet : don't print error messages.\n"); printf(" --will-payload : payload for the client Will, which is sent by the broker in case of\n"); printf(" unexpected disconnection. If not given and will-topic is set, a zero\n"); printf(" length message will be sent.\n"); printf(" --will-qos : QoS level for the client Will.\n"); printf(" --will-retain : if given, make the client Will retained.\n"); printf(" --will-topic : the topic on which to publish the client Will.\n"); #ifdef WITH_TLS printf(" --cafile : path to a file containing trusted CA certificates to enable encrypted\n"); printf(" communication.\n"); printf(" --capath : path to a directory containing trusted CA certificates to enable encrypted\n"); printf(" communication.\n"); printf(" --cert : client certificate for authentication, if required by server.\n"); printf(" --key : client private key for authentication, if required by server.\n"); #ifdef WITH_TLS_PSK printf(" --psk : pre-shared-key in hexadecimal (no leading 0x) to enable TLS-PSK mode.\n"); printf(" --psk-identity : client identity string for TLS-PSK mode.\n"); #endif #endif printf("\nSee http://mosquitto.org/ for more information.\n\n"); }
static int mosq_version(lua_State *L) { int major, minor, rev; char version[16]; mosquitto_lib_version(&major, &minor, &rev); sprintf(version, "%i.%i.%i", major, minor, rev); lua_pushstring(L, version); return 1; }
void print_usage(void) { int major, minor, revision; mosquitto_lib_version(&major, &minor, &revision); printf("mosquitto_sub is a simple mqtt client that will subscribe to a single topic and print all messages it receives.\n"); printf("mosquitto_sub version %s running on libmosquitto %d.%d.%d.\n\n", VERSION, major, minor, revision); printf("Usage: mosquitto_sub [-c] [-h host] [-k keepalive] [-p port] [-q qos] [-v] -t topic ...\n"); printf(" [-i id] [-I id_prefix]\n"); printf(" [-d] [--quiet]\n"); printf(" [-u username [-P password]]\n"); printf(" [--will-topic [--will-payload payload] [--will-qos qos] [--will-retain]]\n"); #ifdef WITH_TLS printf(" [{--cafile file | --capath dir} [--cert file] [--key file]]\n"); #ifdef WITH_TLS_PSK printf(" [--psk hex-key --psk-identity identity]\n"); #endif #endif printf(" mosquitto_sub --help\n\n"); printf(" -c : disable 'clean session' (store subscription and pending messages when client disconnects).\n"); printf(" -d : enable debug messages.\n"); printf(" -h : mqtt host to connect to. Defaults to localhost.\n"); printf(" -i : id to use for this client. Defaults to mosquitto_sub_ appended with the process id.\n"); printf(" -I : define the client id as id_prefix appended with the process id. Useful for when the\n"); printf(" broker is using the clientid_prefixes option.\n"); printf(" -k : keep alive in seconds for this client. Defaults to 60.\n"); printf(" -p : network port to connect to. Defaults to 1883.\n"); printf(" -q : quality of service level to use for the subscription. Defaults to 0.\n"); printf(" -t : mqtt topic to subscribe to. May be repeated multiple times.\n"); printf(" -u : provide a username (requires MQTT 3.1 broker)\n"); printf(" -v : print published messages verbosely.\n"); printf(" -P : provide a password (requires MQTT 3.1 broker)\n"); printf(" --help : display this message.\n"); printf(" --quiet : don't print error messages.\n"); printf(" --will-payload : payload for the client Will, which is sent by the broker in case of\n"); printf(" unexpected disconnection. If not given and will-topic is set, a zero\n"); printf(" length message will be sent.\n"); printf(" --will-qos : QoS level for the client Will.\n"); printf(" --will-retain : if given, make the client Will retained.\n"); printf(" --will-topic : the topic on which to publish the client Will.\n"); #ifdef WITH_TLS printf(" --cafile : path to a file containing trusted CA certificates to enable encrypted\n"); printf(" certificate based communication.\n"); printf(" --capath : path to a directory containing trusted CA certificates to enable encrypted\n"); printf(" communication.\n"); printf(" --cert : client certificate for authentication, if required by server.\n"); printf(" --key : client private key for authentication, if required by server.\n"); #ifdef WITH_TLS_PSK printf(" --psk : pre-shared-key in hexadecimal (no leading 0x) to enable TLS-PSK mode.\n"); printf(" --psk-identity : client identity string for TLS-PSK mode.\n"); #endif #endif printf("\nSee http://mosquitto.org/ for more information.\n\n"); }
static int mosq_lib_version(lua_State *L) { int major, minor, rev; char version[16]; mosquitto_lib_version(&major, &minor, &rev); sprintf(version, "%i.%i.%i", major, minor, rev); return make_str_result(L, true, version); }
int setup_mq(const char* host) { int mq_maj, mq_min, mq_rev; mosquitto_lib_version(&mq_maj, &mq_min, &mq_rev); DLOG("You've got mosquitto version major:%d, minor:%d, rev:%d\n", mq_maj, mq_min, mq_rev); mosquitto_lib_init(); pid_t pid = getpid(); char clientid[40]; snprintf(clientid, sizeof (clientid), "rme_signed_demo_%d", pid); mosq = mosquitto_new(clientid, NULL); ILOG("Connecting to %s\n", host); mosquitto_connect(mosq, host, 1883, 15, true); return 0; }
void mqtt_print_usage(void) { int major, minor, revision; mosquitto_lib_version(&major, &minor, &revision); printf("mosquitto_pub is a simple mqtt client that will publish a message on a single topic and exit.\n"); printf("mosquitto_pub version %s running on libmosquitto %d.%d.%d.\n\n", MQTT_VERSION, major, minor, revision); printf("Usage: mosquitto_pub [-h host] [-p port] [-q qos] [-r] {-f file | -l | -n | -m message} -t topic\n"); printf(" [-i id] [-I id_prefix]\n"); printf(" [-d] [--quiet]\n"); printf(" [-M max_inflight]\n"); printf(" [-u username [-P password]]\n"); printf(" [--will-topic [--will-payload payload] [--will-qos qos] [--will-retain]]\n"); printf(" mosquitto_pub --help\n\n"); printf(" -d : enable debug messages.\n"); printf(" -f : send the contents of a file as the message.\n"); printf(" -h : mqtt host to connect to. Defaults to localhost.\n"); printf(" -i : id to use for this client. Defaults to mosquitto_pub_ appended with the process id.\n"); printf(" -I : define the client id as id_prefix appended with the process id. Useful for when the\n"); printf(" broker is using the clientid_prefixes option.\n"); printf(" -l : read messages from stdin, sending a separate message for each line.\n"); printf(" -m : message payload to send.\n"); printf(" -M : the maximum inflight messages for QoS 1/2..\n"); printf(" -n : send a null (zero length) message.\n"); printf(" -p : network port to connect to. Defaults to 1883.\n"); printf(" -q : quality of service level to use for all messages. Defaults to 0.\n"); printf(" -r : message should be retained.\n"); printf(" -s : read message from stdin, sending the entire input as a message.\n"); printf(" -t : mqtt topic to publish to.\n"); printf(" -u : provide a username (requires MQTT 3.1 broker)\n"); printf(" -P : provide a password (requires MQTT 3.1 broker)\n"); printf(" --help : display this message.\n"); printf(" --quiet : don't print error messages.\n"); printf(" --will-payload : payload for the client Will, which is sent by the broker in case of\n"); printf(" unexpected disconnection. If not given and will-topic is set, a zero\n"); printf(" length message will be sent.\n"); printf(" --will-qos : QoS level for the client Will.\n"); printf(" --will-retain : if given, make the client Will retained.\n"); printf(" --will-topic : the topic on which to publish the client Will.\n"); printf("\nSee http://mosquitto.org/ for more information.\n\n"); }
mqtt_t mqtt_init() { mqtt_t inst = NULL; int rval; int major = 0; int minor = 0; int revision = 0; (void) mosquitto_lib_version(&major, &minor, &revision); info("Use mosquitto v%d.%d r%d", major, minor, revision); rval = mosquitto_lib_init(); if (rval != MOSQ_ERR_SUCCESS) { error("Cannot initialize library: '%s'", mosquitto_strerror(rval)); } else { inst = (mqtt_t) calloc(sizeof(struct mqtt_struct_t), 1); if (inst == NULL) { error("Cannot allocate mqtt"); } } return inst; }
void mqtt_print_usage(void) { int major, minor, revision; mosquitto_lib_version(&major, &minor, &revision); printf("mosquitto_sub is a simple mqtt client that will subscribe to a single topic and print all messages it receives.\n"); printf("mosquitto_sub version %s running on libmosquitto %d.%d.%d.\n\n", MQTT_VERSION, major, minor, revision); printf("Usage: mosquitto_sub [-c] [-h host] [-k keepalive] [-p port] [-q qos] [-R] [-v] -t topic ...\n"); printf(" [-i id] [-I id_prefix]\n"); printf(" [-d] [--quiet]\n"); printf(" [-u username [-P password]]\n"); printf(" [--will-topic [--will-payload payload] [--will-qos qos] [--will-retain]]\n"); printf(" mosquitto_sub --help\n\n"); printf(" -c : disable 'clean session' (store subscription and pending messages when client disconnects).\n"); printf(" -d : enable debug messages.\n"); printf(" -h : mqtt host to connect to. Defaults to localhost.\n"); printf(" -i : id to use for this client. Defaults to mosquitto_sub_ appended with the process id.\n"); printf(" -I : define the client id as id_prefix appended with the process id. Useful for when the\n"); printf(" broker is using the clientid_prefixes option.\n"); printf(" -k : keep alive in seconds for this client. Defaults to 60.\n"); printf(" -p : network port to connect to. Defaults to 1883.\n"); printf(" -q : quality of service level to use for the subscription. Defaults to 0.\n"); printf(" -R : do not print stale messages (those with retain set).\n"); printf(" -t : mqtt topic to subscribe to. May be repeated multiple times.\n"); printf(" -u : provide a username (requires MQTT 3.1 broker)\n"); printf(" -v : print published messages verbosely.\n"); printf(" -P : provide a password (requires MQTT 3.1 broker)\n"); printf(" --help : display this message.\n"); printf(" --quiet : don't print error messages.\n"); printf(" --will-payload : payload for the client Will, which is sent by the broker in case of\n"); printf(" unexpected disconnection. If not given and will-topic is set, a zero\n"); printf(" length message will be sent.\n"); printf(" --will-qos : QoS level for the client Will.\n"); printf(" --will-retain : if given, make the client Will retained.\n"); printf(" --will-topic : the topic on which to publish the client Will.\n"); printf("\nSee http://mosquitto.org/ for more information.\n\n"); }
void print_usage(void) { int major, minor, revision; mosquitto_lib_version(&major, &minor, &revision); printf("mosquitto_pub is a simple mqtt client that will publish a message on a single topic and exit.\n"); printf("mosquitto_pub version %s running on libmosquitto %d.%d.%d.\n\n", VERSION, major, minor, revision); printf("Usage: mosquitto_pub [-h host] [-k keepalive] [-p port] [-q qos] [-r] {-f file | -l | -n | -m message} -t topic\n"); #ifdef WITH_SRV printf(" [-A bind_address] [-S]\n"); #else printf(" [-A bind_address]\n"); #endif printf(" [-i id] [-I id_prefix]\n"); printf(" [-d] [--quiet]\n"); printf(" [-M max_inflight]\n"); printf(" [-u username [-P password]]\n"); printf(" [--will-topic [--will-payload payload] [--will-qos qos] [--will-retain]]\n"); #ifdef WITH_TLS printf(" [{--cafile file | --capath dir} [--cert file] [--key file]\n"); printf(" [--ciphers ciphers] [--insecure]]\n"); #ifdef WITH_TLS_PSK printf(" [--psk hex-key --psk-identity identity [--ciphers ciphers]]\n"); #endif #endif #ifdef WITH_SOCKS printf(" [--proxy socks-url]\n"); #endif printf(" mosquitto_pub --help\n\n"); printf(" -A : bind the outgoing socket to this host/ip address. Use to control which interface\n"); printf(" the client communicates over.\n"); printf(" -d : enable debug messages.\n"); printf(" -f : send the contents of a file as the message.\n"); printf(" -h : mqtt host to connect to. Defaults to localhost.\n"); printf(" -i : id to use for this client. Defaults to mosquitto_pub_ appended with the process id.\n"); printf(" -I : define the client id as id_prefix appended with the process id. Useful for when the\n"); printf(" broker is using the clientid_prefixes option.\n"); printf(" -k : keep alive in seconds for this client. Defaults to 60.\n"); printf(" -l : read messages from stdin, sending a separate message for each line.\n"); printf(" -m : message payload to send.\n"); printf(" -M : the maximum inflight messages for QoS 1/2..\n"); printf(" -n : send a null (zero length) message.\n"); printf(" -p : network port to connect to. Defaults to 1883.\n"); printf(" -P : provide a password (requires MQTT 3.1 broker)\n"); printf(" -q : quality of service level to use for all messages. Defaults to 0.\n"); printf(" -r : message should be retained.\n"); printf(" -s : read message from stdin, sending the entire input as a message.\n"); #ifdef WITH_SRV printf(" -S : use SRV lookups to determine which host to connect to.\n"); #endif printf(" -t : mqtt topic to publish to.\n"); printf(" -u : provide a username (requires MQTT 3.1 broker)\n"); printf(" -V : specify the version of the MQTT protocol to use when connecting.\n"); printf(" Can be mqttv31 or mqttv311. Defaults to mqttv31.\n"); printf(" --help : display this message.\n"); printf(" --quiet : don't print error messages.\n"); printf(" --will-payload : payload for the client Will, which is sent by the broker in case of\n"); printf(" unexpected disconnection. If not given and will-topic is set, a zero\n"); printf(" length message will be sent.\n"); printf(" --will-qos : QoS level for the client Will.\n"); printf(" --will-retain : if given, make the client Will retained.\n"); printf(" --will-topic : the topic on which to publish the client Will.\n"); #ifdef WITH_TLS printf(" --cafile : path to a file containing trusted CA certificates to enable encrypted\n"); printf(" communication.\n"); printf(" --capath : path to a directory containing trusted CA certificates to enable encrypted\n"); printf(" communication.\n"); printf(" --cert : client certificate for authentication, if required by server.\n"); printf(" --key : client private key for authentication, if required by server.\n"); printf(" --ciphers : openssl compatible list of TLS ciphers to support.\n"); printf(" --tls-version : TLS protocol version, can be one of tlsv1.2 tlsv1.1 or tlsv1.\n"); printf(" Defaults to tlsv1.2 if available.\n"); printf(" --insecure : do not check that the server certificate hostname matches the remote\n"); printf(" hostname. Using this option means that you cannot be sure that the\n"); printf(" remote host is the server you wish to connect to and so is insecure.\n"); printf(" Do not use this option in a production environment.\n"); # ifdef WITH_TLS_PSK printf(" --psk : pre-shared-key in hexadecimal (no leading 0x) to enable TLS-PSK mode.\n"); printf(" --psk-identity : client identity string for TLS-PSK mode.\n"); # endif #endif #ifdef WITH_SOCKS printf(" --proxy : SOCKS5 proxy URL of the form:\n"); printf(" socks5h://[username[:password]@]hostname[:port]\n"); printf(" Only \"none\" and \"username\" authentication is supported.\n"); #endif printf("\nSee http://mosquitto.org/ for more information.\n\n"); }
int run_subscriber(int argc, char* const argv[]) //int main(int argc, char* const argv[]) { mosquitto_lib_init(); #if 0 { int major, minor, revision; mosquitto_lib_version(&major, &minor, &revision); std::cout << "Mosquitto library version - " << major << "." << minor << "." << revision << std::endl; } #endif std::cout << "Rx Measurement test program" << std::endl; std::string hostname("localhost"); std::list<std::string> topics; int qos = 0; // Cheap. int port = 1883; bool use_json = false; int num_threads = 1; enum { HELP_OPTION = '?', HOST_OPTION = 'h', TOPIC_OPTION = 't', QOS_OPTION = 'q', PORT_OPTION = 'p', JSON_MSG_OPTION = 'j', BINARY_MSG_OPTION = 'B', PARALLEL_OPTION = 'P', }; struct option options[] = { {"help", 0, nullptr, HELP_OPTION}, {"mqtt-host", 1, nullptr, HOST_OPTION}, {"topic", 1, nullptr, TOPIC_OPTION}, {"qos", 1, nullptr, QOS_OPTION}, {"mqtt-port", 1, nullptr, PORT_OPTION}, {"json", 0, nullptr, JSON_MSG_OPTION}, {"binary", 0, nullptr, BINARY_MSG_OPTION}, {"parallel", 1, nullptr, PARALLEL_OPTION}, {0} }; bool more_options = true; while (more_options) { int status = getopt_long(argc, argv, "h:t:q:p:j", options, nullptr); switch (status) { case HOST_OPTION: hostname = optarg; break; case TOPIC_OPTION: topics.push_back(optarg); break; case HELP_OPTION: exit(EXIT_FAILURE); break; case QOS_OPTION: qos = atoi(optarg); break; case PORT_OPTION: port = atoi(optarg); break; case JSON_MSG_OPTION: use_json = true; break; case BINARY_MSG_OPTION: use_json = false; break; case PARALLEL_OPTION: num_threads = atoi(optarg); break; default: more_options = false; break; } } std::cout << "Connect to host " << hostname << " on port " << port << std::endl; for (auto& topic : topics) { std::cout << "Subscribe under topic " << topic << std::endl; } std::cout << "Subscribe with quality of service of " << qos << std::endl; { std::list<struct mosquitto*> mosq_list; ReceiveStats data_obj; get_timestamp(data_obj.base_nsec); data_obj.last_report_nsec = data_obj.base_nsec; for (int i = 0; i < num_threads; i++) { struct mosquitto *mosq = mosquitto_new(nullptr, /*clean_session=*/true, &data_obj); int code = mosquitto_connect(mosq, hostname.c_str(), port, /*keepalive=*/-1); if (code != MOSQ_ERR_SUCCESS) { switch (code) { case MOSQ_ERR_INVAL: std::cerr << "Mosquitto connect failure - invalid input parameters" << std::endl; break; case MOSQ_ERR_ERRNO: std::cerr << "Mosquitto connect failure - " << strerror(errno) << std::endl; break; default: std::cerr << "Mosquitto connect failure - unknown error" << std::endl; break; } exit(EXIT_FAILURE); } mosq_list.push_back(mosq); } #if DISABLE_NAGLE for (auto mosq : mosq_list) { int sock = mosquitto_socket(mosq); if (sock >= 0) { int flag = 1; int result = setsockopt(sock, IPPROTO_TCP, TCP_NODELAY, (char *) &flag, sizeof(flag)); if (result < 0) { std::cerr << "Unable to disable Nagle algorithm on Misquitto socket, " << strerror(errno) << std::endl; } else { std::cout << "Disabled Nagle algorithm on Misquitto socket" << std::endl; } } else { std::cerr << "Unable to disable Nagle algorithm on Misquitto, no socket" << std::endl; } } #endif for (auto mosq : mosq_list) { if (use_json) { mosquitto_message_callback_set(mosq, &message_callback_json); } else { mosquitto_message_callback_set(mosq, &message_callback_binary); } mosquitto_subscribe_callback_set(mosq, &subscribe_callback); } for (auto mosq : mosq_list) { int code = mosquitto_loop_start(mosq); if (code != MOSQ_ERR_SUCCESS) { switch (code) { case MOSQ_ERR_INVAL: std::cerr << "Mosquitto loop start failure - invalid input parameters" << std::endl; break; case MOSQ_ERR_NOT_SUPPORTED: std::cerr << "Mosquitto loop start failure - not supported" << std::endl; break; default: std::cerr << "Mosquitto loop start failure - unknown error" << std::endl; break; } exit(EXIT_FAILURE); } } for (auto& topic : topics) { int mid; struct mosquitto* mosq = mosq_list.front(); // Transfer to back of list. mosq_list.pop_front(); mosq_list.push_back(mosq); int code = mosquitto_subscribe(mosq, &mid, topic.c_str(), qos); if (code != MOSQ_ERR_SUCCESS) { switch (code) { case MOSQ_ERR_INVAL: std::cerr << "Mosquitto subscribe failure - invalid input parameters" << std::endl; break; case MOSQ_ERR_NOMEM: std::cerr << "Mosquitto subscribe failure - out of memory" << std::endl; break; case MOSQ_ERR_NO_CONN: std::cerr << "Mosquitto subscribe failure - no connection" << std::endl; break; default: std::cerr << "Mosquitto subscribe failure - unknown error" << std::endl; break; } exit(EXIT_FAILURE); } std::cout << "Subscribing to topic " << topic << " with mid " << mid << std::endl; } for (auto mosq : mosq_list) { // mosquitto_disconnect(mosq); mosquitto_loop_stop(mosq, false); mosquitto_destroy(mosq); } } mosquitto_lib_cleanup(); }
void print_usage(void) { int major, minor, revision; mosquitto_lib_version(&major, &minor, &revision); printf("mosquitto_sub is a simple mqtt client that will subscribe to a set of topics and print all messages it receives.\n"); printf("mosquitto_sub version %s running on libmosquitto %d.%d.%d.\n\n", VERSION, major, minor, revision); printf("Usage: mosquitto_sub {[-h host] [-p port] [-u username [-P password]] -t topic | -L URL [-t topic]}\n"); printf(" [-c] [-k keepalive] [-q qos]\n"); printf(" [-C msg_count] [-R] [--retained-only] [-T filter_out] [-U topic ...]\n"); printf(" [-F format]\n"); #ifndef WIN32 printf(" [-W timeout_secs]\n"); #endif #ifdef WITH_SRV printf(" [-A bind_address] [-S]\n"); #else printf(" [-A bind_address]\n"); #endif printf(" [-i id] [-I id_prefix]\n"); printf(" [-d] [-N] [--quiet] [-v]\n"); printf(" [--fmask outfile [--overwrite]]\n"); printf(" [--will-topic [--will-payload payload] [--will-qos qos] [--will-retain]]\n"); #ifdef WITH_TLS printf(" [{--cafile file | --capath dir} [--cert file] [--key file]\n"); printf(" [--ciphers ciphers] [--insecure]]\n"); #ifdef FINAL_WITH_TLS_PSK printf(" [--psk hex-key --psk-identity identity [--ciphers ciphers]]\n"); #endif #endif #ifdef WITH_SOCKS printf(" [--proxy socks-url]\n"); #endif printf(" mosquitto_sub --help\n\n"); printf(" -A : bind the outgoing socket to this host/ip address. Use to control which interface\n"); printf(" the client communicates over.\n"); printf(" -c : disable 'clean session' (store subscription and pending messages when client disconnects).\n"); printf(" -C : disconnect and exit after receiving the 'msg_count' messages.\n"); printf(" -d : enable debug messages.\n"); printf(" -F : output format.\n"); printf(" -h : mqtt host to connect to. Defaults to localhost.\n"); printf(" -i : id to use for this client. Defaults to mosquitto_sub_ appended with the process id.\n"); printf(" -I : define the client id as id_prefix appended with the process id. Useful for when the\n"); printf(" broker is using the clientid_prefixes option.\n"); printf(" -k : keep alive in seconds for this client. Defaults to 60.\n"); printf(" -L : specify user, password, hostname, port and topic as a URL in the form:\n"); printf(" mqtt(s)://[username[:password]@]host[:port]/topic\n"); printf(" -N : do not add an end of line character when printing the payload.\n"); printf(" -p : network port to connect to. Defaults to 1883 for plain MQTT and 8883 for MQTT over TLS.\n"); printf(" -P : provide a password\n"); printf(" -q : quality of service level to use for the subscription. Defaults to 0.\n"); printf(" -R : do not print stale messages (those with retain set).\n"); #ifdef WITH_SRV printf(" -S : use SRV lookups to determine which host to connect to.\n"); #endif printf(" -t : mqtt topic to subscribe to. May be repeated multiple times.\n"); printf(" -T : topic string to filter out of results. May be repeated.\n"); printf(" -u : provide a username\n"); printf(" -U : unsubscribe from a topic. May be repeated.\n"); printf(" -v : print published messages verbosely.\n"); printf(" -V : specify the version of the MQTT protocol to use when connecting.\n"); printf(" Can be mqttv31 or mqttv311. Defaults to mqttv311.\n"); #ifndef WIN32 printf(" -W : Specifies a timeout in seconds how long to process incoming MQTT messages.\n"); #endif printf(" --help : display this message.\n"); printf(" --quiet : don't print error messages.\n"); printf(" --retained-only : only handle messages with the retained flag set, and exit when the\n"); printf(" first non-retained message is received.\n"); printf(" --fmask : path to message outfile\n"); printf(" allowed masks are:\n"); printf(" @[epoch|date|year|month|day|datetime|hour|min|sec|id|topic[1-9]] \n"); printf(" eg. --fmask='@id@-@date@-@topic' for file id-20101221-topicname\n"); printf(" NOTE: option -F (new in v1.5.0) does have any effect when used with --fmask\n"); printf(" --nodesuffix : suffix for leaf/text node, when --fmask is provided\n"); printf(" --overwrite : overwrite the existing output file, can be used with --fmask only.\n"); printf(" --will-payload : payload for the client Will, which is sent by the broker in case of\n"); printf(" unexpected disconnection. If not given and will-topic is set, a zero\n"); printf(" length message will be sent.\n"); printf(" --will-qos : QoS level for the client Will.\n"); printf(" --will-retain : if given, make the client Will retained.\n"); printf(" --will-topic : the topic on which to publish the client Will.\n"); #ifdef WITH_TLS printf(" --cafile : path to a file containing trusted CA certificates to enable encrypted\n"); printf(" certificate based communication.\n"); printf(" --capath : path to a directory containing trusted CA certificates to enable encrypted\n"); printf(" communication.\n"); printf(" --cert : client certificate for authentication, if required by server.\n"); printf(" --key : client private key for authentication, if required by server.\n"); printf(" --ciphers : openssl compatible list of TLS ciphers to support.\n"); printf(" --tls-version : TLS protocol version, can be one of tlsv1.2 tlsv1.1 or tlsv1.\n"); printf(" Defaults to tlsv1.2 if available.\n"); printf(" --insecure : do not check that the server certificate hostname matches the remote\n"); printf(" hostname. Using this option means that you cannot be sure that the\n"); printf(" remote host is the server you wish to connect to and so is insecure.\n"); printf(" Do not use this option in a production environment.\n"); #ifdef FINAL_WITH_TLS_PSK printf(" --psk : pre-shared-key in hexadecimal (no leading 0x) to enable TLS-PSK mode.\n"); printf(" --psk-identity : client identity string for TLS-PSK mode.\n"); #endif #endif #ifdef WITH_SOCKS printf(" --proxy : SOCKS5 proxy URL of the form:\n"); printf(" socks5h://[username[:password]@]hostname[:port]\n"); printf(" Only \"none\" and \"username\" authentication is supported.\n"); #endif printf("\nSee http://mosquitto.org/ for more information.\n\n"); }
int main(int argc, char **argv) { setvbuf(stdout, NULL, _IONBF, 0); printf("Electrombile Server %s, with event %s, mosquitto %d, curl %s\n", VERSION_STR, LIBEVENT_VERSION, mosquitto_lib_version(NULL, NULL, NULL), curl_version()); base = event_base_new(); if (!base) return 1; /*XXXerr*/ int ret = log_init(); if (ret) { return ret; } mc_obj_initial(); struct evconnlistener* listener = server_mc_start(base); if (listener) { LOG_INFO("start mc server sucessfully"); } else { LOG_FATAL("start mc server failed"); return 2; } if (signal(SIGINT, sig_usr) == SIG_ERR) { LOG_ERROR("Can't catch SIGINT"); } if (signal(SIGTERM, sig_usr) == SIG_ERR) { LOG_ERROR("Can't catch SIGTERM"); } // mosquitto_lib_init(); curl_global_init(CURL_GLOBAL_DEFAULT); //start the event loop event_base_dispatch(base); //cleanup all resouce mc_obj_destruct(); evconnlistener_free(listener); event_base_free(base); // mosquitto_lib_cleanup(); curl_global_cleanup(); clcanupLeancloudHeader(); cleanupYeelinkHeader(); // sk_free(SSL_COMP_get_compression_methods()); LOG_INFO("stop mc server sucessfully"); zlog_fini(); return 0; }
/* * call-seq: * Mosquitto.version -> Integer * * The libmosquitto version linked against. It returns for libmosquitto 1.2.3 an integer as : * * 1002003 * * === Examples * Mosquitto.version -> 1002003 * */ static VALUE rb_mosquitto_version(MOSQ_UNUSED VALUE obj) { return INT2NUM(mosquitto_lib_version(NULL, NULL, NULL)); }