X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fusers.cpp;h=6087f4d1cd579f03739758fc4071eb2f18ad96c0;hb=af6e4d13ee931ff5a63a9ef3cae920a6b422fc50;hp=7663a63b2bbc9641b6ec35e1ccfcbd4a0c1c9729;hpb=7a672d42e4173e274ac0ee31331d41e45801facc;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/users.cpp b/src/users.cpp index 7663a63b2..6087f4d1c 100644 --- a/src/users.cpp +++ b/src/users.cpp @@ -206,7 +206,7 @@ void User::DecrementModes() User::User(InspIRCd* Instance, const std::string &uid) : ServerInstance(Instance) { - server = (char*)Instance->FindServerNamePtr(Instance->Config->ServerName); + server = Instance->FindServerNamePtr(Instance->Config->ServerName); age = ServerInstance->Time(); Penalty = 0; lastping = signon = idle_lastmsg = nping = registered = 0; @@ -985,8 +985,6 @@ void User::FullConnect() this->registered = REG_ALL; - ServerInstance->PI->Introduce(this); - FOREACH_MOD(I_OnPostConnect,OnPostConnect(this)); ServerInstance->SNO->WriteToSnoMask('c',"Client connecting on port %d: %s!%s@%s [%s] [%s]", @@ -1066,9 +1064,9 @@ int User::GetServerPort() switch (this->server_sa.sa.sa_family) { case AF_INET6: - return this->server_sa.in6.sin6_port; + return htons(this->server_sa.in6.sin6_port); case AF_INET: - return this->server_sa.in4.sin_port; + return htons(this->server_sa.in4.sin_port); } return 0; } @@ -1169,64 +1167,32 @@ const char* User::GetCIDRMask(int range) return ""; // unused, but oh well } -const char* User::GetIPString() +std::string User::GetServerIP() { - static char buf[40]; - - if (!this->cachedip.empty()) - return this->cachedip.c_str(); + int port; + std::string ip; + irc::sockets::satoap(&server_sa, ip, port); + return ip; +} - switch (this->client_sa.sa.sa_family) +const char* User::GetIPString() +{ + int port; + if (cachedip.empty()) { - case AF_INET6: - { - static char temp[41]; - - inet_ntop(client_sa.in6.sin6_family, &client_sa.in6.sin6_addr, buf, sizeof(buf)); - /* IP addresses starting with a : on irc are a Bad Thing (tm) */ - if (*buf == ':') - { - strlcpy(&temp[1], buf, sizeof(temp) - 1); - *temp = '0'; - this->cachedip = temp; - return temp; - } - - this->cachedip = buf; - return buf; - } - break; - case AF_INET: - { - inet_ntop(client_sa.in4.sin_family, &client_sa.in4.sin_addr, buf, sizeof(buf)); - this->cachedip = buf; - return buf; - } - break; - default: - break; + irc::sockets::satoap(&client_sa, cachedip, port); + /* IP addresses starting with a : on irc are a Bad Thing (tm) */ + if (cachedip.c_str()[0] == ':') + cachedip.insert(0,1,'0'); } - // Unreachable, probably - return ""; + return cachedip.c_str(); } bool User::SetClientIP(const char* sip) { this->cachedip = ""; - if (inet_pton(AF_INET, sip, &client_sa.in4.sin_addr)) - { - client_sa.in4.sin_family = AF_INET; - client_sa.in4.sin_port = 0; - return true; - } - else if (inet_pton(AF_INET6, sip, &client_sa.in6.sin6_addr)) - { - client_sa.in6.sin6_family = AF_INET6; - client_sa.in6.sin6_port = 0; - return true; - } - return false; + return irc::sockets::aptosa(sip, 0, &client_sa); } /** NOTE: We cannot pass a const reference to this method.