- virtual int OnUserList(userrec* user, chanrec* Ptr)
- {
- ServerInstance->Log(DEBUG,"NAMESX called for %s %s",user->nick,Ptr->name);
- if (user->GetExt("NAMESX"))
- {
- ServerInstance->Log(DEBUG,"Using NAMESX user list code");
- char list[MAXBUF];
- size_t dlen, curlen;
- dlen = curlen = snprintf(list,MAXBUF,"353 %s = %s :", user->nick, Ptr->name);
- int numusers = 0;
- char* ptr = list + dlen;
- CUList *ulist= Ptr->GetUsers();
- bool has_user = Ptr->HasUser(user);
- for (CUList::iterator i = ulist->begin(); i != ulist->end(); i++)
- {
- if ((!has_user) && (i->second->modes[UM_INVISIBLE]))
- {
- continue;
- }
- size_t ptrlen = snprintf(ptr, MAXBUF, "%s%s ", Ptr->GetAllPrefixChars(i->second), i->second->nick);
- curlen += ptrlen;
- ptr += ptrlen;
- numusers++;
- if (curlen > (480-NICKMAX))
- {
- /* list overflowed into multiple numerics */
- ServerInstance->Log(DEBUG,"Send list 1");
- user->WriteServ(list);
- /* reset our lengths */
- dlen = curlen = snprintf(list,MAXBUF,"353 %s = %s :", user->nick, Ptr->name);
- ptr = list + dlen;
- ptrlen = 0;
- numusers = 0;
- }
- }
- /* if whats left in the list isnt empty, send it */
- if (numusers)
- {
- ServerInstance->Log(DEBUG,"Send list 2");
- user->WriteServ(list);
- }
- user->WriteServ("366 %s %s :End of /NAMES list.", user->nick, Ptr->name);
- ServerInstance->Log(DEBUG,"Returning 1");
- return 1;
- }
-
- ServerInstance->Log(DEBUG,"Returning 0");
- return 0;
- }
-};
-
-
-class ModuleNamesXFactory : public ModuleFactory
-{
- public:
- ModuleNamesXFactory()