/* * ZeroTier One - Network Virtualization Everywhere * Copyright (C) 2011-2015 ZeroTier, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . * * -- * * ZeroTier may be used and distributed under the terms of the GPLv3, which * are available at: http://www.gnu.org/licenses/gpl-3.0.html * * If you would like to embed ZeroTier into a commercial application or * redistribute it in a modified binary form, please contact ZeroTier Networks * LLC. Start here: http://www.zerotier.com/ */ #include #include #include #include #include #include #include #include #include #include #include #include "common.h" void dwr(const char *fmt, ...); /* defined in intercept and service */ extern FILE* logfile; extern char* logfilename; //extern flog = -1; extern pthread_mutex_t loglock; #ifdef NETCON_SERVICE void dwr(int, const char *fmt, ...); void dwr(const char *fmt, ...) { int saveerr; va_list ap; va_start(ap, fmt); saveerr = errno; dwr(-1, fmt, ap); errno = saveerr; va_end(ap); } void dwr(int pid, const char *fmt, ...) #endif #ifdef NETCON_INTERCEPT void dwr(const char *fmt, ...) #endif { va_list ap; int saveerr; char timestring[20]; time_t timestamp; timestamp = time(NULL); strftime(timestring, sizeof(timestring), "%H:%M:%S", localtime(×tamp)); if(logfile) fprintf(logfile, "%s ", timestring); fprintf(stderr, "%s ", timestring); #ifdef NETCON_SERVICE if(ns != NULL) { size_t num_intercepts = ns->intercepts.size(); size_t num_connections = ns->connections.size(); if(logfile) fprintf(logfile, "[i/c/tid=%3lu|%3lu|%7d]", num_intercepts, num_connections, pid); fprintf(stderr, "[i/c/tid=%3lu|%3lu|%7d]", num_intercepts, num_connections, pid); } else { if(logfile) fprintf(logfile, "[i/c/tid=%3d|%3d|%7d]", 0, 0, -1); fprintf(stderr, "[i/c/tid=%3d|%3d|%7d]", 0, 0, -1); } #endif #ifdef NETCON_INTERCEPT //pthread_mutex_lock(&loglock); int pid = getpid(); if(logfile) fprintf(logfile, "[tid=%7d]", pid); fprintf(stderr, "[tid=%7d]", pid); //pthread_mutex_unlock(&loglock); #endif if(logfile) fputs(" ", logfile); fputs(" ", stderr); /* logfile */ va_start(ap, fmt); saveerr = errno; if(logfile){ vfprintf(logfile, fmt, ap); fflush(logfile); } va_end(ap); /* console */ va_start(ap, fmt); vfprintf(stderr, fmt, ap); fflush(stderr); errno = saveerr; va_end(ap); }