#include "nlws.h"
#include "nlws_logger.h"
#include <libwebsockets.h>
int nlws_get_global_lwsl_level() {
int level = 0;
for (int l=0; l<LLL_COUNT; l++) {
int cur_level = 1 << l;
if (lwsl_visible(cur_level)) {
level |= cur_level;
}
}
return level;
}
void nlws_logger_on_refcount_change (struct lws_log_cx *cx, int _new) {
nlws_logger_opaque_t* opaque = cx->opaque;
PERL_CONTEXT_FROM_STRUCT(opaque);
//fprintf(stderr, "%s: refcount: %d (%d)\n", PL_phase_names[PL_phase], cx->refcount, _new);
while (_new > 0) {
SvREFCNT_inc(opaque->perlobj);
_new--;
}
while (_new < 0) {
SvREFCNT_dec(opaque->perlobj);
_new++;
}
}
void nlws_logger_emit(struct lws_log_cx *cx, int level, const char *line, size_t len) {
// Don’t send the trailing newline to the callback.
if (line[len-1] == '\n') {
len--;
}
nlws_logger_opaque_t* opaque = cx->opaque;
PERL_CONTEXT_FROM_STRUCT(opaque);
SV* args[] = {
newSViv(level),
newSVpvn(line, len),
NULL,
};
xsh_call_sv_trap_void(opaque->callback, args, LOGGER_CLASS " callback error: ");
}