/* Connection created successfully */
SILC_LOG_DEBUG(("Connected"));
- conn->stream = (void *)stream;
+ conn->internal->user_stream = stream;
SILC_FSM_CALL_CONTINUE(fsm);
}
silc_ske_map_status(status));
conn->internal->status = SILC_CLIENT_CONN_ERROR_KE;
- conn->internal->error = status;
silc_ske_free_rekey_material(rekey);
silc_fsm_next(fsm, silc_client_st_connect_error);
- SILC_FSM_CALL_CONTINUE(fsm);
+ SILC_FSM_CALL_CONTINUE_SYNC(fsm);
return;
}
silc_ske_free_rekey_material(rekey);
silc_fsm_next(fsm, silc_client_st_connect_error);
- SILC_FSM_CALL_CONTINUE(fsm);
+ SILC_FSM_CALL_CONTINUE_SYNC(fsm);
return;
}
silc_ske_free_rekey_material(rekey);
silc_fsm_next(fsm, silc_client_st_connect_error);
- SILC_FSM_CALL_CONTINUE(fsm);
+ SILC_FSM_CALL_CONTINUE_SYNC(fsm);
return;
}
conn->remote_host,
silc_ske_map_status(status));
+ silc_ske_free(conn->internal->ske);
+ conn->internal->ske = NULL;
silc_fsm_finish(fsm);
return;
}
silc_ske_free_rekey_material(conn->internal->rekey);
conn->internal->rekey = rekey;
+ silc_ske_free(conn->internal->ske);
+ conn->internal->ske = NULL;
+
SILC_LOG_DEBUG(("Rekey completed conn %p", conn));
/* Rekey done */
silc_fsm_next(fsm, silc_client_st_connect_error);
}
- SILC_FSM_CALL_CONTINUE(fsm);
+ SILC_FSM_CALL_CONTINUE_SYNC(fsm);
}
/********************** CONNECTION_AUTH_REQUEST packet **********************/
/* Create packet stream */
conn->stream = silc_packet_stream_create(client->internal->packet_engine,
conn->internal->schedule,
- (SilcStream)conn->stream);
+ conn->internal->user_stream);
if (!conn->stream) {
/** Cannot create packet stream */
SILC_LOG_DEBUG(("Could not create packet stream"));
SilcClientConnection conn = fsm_context;
SilcClient client = conn->client;
SilcSKEParamsStruct params;
+ SilcClientID cid;
SILC_LOG_DEBUG(("Starting key exchange protocol"));
/** Run key exchange (TCP) */
silc_fsm_next(fsm, silc_client_st_connect_auth_resolve);
+ /* Old server version requires empty Client ID in packets. Remove this
+ backwards support somepoint after 1.1 server is released. */
+ memset(&cid, 0, sizeof(cid));
+ cid.ip.data_len = 4;
+ silc_packet_set_ids(conn->stream, SILC_ID_CLIENT, &cid, 0, NULL);
+
SILC_FSM_CALL(conn->internal->op = silc_ske_initiator(conn->internal->ske,
conn->stream,
¶ms, NULL));
return SILC_FSM_CONTINUE;
}
-/* Resolved authentication method to be used in authentication protocol */
+/* Resolve authentication method to be used in authentication protocol */
SILC_FSM_STATE(silc_client_st_connect_auth_resolve)
{
SILC_FSM_CALL(conn->internal->op = silc_ske_rekey_responder(
conn->internal->ske,
conn->stream,
- conn->internal->rekey));
+ conn->internal->rekey,
+ NULL));
}