#include "ntp_signd.h"
#include "ntp_sources.h"
#include "ntp_core.h"
-#include "nts_ke_client.h"
#include "nts_ke_server.h"
#include "nts_ntp_server.h"
#include "socket.h"
TMC_Finalise();
MNL_Finalise();
CLG_Finalise();
- NKC_Finalise();
NKS_Finalise();
NNS_Finalise();
NSD_Finalise();
NSD_Initialise();
NNS_Initialise();
NKS_Initialise(scfilter_level);
- NKC_Initialise();
CLG_Initialise();
MNL_Initialise();
TMC_Initialise();
/* ================================================== */
-static void *client_credentials;
+static void *client_credentials = NULL;
+static int client_credentials_refs = 0;
/* ================================================== */
/* ================================================== */
-void
-NKC_Initialise(void)
-{
- client_credentials = NULL;
-}
-
-/* ================================================== */
-
-void
-NKC_Finalise(void)
-{
- if (client_credentials)
- NKSN_DestroyCertCredentials(client_credentials);
-}
-
-/* ================================================== */
-
NKC_Instance
NKC_CreateInstance(IPSockAddr *address, const char *name)
{
inst->destroying = 0;
inst->got_response = 0;
- /* Create the credentials with the first client instance and share them
- with other instances */
+ /* Share the credentials with other client instances */
if (!client_credentials)
client_credentials = NKSN_CreateCertCredentials(NULL, NULL, CNF_GetNtsTrustedCertFile());
+ client_credentials_refs++;
return inst;
}
Free(inst->name);
Free(inst);
+
+ client_credentials_refs--;
+ if (client_credentials_refs <= 0 && client_credentials) {
+ NKSN_DestroyCertCredentials(client_credentials);
+ client_credentials = NULL;
+ }
}
/* ================================================== */
typedef struct NKC_Instance_Record *NKC_Instance;
-/* Init and fini functions */
-extern void NKC_Initialise(void);
-extern void NKC_Finalise(void);
-
/* Create a client NTS-KE instance */
extern NKC_Instance NKC_CreateInstance(IPSockAddr *address, const char *name);
CNF_ParseLine(NULL, i + 1, conf[i]);
LCL_Initialise();
- NKC_Initialise();
SCK_GetLoopbackIPAddress(AF_INET, &addr.ip_addr);
addr.port = 0;
NKC_DestroyInstance(inst);
- NKC_Finalise();
LCL_Finalise();
CNF_Finalise();
}