struct mosquitto *mosquitto_new(const char *id, bool clean_session, void *userdata) { struct mosquitto *mosq = NULL; int rc; if(clean_session == false && id == NULL) { errno = EINVAL; return NULL; } #ifndef WIN32 signal(SIGPIPE, SIG_IGN); #endif mosq = (struct mosquitto *)_mosquitto_calloc(1, sizeof(struct mosquitto)); if(mosq) { mosq->sock = INVALID_SOCKET; #ifdef WITH_THREADING mosq->thread_id = pthread_self(); #endif rc = mosquitto_reinitialise(mosq, id, clean_session, userdata); if(rc) { mosquitto_destroy(mosq); if(rc == MOSQ_ERR_INVAL) { errno = EINVAL; } else if(rc == MOSQ_ERR_NOMEM) { errno = ENOMEM; } return NULL; } } else { errno = ENOMEM; } return 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; }
static int ctx_reinitialise(lua_State *L) { ctx_t *ctx = ctx_check(L, 1); const char *id = luaL_optstring(L, 1, NULL); bool clean_session = (lua_isboolean(L, 2) ? lua_toboolean(L, 2) : true); if (id == NULL && !clean_session) { return luaL_argerror(L, 3, "if 'id' is nil then 'clean session' must be true"); } int rc = mosquitto_reinitialise(ctx->mosq, id, clean_session, ctx); /* clean up Lua callback functions in the registry */ ctx__on_clear(ctx); ctx__on_init(ctx); return mosq__pstatus(L, rc); }