Fle server & Query server improvements
This commit is contained in:
@@ -212,6 +212,17 @@ InstanceHandler::~InstanceHandler() {
|
||||
tick_manager = nullptr;
|
||||
}
|
||||
|
||||
inline string strip(std::string message) {
|
||||
while(!message.empty()) {
|
||||
if(message[0] == ' ')
|
||||
message = message.substr(1);
|
||||
else if(message[message.length() - 1] == ' ')
|
||||
message = message.substr(0, message.length() - 1);
|
||||
else break;
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
inline sockaddr_in* resolveAddress(const string& host, uint16_t port) {
|
||||
hostent* record = gethostbyname(host.c_str());
|
||||
if (!record) {
|
||||
@@ -225,12 +236,24 @@ inline sockaddr_in* resolveAddress(const string& host, uint16_t port) {
|
||||
return addr;
|
||||
}
|
||||
|
||||
inline vector<string> split_hosts(const std::string& message, char delimiter) {
|
||||
vector<string> result;
|
||||
size_t found, index = 0;
|
||||
do {
|
||||
found = message.find(delimiter, index);
|
||||
result.push_back(strip(message.substr(index, found - index)));
|
||||
index = found + 1;
|
||||
} while(index != 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
bool InstanceHandler::startInstance() {
|
||||
if (this->active)
|
||||
return false;
|
||||
active = true;
|
||||
this->web_list->enabled = ts::config::server::enable_teamspeak_weblist;
|
||||
|
||||
string errorMessage;
|
||||
this->sslMgr = new ssl::SSLManager();
|
||||
if(!this->sslMgr->initialize()) {
|
||||
logCritical("Failed to initialize ssl manager.");
|
||||
@@ -243,21 +266,32 @@ bool InstanceHandler::startInstance() {
|
||||
return false;
|
||||
}
|
||||
|
||||
//Startup file server
|
||||
sockaddr_in *fAddr = resolveAddress(this->properties()[property::SERVERINSTANCE_FILETRANSFER_HOST].as<string>(), this->properties()[property::SERVERINSTANCE_FILETRANSFER_PORT].as<uint16_t>());
|
||||
if (!fAddr) {
|
||||
logCritical(LOG_FT, "Could not resolve file server host");
|
||||
return false;
|
||||
}
|
||||
logMessage(LOG_FT, "Starting server on {}:{}", inet_ntoa(fAddr->sin_addr), ntohs(fAddr->sin_port));
|
||||
|
||||
fileServer = new ts::server::FileServer();
|
||||
if (!fileServer->start(*fAddr)) {
|
||||
logCritical(LOG_FT, "Failed to start file server.");
|
||||
delete fAddr;
|
||||
return false;
|
||||
{
|
||||
auto bindings_string = this->properties()[property::SERVERINSTANCE_FILETRANSFER_HOST].as<string>();
|
||||
auto port = this->properties()[property::SERVERINSTANCE_FILETRANSFER_PORT].as<uint16_t>();
|
||||
auto ft_bindings = net::resolve_bindings(bindings_string, port);
|
||||
deque<shared_ptr<FileServer::Binding>> bindings;
|
||||
|
||||
for(auto& binding : ft_bindings) {
|
||||
if(!get<2>(binding).empty()) {
|
||||
logError(LOG_FT, "Failed to resolve binding for {}: {}", get<0>(binding), get<2>(binding));
|
||||
continue;
|
||||
}
|
||||
auto entry = make_shared<FileServer::Binding>();
|
||||
memcpy(&entry->address, &get<1>(binding), sizeof(sockaddr_storage));
|
||||
|
||||
entry->file_descriptor = -1;
|
||||
entry->event_accept = nullptr;
|
||||
bindings.push_back(entry);
|
||||
}
|
||||
|
||||
logMessage(LOG_FT, "Starting server on {}:{}", bindings_string, port);
|
||||
if(!fileServer->start(bindings, errorMessage)) {
|
||||
logCritical(LOG_FT, "Failed to start server: {}", errorMessage);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
delete fAddr;
|
||||
|
||||
if(config::query::sslMode > 0) {
|
||||
string error;
|
||||
@@ -271,7 +305,6 @@ bool InstanceHandler::startInstance() {
|
||||
}
|
||||
}
|
||||
|
||||
string errorMessage;
|
||||
queryServer = new ts::server::QueryServer(this->getSql());
|
||||
{
|
||||
auto server_query = queryServer->find_query_account_by_name("serveradmin");
|
||||
@@ -288,18 +321,32 @@ bool InstanceHandler::startInstance() {
|
||||
}
|
||||
}
|
||||
}
|
||||
sockaddr_in *qAddr = resolveAddress(this->properties()[property::SERVERINSTANCE_QUERY_HOST].as<string>(), this->properties()[property::SERVERINSTANCE_QUERY_PORT].as<uint16_t>());
|
||||
if (!qAddr) {
|
||||
logCritical(LOG_QUERY, "Could not resolve query server host");
|
||||
return false;
|
||||
|
||||
{
|
||||
auto query_bindings_string = this->properties()[property::SERVERINSTANCE_QUERY_HOST].as<string>();
|
||||
auto query_port = this->properties()[property::SERVERINSTANCE_QUERY_PORT].as<uint16_t>();
|
||||
auto query_bindings = net::resolve_bindings(query_bindings_string, query_port);
|
||||
deque<shared_ptr<QueryServer::Binding>> bindings;
|
||||
|
||||
for(auto& binding : query_bindings) {
|
||||
if(!get<2>(binding).empty()) {
|
||||
logError(LOG_QUERY, "Failed to resolve binding for {}: {}", get<0>(binding), get<2>(binding));
|
||||
continue;
|
||||
}
|
||||
auto entry = make_shared<QueryServer::Binding>();
|
||||
memcpy(&entry->address, &get<1>(binding), sizeof(sockaddr_storage));
|
||||
|
||||
entry->file_descriptor = -1;
|
||||
entry->event_accept = nullptr;
|
||||
bindings.push_back(entry);
|
||||
}
|
||||
|
||||
logMessage(LOG_QUERY, "Starting server on {}:{}", query_bindings_string, query_port);
|
||||
if(!queryServer->start(bindings, errorMessage)) {
|
||||
logCritical(LOG_QUERY, "Failed to start query server: {}", errorMessage);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
logMessage(LOG_QUERY, "Starting server on {}:{}", inet_ntoa(qAddr->sin_addr), ntohs(qAddr->sin_port));
|
||||
if (!queryServer->start(*qAddr, errorMessage)) {
|
||||
logCritical(LOG_QUERY, "Could not start Query server.\nMessage: " + errorMessage);
|
||||
delete qAddr;
|
||||
return false;
|
||||
}
|
||||
delete qAddr;
|
||||
|
||||
#ifdef COMPILE_WEB_CLIENT
|
||||
if(config::web::activated) {
|
||||
|
||||
Reference in New Issue
Block a user