Example #1
0
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;
}
Example #2
0
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;
}
Example #3
0
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);
}