summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-04-04 11:53:03 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-04-07 16:32:07 +0800
commit4c904905f5f0667786d4c4b32d150b3d4328cfc2 (patch)
treea397604070be947ea051f0db3555c34e604686df /src
parent48c6f2384592c42a0fdbb6e420c77f6e10209f24 (diff)
session: use std::string for m_ip instead of c char
Diffstat (limited to 'src')
-rw-r--r--src/commandHandler.cpp4
-rw-r--r--src/commandHandler.hpp2
-rw-r--r--src/session.cpp8
-rw-r--r--src/session.hpp4
-rw-r--r--src/sessionManager.cpp4
-rw-r--r--src/sessionManager.hpp2
6 files changed, 13 insertions, 11 deletions
diff --git a/src/commandHandler.cpp b/src/commandHandler.cpp
index 6340625..7c04f68 100644
--- a/src/commandHandler.cpp
+++ b/src/commandHandler.cpp
@@ -61,7 +61,7 @@ CCommandHandler::SResult CCommandHandler::newCommand(const std::string &command,
return exeCommand(*getCommand(command), args);
}
-void CCommandHandler::handleCommand(std::string input, const char ip[INET_ADDRSTRLEN]) const {
+void CCommandHandler::handleCommand(std::string input, const std::string &ip) const {
input = input.substr(1);
std::string command;
@@ -84,7 +84,7 @@ void CCommandHandler::handleCommand(std::string input, const char ip[INET_ADDRST
std::function<void(eFormatType, const std::string &)> outputter = [](eFormatType type, const std::string &msg) { log(type, "{}", msg); };
- if (ip != nullptr)
+ if (!ip.empty())
if (auto session = g_pSessionManager->getByIp(ip))
outputter = [session](eFormatType, const std::string &msg) { session->write(msg); };
diff --git a/src/commandHandler.hpp b/src/commandHandler.hpp
index 8d97fd5..a69011e 100644
--- a/src/commandHandler.hpp
+++ b/src/commandHandler.hpp
@@ -33,7 +33,7 @@ class CCommandHandler {
// return false if command struct is invalid
bool registerCommand(const SCommand &command);
SResult newCommand(const std::string &command, const std::string &args) const;
- void handleCommand(std::string input, const char ip[INET_ADDRSTRLEN] = {}) const;
+ void handleCommand(std::string input, const std::string &ip = {}) const;
template <typename T>
struct SMakeCommandArgs {
diff --git a/src/session.cpp b/src/session.cpp
index 36c2c6f..50f55bb 100644
--- a/src/session.cpp
+++ b/src/session.cpp
@@ -17,9 +17,11 @@ CSession::CSession()
if (!m_sockfd.isValid())
throw std::runtime_error("session: Failed to create socket");
- inet_ntop(AF_INET, &m_addr.sin_addr, m_ip, INET_ADDRSTRLEN);
+ m_ip.resize(INET_ADDRSTRLEN);
+ inet_ntop(AF_INET, &m_addr.sin_addr, &m_ip[0], INET_ADDRSTRLEN);
+ m_ip.resize(strlen(m_ip.c_str()));
m_port = ntohs(m_addr.sin_port);
- m_isAdmin = std::ranges::any_of(m_adminIps, [this](const char *ip) { return strcmp(ip, m_ip) == 0; });
+ m_isAdmin = std::ranges::any_of(m_adminIps, [this](const char *ip) { return m_ip == ip; });
log(LOG, "Client {} connected on port {}", m_ip, m_port);
log(TRACE, "session: initialized");
@@ -260,7 +262,7 @@ const std::string &CSession::getName() const {
return m_name;
}
-const char *CSession::getIp() const {
+const std::string &CSession::getIp() const {
return m_ip;
}
diff --git a/src/session.hpp b/src/session.hpp
index 8aee414..65bef68 100644
--- a/src/session.hpp
+++ b/src/session.hpp
@@ -23,7 +23,7 @@ class CSession {
};
const std::string &getName() const;
- const char *getIp() const;
+ const std::string &getIp() const;
void setSelf(std::pair<std::jthread, std::shared_ptr<CSession>> *self);
std::unique_ptr<SRecvData> read();
@@ -57,7 +57,7 @@ class CSession {
sockaddr_in m_addr;
socklen_t m_addrLen = sizeof(m_addr);
std::string m_name;
- char m_ip[INET_ADDRSTRLEN];
+ std::string m_ip;
int m_port;
bool m_isAdmin = false;
diff --git a/src/sessionManager.cpp b/src/sessionManager.cpp
index 911ec60..b81aeaf 100644
--- a/src/sessionManager.cpp
+++ b/src/sessionManager.cpp
@@ -79,8 +79,8 @@ CSession *CSessionManager::getByName(const std::string &name) const {
return it != m_vSessions.end() ? it->second.get() : nullptr;
}
-CSession *CSessionManager::getByIp(const char m_ip[INET_ADDRSTRLEN]) const {
- auto it = std::ranges::find_if(m_vSessions, [&m_ip](const auto &s) { log(LOG, s.second->m_ip); return strcmp(s.second->m_ip, m_ip) == 0; });
+CSession *CSessionManager::getByIp(const std::string &ip) const {
+ auto it = std::ranges::find_if(m_vSessions, [&ip](const auto &s) { log(LOG, s.second->m_ip); return s.second->m_ip == ip; });
return it != m_vSessions.end() ? it->second.get() : nullptr;
}
diff --git a/src/sessionManager.hpp b/src/sessionManager.hpp
index 9739918..8e02a7d 100644
--- a/src/sessionManager.hpp
+++ b/src/sessionManager.hpp
@@ -24,7 +24,7 @@ class CSessionManager {
void shutdownSessions();
CSession *getByName(const std::string &name) const;
- CSession *getByIp(const char m_ip[INET_ADDRSTRLEN]) const;
+ CSession *getByIp(const std::string &ip) const;
std::vector<std::shared_ptr<CSession>> getSessions() const;
private: