diff --git a/src/conn.c b/src/conn.c index f586a59d..bb07fa24 100644 --- a/src/conn.c +++ b/src/conn.c @@ -1388,8 +1388,9 @@ int xmpp_conn_restore_sm_state(xmpp_conn_t *conn, memset(conn->sm_state, 0, sizeof(*conn->sm_state)); conn->sm_state->ctx = conn->ctx; + conn->sm_state->bound_jid = strophe_strdup(conn->ctx, conn->jid); conn->sm_state->sm_support = 1; - conn->sm_state->sm_enabled = 1; + conn->sm_state->sm_enabled = 0; conn->sm_state->can_resume = 1; conn->sm_state->resume = 1; @@ -1403,7 +1404,7 @@ int xmpp_conn_restore_sm_state(xmpp_conn_t *conn, goto err_reload; size_t id_len; - ret = sm_load_string(&sm, &conn->sm_state->id, &id_len); + ret = sm_load_string(&sm, &conn->sm_state->previd, &id_len); if (ret) goto err_reload; @@ -1484,7 +1485,7 @@ static int sm_store_u32(unsigned char **next_, static size_t sm_state_serialize(xmpp_conn_t *conn, unsigned char **buf) { if (!conn->sm_state->sm_support || !conn->sm_state->sm_enabled || - !conn->sm_state->can_resume) { + !conn->sm_state->can_resume || !conn->sm_state->id) { *buf = NULL; return 0; } @@ -1570,13 +1571,13 @@ static size_t sm_state_serialize(xmpp_conn_t *conn, unsigned char **buf) err_serialize: strophe_error(conn->ctx, "conn", "Can't serialize more data, buffer full"); - strophe_free(conn->ctx, buf); + strophe_free(conn->ctx, *buf); return 0; } void trigger_sm_callback(xmpp_conn_t *conn) { - if (!conn || !conn->sm_callback) + if (!conn || !conn->sm_callback || !conn->sm_state->sm_enabled) return; unsigned char *buf; diff --git a/tests/test_serialize_sm.c b/tests/test_serialize_sm.c index ce4846a1..9197ec93 100644 --- a/tests/test_serialize_sm.c +++ b/tests/test_serialize_sm.c @@ -44,7 +44,7 @@ void callback(xmpp_conn_t *conn, xmpp_conn_restore_sm_state(newconn, sm_state, sm_state_len); ENSURE_EQ(newconn->sm_state->sm_sent_nr, 0); ENSURE_EQ(newconn->sm_state->sm_handled_nr, 0); - COMPARE(newconn->sm_state->id, "SMID"); + COMPARE(newconn->sm_state->previd, "SMID"); ENSURE_EQ(newconn->send_queue_len, 2); ENSURE_EQ(newconn->send_queue_user_len, 2); ENSURE_EQ((size_t)(newconn->sm_state->sm_queue.head), 0); @@ -66,7 +66,7 @@ void callback(xmpp_conn_t *conn, xmpp_conn_restore_sm_state(newconn, sm_state, sm_state_len); ENSURE_EQ(newconn->sm_state->sm_sent_nr, 1); ENSURE_EQ(newconn->sm_state->sm_handled_nr, 0); - COMPARE(newconn->sm_state->id, "SMID"); + COMPARE(newconn->sm_state->previd, "SMID"); ENSURE_EQ(newconn->send_queue_len, 1); ENSURE_EQ(newconn->send_queue_user_len, 1); ENSURE_EQ(newconn->sm_state->sm_queue.head->sm_h, 0); @@ -86,7 +86,7 @@ void callback(xmpp_conn_t *conn, xmpp_conn_restore_sm_state(newconn, sm_state, sm_state_len); ENSURE_EQ(newconn->sm_state->sm_sent_nr, 1); ENSURE_EQ(newconn->sm_state->sm_handled_nr, 0); - COMPARE(newconn->sm_state->id, "SMID"); + COMPARE(newconn->sm_state->previd, "SMID"); ENSURE_EQ(newconn->send_queue_len, 0); ENSURE_EQ(newconn->send_queue_user_len, 0); ENSURE_EQ(newconn->sm_state->sm_queue.head->sm_h, 0);