Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions Bdd/Targets/Common/BddTargetAppName.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#include "BddTargetAppName.h"
#include "SolidSyslogFormatter.h"
#include "SolidSyslogHeaderField.h"

#include <ctype.h>
#include <stdbool.h>
Expand Down Expand Up @@ -57,7 +57,8 @@ void BddTargetAppName_Set(const char* argv0)
}
}

void BddTargetAppName_Get(struct SolidSyslogFormatter* formatter)
void BddTargetAppName_Get(struct SolidSyslogHeaderField* field, void* context)
{
SolidSyslogFormatter_BoundedString(formatter, appName, appNameLength);
(void) context;
SolidSyslogHeaderField_PrintUsAscii(field, appName, appNameLength);
}
4 changes: 2 additions & 2 deletions Bdd/Targets/Common/BddTargetAppName.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@

EXTERN_C_BEGIN

struct SolidSyslogFormatter;
struct SolidSyslogHeaderField;

void BddTargetAppName_Set(const char* argv0);
void BddTargetAppName_Get(struct SolidSyslogFormatter * formatter);
void BddTargetAppName_Get(struct SolidSyslogHeaderField * field, void* context);

EXTERN_C_END

Expand Down
8 changes: 5 additions & 3 deletions Bdd/Targets/Common/BddTargetFreeRtosPipeline.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "SolidSyslogError.h"
#include "SolidSyslogFileBlockDevice.h"
#include "SolidSyslogFormatter.h"
#include "SolidSyslogHeaderField.h"
#include "SolidSyslogFreeRtosMutex.h"
#include "SolidSyslogFreeRtosSysUpTime.h"
#include "SolidSyslogMbedTlsAesGcmPolicy.h"
Expand Down Expand Up @@ -175,7 +176,7 @@ static void OnStoreFull(void* context);
static size_t GetCapacityThreshold(void* context);
static void OnThresholdCrossed(void* context);
static void TeardownAll(void);
static void GetAppName(struct SolidSyslogFormatter* formatter);
static void GetAppName(struct SolidSyslogHeaderField* field, void* context);
static void GetTimeQuality(struct SolidSyslogTimeQuality* timeQuality);
static void ErrorHandlerEx(void* context, const struct SolidSyslogErrorEvent* event);

Expand Down Expand Up @@ -220,9 +221,10 @@ void BddTargetFreeRtosPipeline_SetConfig(const struct BddTargetFreeRtosPipelineC

/* ---- SolidSyslog config callbacks ------------------------------------------ */

static void GetAppName(struct SolidSyslogFormatter* formatter)
static void GetAppName(struct SolidSyslogHeaderField* field, void* context)
{
SolidSyslogFormatter_BoundedString(formatter, appName, strlen(appName));
(void) context;
SolidSyslogHeaderField_PrintUsAscii(field, appName, strlen(appName));
}

/* No RTC and no time-sync on these reference targets — RFC 5424 §6.2.3.1
Expand Down
4 changes: 2 additions & 2 deletions Bdd/Targets/Common/BddTargetFreeRtosPipeline.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
#define BDD_TARGET_FREE_RTOS_PIPELINE_H

#include "SolidSyslogEndpoint.h"
#include "SolidSyslogHeaderFieldFunction.h"
#include "SolidSyslogSender.h"
#include "SolidSyslogStringFunction.h"

#include <stdbool.h>
#include <stdint.h>
Expand Down Expand Up @@ -37,7 +37,7 @@ struct BddTargetFreeRtosPipelineConfig
struct SolidSyslogSender* (*BuildSender)(void);
/* Emit the RFC 5424 HOSTNAME by reading the platform IP stack. Wired into
* SolidSyslogConfig.GetHostname. */
SolidSyslogStringFunction GetHostname;
SolidSyslogHeaderFieldFunction GetHostname;
/* Tear down the sender + platform adapters. Runs on the interactive task
* after the shared pipeline teardown (SolidSyslog / SD / store / buffer). */
void (*TeardownNetwork)(void);
Expand Down
9 changes: 5 additions & 4 deletions Bdd/Targets/FreeRtos/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
#include "BddTargetTlsConfig.h"
#include "BddTargetTlsSender.h"

#include "SolidSyslogFormatter.h"
#include "SolidSyslogHeaderField.h"
#include "SolidSyslogPlusTcpAddress.h"
#include "SolidSyslogPlusTcpDatagram.h"
#include "SolidSyslogPlusTcpResolver.h"
Expand Down Expand Up @@ -96,7 +96,7 @@ static BaseType_t interactiveTaskCreated = pdFALSE;
extern NetworkInterface_t* pxMPS2_FillInterfaceDescriptor(BaseType_t xEMACIndex, NetworkInterface_t* pxInterface);

static void SetEthernetIrqPriority(void);
static void GetHostname(struct SolidSyslogFormatter* formatter);
static void GetHostname(struct SolidSyslogHeaderField* field, void* context);
static struct SolidSyslogSender* BuildSender(void);
static void TeardownNetwork(void);

Expand Down Expand Up @@ -229,16 +229,17 @@ static void SetEthernetIrqPriority(void)
*ipr = ETHERNET_IRQ_PRIORITY;
}

static void GetHostname(struct SolidSyslogFormatter* formatter)
static void GetHostname(struct SolidSyslogHeaderField* field, void* context)
{
/* RFC 5424 §6.2.4 rung 2 (static IP address). Read back from the IP stack so
* a future DHCP / hostname slice satisfies the same rung without re-touching
* this callback. */
uint32_t ipAddress = 0U;
char ipBuffer[16];
(void) context;
FreeRTOS_GetEndPointConfiguration(&ipAddress, NULL, NULL, NULL, &networkEndPoint);
FreeRTOS_inet_ntoa(ipAddress, ipBuffer);
SolidSyslogFormatter_BoundedString(formatter, ipBuffer, strlen(ipBuffer));
SolidSyslogHeaderField_PrintUsAscii(field, ipBuffer, strlen(ipBuffer));
}

/* Build the PlusTcp SwitchingSender: UDP datagram, octet-framed TCP, and a
Expand Down
9 changes: 5 additions & 4 deletions Bdd/Targets/FreeRtosLwip/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
#include "BddTargetSwitchConfig.h"
#include "BddTargetTlsSender.h"

#include "SolidSyslogFormatter.h"
#include "SolidSyslogHeaderField.h"
#include "SolidSyslogLwipRawAddress.h"
#include "SolidSyslogLwipRawDatagram.h"
#include "SolidSyslogLwipRawDnsResolver.h"
Expand Down Expand Up @@ -70,7 +70,7 @@ static void LwipTcpipMarshal(SolidSyslogLwipRawCallback callback, void* context)
static void NetworkBringUp(void* context);
static void WarmUpGatewayArp(void);
static void GatewayResolvedQuery(void* context);
static void GetHostname(struct SolidSyslogFormatter* formatter);
static void GetHostname(struct SolidSyslogHeaderField* field, void* context);
static struct SolidSyslogSender* BuildSender(void);
static void TeardownNetwork(void);

Expand Down Expand Up @@ -233,12 +233,13 @@ void vApplicationStackOverflowHook(TaskHandle_t task, char* taskName)
}
}

static void GetHostname(struct SolidSyslogFormatter* formatter)
static void GetHostname(struct SolidSyslogHeaderField* field, void* context)
{
/* RFC 5424 §6.2.4 rung 2 (static IP) — read back from the netif so a future
* DHCP slice satisfies the same rung without touching this callback. */
const char* address = ip4addr_ntoa(netif_ip4_addr(&networkInterface));
SolidSyslogFormatter_BoundedString(formatter, address, strlen(address));
(void) context;
SolidSyslogHeaderField_PrintUsAscii(field, address, strlen(address));
}

/* Bring up the netif on the tcpip thread, warm the gateway ARP, then build the
Expand Down
13 changes: 8 additions & 5 deletions Core/Interface/SolidSyslogConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@

#include <stddef.h>

#include "SolidSyslogStringFunction.h"
#include "SolidSyslogHeaderFieldFunction.h"
#include "SolidSyslogTimestamp.h"
#include "ExternC.h"

EXTERN_C_BEGIN

struct SolidSyslog;
struct SolidSyslogBuffer;
struct SolidSyslogFormatter;
struct SolidSyslogHeaderField;
struct SolidSyslogSender;
struct SolidSyslogStore;
struct SolidSyslogStructuredData;
Expand All @@ -21,9 +21,12 @@ EXTERN_C_BEGIN
struct SolidSyslogBuffer* Buffer;
struct SolidSyslogSender* Sender;
SolidSyslogClockFunction Clock;
SolidSyslogStringFunction GetHostname;
SolidSyslogStringFunction GetAppName;
SolidSyslogStringFunction GetProcessId;
SolidSyslogHeaderFieldFunction GetHostname;
void* GetHostnameContext;
SolidSyslogHeaderFieldFunction GetAppName;
void* GetAppNameContext;
SolidSyslogHeaderFieldFunction GetProcessId;
void* GetProcessIdContext;
struct SolidSyslogStore* Store;
struct SolidSyslogStructuredData** Sd;
size_t SdCount;
Expand Down
34 changes: 34 additions & 0 deletions Core/Interface/SolidSyslogHeaderField.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#ifndef SOLIDSYSLOGHEADERFIELD_H
#define SOLIDSYSLOGHEADERFIELD_H

#include "ExternC.h"

#include <stddef.h>
#include <stdint.h>

EXTERN_C_BEGIN

/* The value sink for an RFC 5424 header field (HOSTNAME / APP-NAME /
* PROCID). A field producer is handed only a SolidSyslogHeaderField* — it
* can append PRINTUSASCII content (printable US-ASCII; any other byte,
* space included, is substituted) bounded to the field width, but cannot
* reach the raw formatter. Stack-transient, no pool (D.002). */
struct SolidSyslogHeaderField;

/* Appends up to maxLength bytes of source (stopping at a NUL terminator),
* substituting any byte outside printable US-ASCII ('!'..'~') — space
* included — with the library's substitute character. Output is further
* bounded by the field width the writer was created with. */
void SolidSyslogHeaderField_PrintUsAscii(
struct SolidSyslogHeaderField * field,
const char* source,
size_t maxLength
);

/* Appends the decimal digits of value (always printable US-ASCII), bounded
* by the field width. */
void SolidSyslogHeaderField_Uint32(struct SolidSyslogHeaderField * field, uint32_t value);

EXTERN_C_END

#endif /* SOLIDSYSLOGHEADERFIELD_H */
19 changes: 19 additions & 0 deletions Core/Interface/SolidSyslogHeaderFieldFunction.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#ifndef SOLIDSYSLOGHEADERFIELDFUNCTION_H
#define SOLIDSYSLOGHEADERFIELDFUNCTION_H

#include "ExternC.h"

EXTERN_C_BEGIN

struct SolidSyslogHeaderField;

/* Appends an RFC 5424 header-field value (HOSTNAME / APP-NAME / PROCID) into
* the field sink it is handed. The library owns the PRINTUSASCII charset
* (the sink applies it), so a callback cannot break the header framing.
* context is passed through unchanged from the config the callback was
* registered in. */
typedef void (*SolidSyslogHeaderFieldFunction)(struct SolidSyslogHeaderField* field, void* context);

EXTERN_C_END

#endif /* SOLIDSYSLOGHEADERFIELDFUNCTION_H */
14 changes: 0 additions & 14 deletions Core/Interface/SolidSyslogStringFunction.h

This file was deleted.

1 change: 1 addition & 0 deletions Core/Source/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ set(SOURCES
SolidSyslogStructuredData.c
SolidSyslogSdValue.c
SolidSyslogSdElement.c
SolidSyslogHeaderField.c
SolidSyslogTimeQualitySd.c
SolidSyslogTimeQualitySdStatic.c
SolidSyslogOriginSd.c
Expand Down
63 changes: 47 additions & 16 deletions Core/Source/SolidSyslog.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,27 +15,39 @@
#include "SolidSyslogNullSender.h"
#include "SolidSyslogNullStore.h"
#include "SolidSyslogPrivate.h"
#include "SolidSyslogHeaderFieldFunction.h"
#include "SolidSyslogSender.h"
#include "SolidSyslogStore.h"
#include "SolidSyslogStringFunction.h"
#include "SolidSyslogTimestamp.h"
#include "SolidSyslogTunables.h"

const struct SolidSyslogErrorSource SolidSyslogErrorSource = {"SolidSyslog"};

struct SolidSyslogBuffer;
struct SolidSyslogFormatter;
struct SolidSyslogHeaderField;
struct SolidSyslogSender;
struct SolidSyslogStore;
struct SolidSyslogStructuredData;

static inline void SolidSyslog_DrainBufferIntoStore(struct SolidSyslog* self);
static inline void SolidSyslog_SendOneFromStore(struct SolidSyslog* self);
static void SolidSyslog_InstallAppName(struct SolidSyslog* self, SolidSyslogStringFunction configured);
static void SolidSyslog_InstallAppName(
struct SolidSyslog* self,
SolidSyslogHeaderFieldFunction configured,
void* context
);
static void SolidSyslog_InstallBuffer(struct SolidSyslog* self, struct SolidSyslogBuffer* configured);
static void SolidSyslog_InstallClock(struct SolidSyslog* self, SolidSyslogClockFunction configured);
static void SolidSyslog_InstallHostname(struct SolidSyslog* self, SolidSyslogStringFunction configured);
static void SolidSyslog_InstallProcessId(struct SolidSyslog* self, SolidSyslogStringFunction configured);
static void SolidSyslog_InstallHostname(
struct SolidSyslog* self,
SolidSyslogHeaderFieldFunction configured,
void* context
);
static void SolidSyslog_InstallProcessId(
struct SolidSyslog* self,
SolidSyslogHeaderFieldFunction configured,
void* context
);
static void SolidSyslog_InstallSender(struct SolidSyslog* self, struct SolidSyslogSender* configured);
static void SolidSyslog_InstallStore(struct SolidSyslog* self, struct SolidSyslogStore* configured);
static void SolidSyslog_InstallStructuredData(
Expand All @@ -54,9 +66,9 @@ void SolidSyslog_Initialise(struct SolidSyslog* self, const struct SolidSyslogCo
SolidSyslog_InstallSender(self, config->Sender);
SolidSyslog_InstallStore(self, config->Store);
SolidSyslog_InstallClock(self, config->Clock);
SolidSyslog_InstallHostname(self, config->GetHostname);
SolidSyslog_InstallAppName(self, config->GetAppName);
SolidSyslog_InstallProcessId(self, config->GetProcessId);
SolidSyslog_InstallHostname(self, config->GetHostname, config->GetHostnameContext);
SolidSyslog_InstallAppName(self, config->GetAppName, config->GetAppNameContext);
SolidSyslog_InstallProcessId(self, config->GetProcessId, config->GetProcessIdContext);
SolidSyslog_InstallStructuredData(self, config->Sd, config->SdCount);
}

Expand All @@ -74,9 +86,12 @@ static void SolidSyslog_ResetToDefaults(struct SolidSyslog* self)
self->Sender = SolidSyslogNullSender_Get();
self->Store = SolidSyslogNullStore_Get();
self->Format.Clock = SolidSyslog_NullClock;
self->Format.GetHostname = SolidSyslog_NullStringFunction;
self->Format.GetAppName = SolidSyslog_NullStringFunction;
self->Format.GetProcessId = SolidSyslog_NullStringFunction;
self->Format.GetHostname = SolidSyslog_NullHeaderField;
self->Format.GetHostnameContext = NULL;
self->Format.GetAppName = SolidSyslog_NullHeaderField;
self->Format.GetAppNameContext = NULL;
self->Format.GetProcessId = SolidSyslog_NullHeaderField;
self->Format.GetProcessIdContext = NULL;
self->Format.Sd = NULL;
self->Format.SdCount = 0;
}
Expand Down Expand Up @@ -137,27 +152,42 @@ static void SolidSyslog_InstallClock(struct SolidSyslog* self, SolidSyslogClockF
}
}

static void SolidSyslog_InstallHostname(struct SolidSyslog* self, SolidSyslogStringFunction configured)
static void SolidSyslog_InstallHostname(
struct SolidSyslog* self,
SolidSyslogHeaderFieldFunction configured,
void* context
)
{
if (configured != NULL)
{
self->Format.GetHostname = configured;
self->Format.GetHostnameContext = context;
}
}

static void SolidSyslog_InstallAppName(struct SolidSyslog* self, SolidSyslogStringFunction configured)
static void SolidSyslog_InstallAppName(
struct SolidSyslog* self,
SolidSyslogHeaderFieldFunction configured,
void* context
)
{
if (configured != NULL)
{
self->Format.GetAppName = configured;
self->Format.GetAppNameContext = context;
}
}

static void SolidSyslog_InstallProcessId(struct SolidSyslog* self, SolidSyslogStringFunction configured)
static void SolidSyslog_InstallProcessId(
struct SolidSyslog* self,
SolidSyslogHeaderFieldFunction configured,
void* context
)
{
if (configured != NULL)
{
self->Format.GetProcessId = configured;
self->Format.GetProcessIdContext = context;
}
}

Expand Down Expand Up @@ -288,7 +318,8 @@ void SolidSyslog_NullClock(struct SolidSyslogTimestamp* ts)
(void) ts;
}

void SolidSyslog_NullStringFunction(struct SolidSyslogFormatter* formatter)
void SolidSyslog_NullHeaderField(struct SolidSyslogHeaderField* field, void* context)
{
(void) formatter;
(void) field;
(void) context;
}
Loading
Loading