Core¶
Core/ is the guts of SolidSyslog: it implements the syslog protocol and manages the assembly, buffering, storage and sending of log messages.
Core/ depends on nothing external: always compiled, typically as a library. It holds the facade you call, the pipeline that formats a record and drains it, and portable implementations for several roles. Where access to a network stack, encryption, filesystem or OS is required, an interface is declared. Platform components that satisfy those interfaces let Core build with no platform dependencies.
Where a platform exists to reach your hardware, Core exists to be the same everywhere.
The facade and every role link through to their API page; the platform-adapter band links to Platforms.
The facade¶
| Header | Provides |
|---|---|
SolidSyslog.h |
SolidSyslog_Log, SolidSyslog_LogWithSd, SolidSyslog_Service — the whole runtime surface |
SolidSyslogConfig.h |
SolidSyslog_Create, SolidSyslog_Destroy, and the SolidSyslogConfig struct you fill |
What it ships¶
Portable role implementations — no platform required:
| Class | Role |
|---|---|
SolidSyslogPassthroughBuffer |
Buffer — sends inline, no queue |
SolidSyslogCircularBuffer |
Buffer — ring over caller-supplied memory, mutex injected |
SolidSyslogUdpSender |
Sender — RFC 5426 over a Datagram |
SolidSyslogStreamSender |
Sender — RFC 6587 octet framing over any Stream |
SolidSyslogSwitchingSender |
Sender — delegates to one of several inners |
SolidSyslogBlockStore |
Store — store-and-forward over rotating blocks |
SolidSyslogFileBlockDevice |
BlockDevice — sequence-numbered files over a File |
SolidSyslogCrc16Policy |
SecurityPolicy — CRC-16 integrity (accidental corruption, not tamper) |
SolidSyslogMetaSd |
StructuredData — sequenceId, sysUpTime, language |
SolidSyslogTimeQualitySd |
StructuredData — tzKnown, isSynced, syncAccuracy |
SolidSyslogOriginSd |
StructuredData — software, swVersion, enterpriseId, ip |
Every role also has a Null — SolidSyslogNull<Role>_Get() —
whose methods are safe no-ops. That is what an unfilled slot resolves to, and
what a _Create returns when its pool is exhausted, so nothing dangles and
nothing needs a NULL guard. See Roles.
Cross-cutting¶
| Header | Provides |
|---|---|
SolidSyslogError.h |
install a handler for library-internal errors; the default is a silent no-op |
SolidSyslogConfigLock.h |
inject a lock pair around the pool slot walks; no-ops by default, single-task safe |
SolidSyslogTunablesDefaults.h |
every compile-time limit, each #ifndef-guarded so you override without editing the library |
Requirements¶
A C99 compiler, and nothing else. No dynamic memory — every stateful class lives in a library-internal static pool — and no OS, network or filesystem dependency. What it cannot do alone, it delegates to a role for a platform to fill.