Branch data Line data Source code
1 : : /* SPDX-FileCopyrightText: Copyright 2026 Cozens Software Solutions Limited
2 : : * SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0 OR LicenseRef-PolyForm-Internal-Use-1.0.0 OR LicenseRef-COSOSO-Commercial
3 : : */
4 : :
5 : : #include "SolidSyslogVxWorks64Resolver.h"
6 : :
7 : : #include <stdbool.h>
8 : : #include <stdint.h>
9 : :
10 : : #include "vxWorks.h"
11 : :
12 : : #include <netinet/in.h>
13 : : #include <sys/socket.h>
14 : :
15 : : #include "hostLib.h"
16 : : #include "inetLib.h"
17 : :
18 : : #include "SolidSyslogError.h"
19 : : #include "SolidSyslogNullResolver.h"
20 : : #include "SolidSyslogResolverDefinition.h"
21 : : #include "SolidSyslogTransport.h"
22 : : #include "SolidSyslogVxWorks64AddressPrivate.h"
23 : : #include "SolidSyslogVxWorks64ResolverErrors.h"
24 : : #include "SolidSyslogVxWorks64ResolverPrivate.h"
25 : :
26 : : const struct SolidSyslogErrorSource SolidSyslogVxWorks64ResolverErrorSource = {
27 : : "VxWorks64Resolver",
28 : : SolidSyslogResolverErrors_Name
29 : : };
30 : :
31 : : struct SolidSyslogAddress;
32 : :
33 : : static bool VxWorks64Resolver_Resolve(
34 : : struct SolidSyslogResolver* base,
35 : : enum SolidSyslogTransport transport,
36 : : const char* host,
37 : : uint16_t port,
38 : : struct SolidSyslogAddress* result
39 : : );
40 : :
41 : : static inline bool VxWorks64Resolver_IsUnresolved(uint32_t address);
42 : :
43 : 72 : void SolidSyslogVxWorks64Resolver_Initialise(struct SolidSyslogResolver* base)
44 : : {
45 : 72 : base->Resolve = VxWorks64Resolver_Resolve;
46 : 72 : }
47 : :
48 : 72 : void SolidSyslogVxWorks64Resolver_Cleanup(struct SolidSyslogResolver* base)
49 : : {
50 : : /* Use-after-destroy lands on the NullResolver vtable. */
51 : 72 : *base = *SolidSyslogNullResolver_Get();
52 : 72 : }
53 : :
54 : 32 : static bool VxWorks64Resolver_Resolve(
55 : : struct SolidSyslogResolver* base,
56 : : enum SolidSyslogTransport transport,
57 : : const char* host,
58 : : uint16_t port,
59 : : struct SolidSyslogAddress* result
60 : : )
61 : : {
62 : : (void) base;
63 : : (void) transport;
64 : : /* inetLib and hostLib take a non-const string they only read (D.006). */
65 : 32 : uint32_t found = (uint32_t) inet_addr((char*) host);
66 [ + + ]: 32 : if (VxWorks64Resolver_IsUnresolved(found) == true)
67 : : {
68 : 5 : found = (uint32_t) hostGetByName((char*) host);
69 : : }
70 : 32 : bool resolved = VxWorks64Resolver_IsUnresolved(found) == false;
71 [ + + ]: 32 : if (resolved == true)
72 : : {
73 : 30 : struct sockaddr_in* sin = SolidSyslogVxWorks64Address_AsSockaddrIn(result);
74 : 30 : sin->sin_len = (unsigned char) sizeof(*sin);
75 : 30 : sin->sin_family = AF_INET;
76 : 30 : sin->sin_port = htons(port);
77 : 30 : sin->sin_addr.s_addr = found;
78 : : }
79 : 32 : return resolved;
80 : : }
81 : :
82 : 64 : static inline bool VxWorks64Resolver_IsUnresolved(uint32_t address)
83 : : {
84 : 64 : return address == (uint32_t) ERROR;
85 : : }
|