void SingleIRCNetworkPlugin::handleLoginRequest(const std::string &user, const std::string &legacyName, const std::string &password) { // legacy name is users nickname if (m_sessions[user] != NULL) { LOG4CXX_WARN(logger, user << ": Already logged in."); return; } LOG4CXX_INFO(logger, user << ": Connecting " << m_server << " as " << legacyName); MyIrcSession *session = new MyIrcSession(user, this); session->setUserName(FROM_UTF8(legacyName)); session->setNickName(FROM_UTF8(legacyName)); session->setRealName(FROM_UTF8(legacyName)); session->setHost(FROM_UTF8(m_server)); session->setPort(6667); session->setEncoding( "utf-8" ); if (!password.empty()) { std::string identify = m_identify; boost::replace_all(identify, "$password", password); boost::replace_all(identify, "$name", legacyName); session->setIdentify(identify); } session->open(); m_sessions[user] = session; }
void IRCNetworkPlugin::handleJoinRoomRequest(const std::string &user, const std::string &room, const std::string &nickname, const std::string &password) { std::cout << "JOIN\n"; std::string r = room; std::string u = user; if (!CONFIG_BOOL(config, "service.server_mode")) { u = user + room.substr(room.find("@") + 1); r = room.substr(0, room.find("@")); } if (m_sessions[u] == NULL) { // in gateway mode we want to login this user to network according to legacyName if (room.find("@") != std::string::npos) { // suffix is %irc.freenode.net to let MyIrcSession return #room%irc.freenode.net MyIrcSession *session = new MyIrcSession(user, this, room.substr(room.find("@"))); session->setNickName(FROM_UTF8(nickname)); session->setHost(FROM_UTF8(room.substr(room.find("@") + 1))); session->setPort(6667); session->open(); std::cout << "CONNECTING IRC NETWORK " << room.substr(room.find("@") + 1) << "\n"; std::cout << "SUFFIX " << room.substr(room.find("@")) << "\n"; m_sessions[u] = session; } else { return; } } std::cout << "JOINING " << r << "\n"; m_sessions[u]->addAutoJoinChannel(r); m_sessions[u]->sendCommand(IrcCommand::createJoin(FROM_UTF8(r), FROM_UTF8(password))); m_sessions[u]->rooms += 1; // update nickname, because we have nickname per session, no nickname per room. handleRoomNicknameChanged(user, r, TO_UTF8(m_sessions[u]->nickName())); }
void IRCNetworkPlugin::handleLoginRequest(const std::string &user, const std::string &legacyName, const std::string &password) { // Server is in server-mode, so user is JID of server when we want to connect if (CONFIG_BOOL(config, "service.server_mode")) { MyIrcSession *session = new MyIrcSession(user, this); std::string h = user.substr(0, user.find("@")); session->setNickName(FROM_UTF8(h.substr(0, h.find("%")))); session->setHost(FROM_UTF8(h.substr(h.find("%") + 1))); session->setPort(6667); session->open(); std::cout << "CONNECTING IRC NETWORK " << h.substr(h.find("%") + 1) << "\n"; m_sessions[user] = session; } else { handleConnected(user); } }
MyIrcSession *IRCNetworkPlugin::createSession(const std::string &user, const std::string &hostname, const std::string &nickname, const std::string &password, const std::string &suffix) { MyIrcSession *session = new MyIrcSession(user, this, suffix); session->setUserName(FROM_UTF8(nickname)); session->setNickName(FROM_UTF8(nickname)); session->setRealName(FROM_UTF8(nickname)); session->setHost(FROM_UTF8(hostname)); session->setPort(6667); // session->setEncoding("UTF8"); if (!password.empty()) { std::string identify = m_identify; boost::replace_all(identify, "$password", password); boost::replace_all(identify, "$name", nickname); session->setIdentify(identify); } LOG4CXX_INFO(logger, user << ": Connecting " << hostname << " as " << nickname << ", suffix=" << suffix); session->open(); return session; }