+ void OnWebIRCAuth(LocalUser* user, const WebIRC::FlagMap* flags) CXX11_OVERRIDE
+ {
+ // We are only interested in connection flags. If none have been
+ // given then we have nothing to do.
+ if (!flags)
+ return;
+
+ WebIRC::FlagMap::const_iterator cport = flags->find("remote-port");
+ if (cport != flags->end())
+ {
+ // If we can't parse the port then just give up.
+ uint16_t port = ConvToNum<uint16_t>(cport->second);
+ if (port)
+ {
+ switch (user->client_sa.family())
+ {
+ case AF_INET:
+ user->client_sa.in4.sin_port = htons(port);
+ break;
+
+ case AF_INET6:
+ user->client_sa.in6.sin6_port = htons(port);
+ break;
+
+ default:
+ // If we have reached this point then we have encountered a bug.
+ ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "BUG: OnWebIRCAuth(%s): socket type %d is unknown!",
+ user->uuid.c_str(), user->client_sa.family());
+ return;
+ }
+ }
+ }
+
+ WebIRC::FlagMap::const_iterator sport = flags->find("local-port");
+ if (sport != flags->end())
+ {
+ // If we can't parse the port then just give up.
+ uint16_t port = ConvToNum<uint16_t>(sport->second);
+ if (port)
+ {
+ switch (user->server_sa.family())
+ {
+ case AF_INET:
+ user->server_sa.in4.sin_port = htons(port);
+ break;
+
+ case AF_INET6:
+ user->server_sa.in6.sin6_port = htons(port);
+ break;
+
+ default:
+ // If we have reached this point then we have encountered a bug.
+ ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "BUG: OnWebIRCAuth(%s): socket type %d is unknown!",
+ user->uuid.c_str(), user->server_sa.family());
+ return;
+ }
+ }
+ }
+ }
+