+ }
+ unsigned int ll = line.length();
+ ctx_out->Encrypt(line.c_str(), result, ll, 0);
+ to64frombits((unsigned char*)result64,(unsigned char*)result,ll);
+ line = result64;
+ }
+ return this->Write(line + "\r\n");
+ }
+
+ /* Handle ERROR command */
+ bool Error(std::deque<std::string> ¶ms)
+ {
+ if (params.size() < 1)
+ return false;
+ this->Instance->SNO->WriteToSnoMask('l',"ERROR from %s: %s",(InboundServerName != "" ? InboundServerName.c_str() : myhost.c_str()),params[0].c_str());
+ /* we will return false to cause the socket to close. */
+ return false;
+ }
+
+ /** remote MOTD. leet, huh? */
+ bool Motd(std::string prefix, std::deque<std::string> ¶ms)
+ {
+ if (params.size() > 0)
+ {
+ if (this->Instance->MatchText(this->Instance->Config->ServerName, params[0]))
+ {
+ /* It's for our server */
+ string_list results;
+ userrec* source = this->Instance->FindNick(prefix);
+
+ if (source)
+ {
+ std::deque<std::string> par;
+ par.push_back(prefix);
+ par.push_back("");
+
+ if (!Instance->Config->MOTD.size())
+ {
+ par[1] = std::string("::")+Instance->Config->ServerName+" 422 "+source->nick+" :Message of the day file is missing.";
+ Utils->DoOneToOne(this->Instance->Config->ServerName, "PUSH",par, source->server);
+ return true;
+ }
+
+ par[1] = std::string("::")+Instance->Config->ServerName+" 375 "+source->nick+" :"+Instance->Config->ServerName+" message of the day";
+ Utils->DoOneToOne(this->Instance->Config->ServerName, "PUSH",par, source->server);
+
+ for (unsigned int i = 0; i < Instance->Config->MOTD.size(); i++)
+ {
+ par[1] = std::string("::")+Instance->Config->ServerName+" 372 "+source->nick+" :- "+Instance->Config->MOTD[i];
+ Utils->DoOneToOne(this->Instance->Config->ServerName, "PUSH",par, source->server);
+ }
+
+ par[1] = std::string("::")+Instance->Config->ServerName+" 376 "+source->nick+" End of message of the day.";
+ Utils->DoOneToOne(this->Instance->Config->ServerName, "PUSH",par, source->server);
+ }
+ }
+ else
+ {
+ /* Pass it on */
+ userrec* source = this->Instance->FindNick(prefix);
+ if (source)
+ Utils->DoOneToOne(prefix, "MOTD", params, params[0]);
+ }
+ }
+ return true;
+ }
+
+ /** remote ADMIN. leet, huh? */
+ bool Admin(std::string prefix, std::deque<std::string> ¶ms)
+ {
+ if (params.size() > 0)
+ {
+ if (this->Instance->MatchText(this->Instance->Config->ServerName, params[0]))
+ {
+ /* It's for our server */
+ string_list results;
+ userrec* source = this->Instance->FindNick(prefix);
+
+ if (source)
+ {
+ std::deque<std::string> par;
+ par.push_back(prefix);
+ par.push_back("");
+
+ par[1] = std::string("::")+Instance->Config->ServerName+" 256 "+source->nick+" :Administrative info for "+Instance->Config->ServerName;
+ Utils->DoOneToOne(this->Instance->Config->ServerName, "PUSH",par, source->server);
+
+ par[1] = std::string("::")+Instance->Config->ServerName+" 257 "+source->nick+" :Name - "+Instance->Config->AdminName;
+ Utils->DoOneToOne(this->Instance->Config->ServerName, "PUSH",par, source->server);
+
+ par[1] = std::string("::")+Instance->Config->ServerName+" 258 "+source->nick+" :Nickname - "+Instance->Config->AdminNick;
+ Utils->DoOneToOne(this->Instance->Config->ServerName, "PUSH",par, source->server);
+
+ par[1] = std::string("::")+Instance->Config->ServerName+" 258 "+source->nick+" :E-Mail - "+Instance->Config->AdminEmail;
+ Utils->DoOneToOne(this->Instance->Config->ServerName, "PUSH",par, source->server);