+ virtual void OnUserConnect(userrec* user)
+ {
+ char agestr[MAXBUF];
+ if (std::string(user->server) == Srv->GetServerName())
+ {
+ log(DEBUG,"**** User on %s CONNECTS: %s",user->server,user->nick);
+ std::deque<std::string> params;
+ snprintf(agestr,MAXBUF,"%lu",(unsigned long)user->age);
+ params.clear();
+ params.push_back(agestr);
+ params.push_back(user->nick);
+ params.push_back(user->host);
+ params.push_back(user->dhost);
+ params.push_back(user->ident);
+ params.push_back("+"+std::string(user->modes));
+ params.push_back(user->ip);
+ params.push_back(":"+std::string(user->fullname));
+ DoOneToMany(Srv->GetServerName(),"NICK",params);
+ }
+ }
+
+ virtual void OnUserQuit(userrec* user, std::string reason)
+ {
+ if (std::string(user->server) == Srv->GetServerName())
+ {
+ log(DEBUG,"**** User on %s QUITS: %s",user->server,user->nick);
+ std::deque<std::string> params;
+ params.push_back(":"+reason);
+ DoOneToMany(user->nick,"QUIT",params);
+ }
+ }
+
+ virtual void OnUserPostNick(userrec* user, std::string oldnick)
+ {
+ if (std::string(user->server) == Srv->GetServerName())
+ {
+ log(DEBUG,"**** User on %s changes NICK: %s",user->server,user->nick);
+ std::deque<std::string> params;
+ params.push_back(user->nick);
+ DoOneToMany(oldnick,"NICK",params);
+ }
+ }
+
+ virtual void OnUserKick(userrec* source, userrec* user, chanrec* chan, std::string reason)
+ {
+ if (std::string(source->server) == Srv->GetServerName())
+ {
+ log(DEBUG,"**** User on %s KICKs: %s %s",source->server,source->nick,user->nick);
+ std::deque<std::string> params;
+ params.push_back(chan->name);
+ params.push_back(user->nick);
+ params.push_back(":"+reason);
+ DoOneToMany(source->nick,"KICK",params);
+ }
+ }
+
+ virtual void OnRemoteKill(userrec* source, userrec* dest, std::string reason)
+ {
+ std::deque<std::string> params;
+ params.push_back(dest->nick);
+ params.push_back(":"+reason);
+ DoOneToMany(source->nick,"KILL",params);
+ }
+
+ virtual void OnRehash(std::string parameter)
+ {
+ if (parameter != "")
+ {
+ std::deque<std::string> params;
+ params.push_back(parameter);
+ DoOneToMany(Srv->GetServerName(),"REHASH",params);
+ // check for self
+ if (Srv->MatchText(Srv->GetServerName(),parameter))
+ {
+ Srv->RehashServer();
+ }
+ }
+ }
+
+ // note: the protocol does not allow direct umode +o except
+ // via NICK with 8 params. sending OPERTYPE infers +o modechange
+ // locally.
+ virtual void OnOper(userrec* user, std::string opertype)
+ {
+ if (std::string(user->server) == Srv->GetServerName())
+ {
+ std::deque<std::string> params;
+ params.push_back(opertype);
+ DoOneToMany(user->nick,"OPERTYPE",params);
+ }
+ }
+
+ virtual void OnMode(userrec* user, void* dest, int target_type, std::string text)
+ {
+ log(DEBUG,"*** ONMODE TRIGGER");
+ if (std::string(user->server) == Srv->GetServerName())
+ {
+ log(DEBUG,"*** LOCAL");
+ if (target_type == TYPE_USER)
+ {
+ userrec* u = (userrec*)dest;
+ std::deque<std::string> params;
+ params.push_back(u->nick);
+ params.push_back(text);
+ DoOneToMany(user->nick,"MODE",params);
+ }
+ else
+ {
+ chanrec* c = (chanrec*)dest;
+ std::deque<std::string> params;
+ params.push_back(c->name);
+ params.push_back(text);
+ DoOneToMany(user->nick,"MODE",params);
+ }
+ }
+ }
+