mirror of
				https://github.com/ShaYmez/P25Clients.git
				synced 2025-11-03 20:50:22 -05:00 
			
		
		
		
	Merge branch 'master' into IPv6
This commit is contained in:
		
						commit
						f07dae7ee4
					
				@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 *   Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
 | 
					 *   Copyright (C) 2015,2016,2020 by Jonathan Naylor G4KLX
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *   This program is free software; you can redistribute it and/or modify
 | 
					 *   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
 | 
					 *   it under the terms of the GNU General Public License as published by
 | 
				
			||||||
@ -22,6 +22,7 @@
 | 
				
			|||||||
#include <Windows.h>
 | 
					#include <Windows.h>
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#include <sys/time.h>
 | 
					#include <sys/time.h>
 | 
				
			||||||
 | 
					#include <unistd.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <cstdio>
 | 
					#include <cstdio>
 | 
				
			||||||
@ -36,6 +37,7 @@ static std::string m_filePath;
 | 
				
			|||||||
static std::string m_fileRoot;
 | 
					static std::string m_fileRoot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static FILE* m_fpLog = NULL;
 | 
					static FILE* m_fpLog = NULL;
 | 
				
			||||||
 | 
					static bool m_daemon = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static unsigned int m_displayLevel = 2U;
 | 
					static unsigned int m_displayLevel = 2U;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -45,6 +47,8 @@ static char LEVELS[] = " DMIWEF";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static bool LogOpen()
 | 
					static bool LogOpen()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						bool status = false;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	if (m_fileLevel == 0U)
 | 
						if (m_fileLevel == 0U)
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -68,18 +72,29 @@ static bool LogOpen()
 | 
				
			|||||||
	::sprintf(filename, "%s/%s-%04d-%02d-%02d.log", m_filePath.c_str(), m_fileRoot.c_str(), tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday);
 | 
						::sprintf(filename, "%s/%s-%04d-%02d-%02d.log", m_filePath.c_str(), m_fileRoot.c_str(), tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m_fpLog = ::fopen(filename, "a+t");
 | 
						if ((m_fpLog = ::fopen(filename, "a+t")) != NULL)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							status = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if !defined(_WIN32) && !defined(_WIN64)
 | 
				
			||||||
 | 
							if (m_daemon)
 | 
				
			||||||
 | 
								dup2(fileno(m_fpLog), fileno(stderr));
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	m_tm = *tm;
 | 
						m_tm = *tm;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return m_fpLog != NULL;
 | 
						return status;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool LogInitialise(const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel)
 | 
					bool LogInitialise(bool daemon, const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	m_filePath     = filePath;
 | 
						m_filePath     = filePath;
 | 
				
			||||||
	m_fileRoot     = fileRoot;
 | 
						m_fileRoot     = fileRoot;
 | 
				
			||||||
	m_fileLevel    = fileLevel;
 | 
						m_fileLevel    = fileLevel;
 | 
				
			||||||
	m_displayLevel = displayLevel;
 | 
						m_displayLevel = displayLevel;
 | 
				
			||||||
 | 
						m_daemon       = daemon;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ::LogOpen();
 | 
						return ::LogOpen();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -105,7 +120,7 @@ void Log(unsigned int level, const char* fmt, ...)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	struct tm* tm = ::gmtime(&now.tv_sec);
 | 
						struct tm* tm = ::gmtime(&now.tv_sec);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	::sprintf(buffer, "%c: %04d-%02d-%02d %02d:%02d:%02d.%03lu ", LEVELS[level], tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, now.tv_usec / 1000U);
 | 
						::sprintf(buffer, "%c: %04d-%02d-%02d %02d:%02d:%02d.%03ld ", LEVELS[level], tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, now.tv_usec / 1000L);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	va_list vl;
 | 
						va_list vl;
 | 
				
			||||||
@ -134,3 +149,4 @@ void Log(unsigned int level, const char* fmt, ...)
 | 
				
			|||||||
		exit(1);
 | 
							exit(1);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -30,7 +30,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
extern void Log(unsigned int level, const char* fmt, ...);
 | 
					extern void Log(unsigned int level, const char* fmt, ...);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern bool LogInitialise(const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel);
 | 
					extern bool LogInitialise(bool daemon, const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel);
 | 
				
			||||||
extern void LogFinalise();
 | 
					extern void LogFinalise();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -156,7 +156,11 @@ void CP25Gateway::run()
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = ::LogInitialise(m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel());
 | 
					#if !defined(_WIN32) && !defined(_WIN64)
 | 
				
			||||||
 | 
					        ret = ::LogInitialise(m_daemon, m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel());
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					        ret = ::LogInitialise(false, m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel());
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	if (!ret) {
 | 
						if (!ret) {
 | 
				
			||||||
		::fprintf(stderr, "P25Gateway: unable to open the log file\n");
 | 
							::fprintf(stderr, "P25Gateway: unable to open the log file\n");
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
				
			|||||||
@ -42,6 +42,9 @@
 | 
				
			|||||||
# 2140 P25 Reflector BM DMR+ Multi 
 | 
					# 2140 P25 Reflector BM DMR+ Multi 
 | 
				
			||||||
2140	164.132.96.157	41000
 | 
					2140	164.132.96.157	41000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 2231 IT Sardinia Is. - Multimode - https://is0.org
 | 
				
			||||||
 | 
					2231	p25.is0.org			41000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 2263 Bucharest YO3 P25 Network
 | 
					# 2263 Bucharest YO3 P25 Network
 | 
				
			||||||
2263	p25.dstar-yo.ro	41000
 | 
					2263	p25.dstar-yo.ro	41000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 *   Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
 | 
					 *   Copyright (C) 2015,2016,2020 by Jonathan Naylor G4KLX
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *   This program is free software; you can redistribute it and/or modify
 | 
					 *   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
 | 
					 *   it under the terms of the GNU General Public License as published by
 | 
				
			||||||
@ -95,7 +95,13 @@ void* CThread::helper(void* arg)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void CThread::sleep(unsigned int ms)
 | 
					void CThread::sleep(unsigned int ms)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	::usleep(ms * 1000);
 | 
						struct timespec ts;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ts.tv_sec  = ms / 1000U;
 | 
				
			||||||
 | 
						ts.tv_nsec = (ms % 1000U) * 1000000U;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						::nanosleep(&ts, NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 *   Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
 | 
					 *   Copyright (C) 2015,2016,2020 by Jonathan Naylor G4KLX
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *   This program is free software; you can redistribute it and/or modify
 | 
					 *   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
 | 
					 *   it under the terms of the GNU General Public License as published by
 | 
				
			||||||
@ -22,6 +22,7 @@
 | 
				
			|||||||
#include <Windows.h>
 | 
					#include <Windows.h>
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
#include <sys/time.h>
 | 
					#include <sys/time.h>
 | 
				
			||||||
 | 
					#include <unistd.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <cstdio>
 | 
					#include <cstdio>
 | 
				
			||||||
@ -36,6 +37,7 @@ static std::string m_filePath;
 | 
				
			|||||||
static std::string m_fileRoot;
 | 
					static std::string m_fileRoot;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static FILE* m_fpLog = NULL;
 | 
					static FILE* m_fpLog = NULL;
 | 
				
			||||||
 | 
					static bool m_daemon = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static unsigned int m_displayLevel = 2U;
 | 
					static unsigned int m_displayLevel = 2U;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -45,6 +47,8 @@ static char LEVELS[] = " DMIWEF";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static bool LogOpen()
 | 
					static bool LogOpen()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						bool status = false;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	if (m_fileLevel == 0U)
 | 
						if (m_fileLevel == 0U)
 | 
				
			||||||
		return true;
 | 
							return true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -68,18 +72,29 @@ static bool LogOpen()
 | 
				
			|||||||
	::sprintf(filename, "%s/%s-%04d-%02d-%02d.log", m_filePath.c_str(), m_fileRoot.c_str(), tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday);
 | 
						::sprintf(filename, "%s/%s-%04d-%02d-%02d.log", m_filePath.c_str(), m_fileRoot.c_str(), tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m_fpLog = ::fopen(filename, "a+t");
 | 
						if ((m_fpLog = ::fopen(filename, "a+t")) != NULL)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							status = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if !defined(_WIN32) && !defined(_WIN64)
 | 
				
			||||||
 | 
							if (m_daemon)
 | 
				
			||||||
 | 
								dup2(fileno(m_fpLog), fileno(stderr));
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	m_tm = *tm;
 | 
						m_tm = *tm;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return m_fpLog != NULL;
 | 
						return status;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool LogInitialise(const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel)
 | 
					bool LogInitialise(bool daemon, const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	m_filePath     = filePath;
 | 
						m_filePath     = filePath;
 | 
				
			||||||
	m_fileRoot     = fileRoot;
 | 
						m_fileRoot     = fileRoot;
 | 
				
			||||||
	m_fileLevel    = fileLevel;
 | 
						m_fileLevel    = fileLevel;
 | 
				
			||||||
	m_displayLevel = displayLevel;
 | 
						m_displayLevel = displayLevel;
 | 
				
			||||||
 | 
						m_daemon       = daemon;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ::LogOpen();
 | 
						return ::LogOpen();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -105,7 +120,7 @@ void Log(unsigned int level, const char* fmt, ...)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	struct tm* tm = ::gmtime(&now.tv_sec);
 | 
						struct tm* tm = ::gmtime(&now.tv_sec);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	::sprintf(buffer, "%c: %04d-%02d-%02d %02d:%02d:%02d.%03lu ", LEVELS[level], tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, now.tv_usec / 1000U);
 | 
						::sprintf(buffer, "%c: %04d-%02d-%02d %02d:%02d:%02d.%03ld ", LEVELS[level], tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, now.tv_usec / 1000L);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	va_list vl;
 | 
						va_list vl;
 | 
				
			||||||
@ -134,3 +149,4 @@ void Log(unsigned int level, const char* fmt, ...)
 | 
				
			|||||||
		exit(1);
 | 
							exit(1);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -30,7 +30,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
extern void Log(unsigned int level, const char* fmt, ...);
 | 
					extern void Log(unsigned int level, const char* fmt, ...);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern bool LogInitialise(const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel);
 | 
					extern bool LogInitialise(bool daemon, const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel);
 | 
				
			||||||
extern void LogFinalise();
 | 
					extern void LogFinalise();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
@ -153,7 +153,11 @@ void CP25Reflector::run()
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = ::LogInitialise(m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel());
 | 
					#if !defined(_WIN32) && !defined(_WIN64)
 | 
				
			||||||
 | 
					        ret = ::LogInitialise(m_daemon, m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel());
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					        ret = ::LogInitialise(false, m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel());
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
	if (!ret) {
 | 
						if (!ret) {
 | 
				
			||||||
		::fprintf(stderr, "P25Gateway: unable to open the log file\n");
 | 
							::fprintf(stderr, "P25Gateway: unable to open the log file\n");
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,5 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 *   Copyright (C) 2015,2016 by Jonathan Naylor G4KLX
 | 
					 *   Copyright (C) 2015,2016,2020 by Jonathan Naylor G4KLX
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 *   This program is free software; you can redistribute it and/or modify
 | 
					 *   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
 | 
					 *   it under the terms of the GNU General Public License as published by
 | 
				
			||||||
@ -95,7 +95,13 @@ void* CThread::helper(void* arg)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void CThread::sleep(unsigned int ms)
 | 
					void CThread::sleep(unsigned int ms)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	::usleep(ms * 1000);
 | 
						struct timespec ts;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ts.tv_sec  = ms / 1000U;
 | 
				
			||||||
 | 
						ts.tv_nsec = (ms % 1000U) * 1000000U;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						::nanosleep(&ts, NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user