/*
* syslog . h
*
*
* Copyright 2015 Susi ' s Strolch
*
* For license information see projects " License.txt "
*
* part of syslog . c - client library
*
*/
# ifndef _SYSLOG_H
# define _SYSLOG_H
# ifdef __cplusplus
extern " C " {
# endif
enum syslog_state {
SYSLOG_NONE , // not initialized
SYSLOG_WAIT , // waiting for Wifi
SYSLOG_INIT , // WIFI avail, must initialize
SYSLOG_INITDONE ,
SYSLOG_DNSWAIT , // WIFI avail, init done, waiting for DNS resolve
SYSLOG_READY , // Wifi established, ready to send
SYSLOG_SENDING , // UDP package on the air
SYSLOG_SEND ,
SYSLOG_SENT ,
SYSLOG_HALTED , // heap full, discard message
SYSLOG_ERROR ,
} ;
enum syslog_priority {
SYSLOG_PRIO_EMERG , /* system is unusable */
SYSLOG_PRIO_ALERT , /* action must be taken immediately */
SYSLOG_PRIO_CRIT , /* critical conditions */
SYSLOG_PRIO_ERR , /* error conditions */
SYSLOG_PRIO_WARNING , /* warning conditions */
SYSLOG_PRIO_NOTICE , /* normal but significant condition */
SYSLOG_PRIO_INFO , /* informational */
SYSLOG_PRIO_DEBUG , /* debug-level messages */
} ;
enum syslog_facility {
SYSLOG_FAC_KERN , /* kernel messages */
SYSLOG_FAC_USER , /* random user-level messages */
SYSLOG_FAC_MAIL , /* mail system */
SYSLOG_FAC_DAEMON , /* system daemons */
SYSLOG_FAC_AUTH , /* security/authorization messages */
SYSLOG_FAC_SYSLOG , /* messages generated internally by syslogd */
SYSLOG_FAC_LPR , /* line printer subsystem */
SYSLOG_FAC_NEWS , /* network news subsystem */
SYSLOG_FAC_UUCP , /* UUCP subsystem */
SYSLOG_FAC_CRON , /* clock daemon */
SYSLOG_FAC_AUTHPRIV , /* security/authorization messages (private) */
SYSLOG_FAC_FTP , /* ftp daemon */
SYSLOG_FAC_LOCAL0 , /* reserved for local use */
SYSLOG_FAC_LOCAL1 , /* reserved for local use */
SYSLOG_FAC_LOCAL2 , /* reserved for local use */
SYSLOG_FAC_LOCAL3 , /* reserved for local use */
SYSLOG_FAC_LOCAL4 , /* reserved for local use */
SYSLOG_FAC_LOCAL5 , /* reserved for local use */
SYSLOG_FAC_LOCAL6 , /* reserved for local use */
SYSLOG_FAC_LOCAL7 , /* reserved for local use */
} ;
# define MINIMUM_HEAP_SIZE 8192
# define REG_READ(_r) (*(volatile uint32 *)(_r))
# define WDEV_NOW() REG_READ(0x3ff20c00)
// This variable disappeared from lwip in SDK 2.0...
extern uint32_t realtime_stamp ; // 1sec NTP ticker
typedef struct syslog_host_t syslog_host_t ;
struct syslog_host_t {
uint32_t min_heap_size ; // minimum allowed heap size when buffering
ip_addr_t addr ;
uint16_t port ;
} ;
// buffered syslog event - f.e. if network stack isn't up and running
typedef struct syslog_entry_t syslog_entry_t ;
struct syslog_entry_t {
syslog_entry_t * next ;
uint32_t msgid ;
uint32_t tick ;
uint16_t datagram_len ;
char datagram [ ] ;
} ;
syslog_host_t syslogserver ;
void ICACHE_FLASH_ATTR syslog_init ( char * syslog_host ) ;
void ICACHE_FLASH_ATTR syslog ( uint8_t facility , uint8_t severity , const char tag [ ] , const char message [ ] , . . . ) ;
// some convenience macros
# ifdef SYSLOG
// extern char *esp_link_version; // in user_main.c
# define LOG_DEBUG(format, ...) syslog(SYSLOG_FAC_USER, SYSLOG_PRIO_DEBUG, "esp_link", format, ## __VA_ARGS__ )
# define LOG_NOTICE(format, ...) syslog(SYSLOG_FAC_USER, SYSLOG_PRIO_NOTICE, "esp_link", format, ## __VA_ARGS__ )
# define LOG_INFO(format, ...) syslog(SYSLOG_FAC_USER, SYSLOG_PRIO_INFO, "esp_link", format, ## __VA_ARGS__ )
# define LOG_WARN(format, ...) syslog(SYSLOG_FAC_USER, SYSLOG_PRIO_WARNING, "esp_link", format, ## __VA_ARGS__ )
# define LOG_ERR(format, ...) syslog(SYSLOG_FAC_USER, SYSLOG_PRIO_ERR, "esp_link", format, ## __VA_ARGS__ )
# else
# define LOG_DEBUG(format, ...) do { } while(0)
# define LOG_NOTICE(format, ...) do { } while(0)
# define LOG_WARN(format, ...) do { } while(0)
# define LOG_INFO(format, ...) do { } while(0)
# define LOG_ERR(format, ...) do { } while(0)
# endif
# ifdef __cplusplus
}
# endif
# endif /* _SYSLOG_H */