Fixed entry resolving while processing incoming notify packets,
[silc.git] / lib / silcclient / client_connect.c
index 78e24c60189ce2bbdb3aa0dd4f50c93d6f8e6c14..ec7e81e50ed3aed892a4859256f737108fc5971a 100644 (file)
@@ -95,7 +95,7 @@ static void silc_client_connect_callback(SilcNetStatus status,
 
 static void silc_client_ke_verify_key_cb(SilcBool success, void *context)
 {
-  VerifyKeyContext verify = (VerifyKeyContext)context;
+  SilcVerifyKeyContext verify = context;
 
   SILC_LOG_DEBUG(("Start"));
 
@@ -118,7 +118,7 @@ static void silc_client_ke_verify_key(SilcSKE ske,
   SilcFSMThread fsm = context;
   SilcClientConnection conn = silc_fsm_get_context(fsm);
   SilcClient client = conn->client;
-  VerifyKeyContext verify;
+  SilcVerifyKeyContext verify;
 
   /* If we provided repository for SKE and we got here the key was not
      found from the repository. */
@@ -658,6 +658,10 @@ SILC_FSM_STATE(silc_client_st_connected)
   SilcClientConnection conn = fsm_context;
   SilcClient client = conn->client;
 
+  /* Get SILC protocol version remote supports */
+  silc_ske_parse_version(conn->internal->ske, &conn->internal->remote_version,
+                        NULL, NULL, NULL, NULL);
+
   silc_ske_free(conn->internal->ske);
   conn->internal->ske = NULL;
 
@@ -733,9 +737,11 @@ SILC_TASK_CALLBACK(silc_client_rekey_timer)
   SilcClientConnection conn = context;
 
   /* Signal to start rekey */
-  conn->internal->rekey_responder = FALSE;
-  conn->internal->rekeying = TRUE;
-  SILC_FSM_EVENT_SIGNAL(&conn->internal->wait_event);
+  if (!silc_fsm_is_started(&conn->internal->event_thread)) {
+    conn->internal->rekey_responder = FALSE;
+    conn->internal->rekeying = TRUE;
+    SILC_FSM_EVENT_SIGNAL(&conn->internal->wait_event);
+  }
 
   /* Reinstall rekey timer */
   silc_schedule_task_add_timeout(conn->internal->schedule,