[IRC-DEV] Re: [IRC-DEV] ¿Inconsitencias en parche u2.10.H.05.71?

ZOLTAN ZOLTAN at teleline.es
Sun Sep 29 20:52:04 CEST 2002


> 
> QDuhs Target left IRC. Failed to deliver: [nope]
> 
>   "QDuhs"? Un saludo,
> 

Reenvio de nuevo, que el anterior salio cortado.

QD es el numerico de du      /*
       * nickname addressed?
       */
      if (MyUser(sptr) || Protocol(cptr) < 10)
	acptr = FindUser(nick);
      else if ((acptr = findNUser(nick)) && !IsUser(acptr))
	acptr = NULL;
ne.irc-hispano.org....

La explicacion de el porque sale el numerico es que un nodo remoto, 
cuando recibe un privmsg, recibe los nicks destino en formato NUMERICO, 
y la variable "nick" no es el nick, sino numerico si viene de un nodo 
P10.

      /*
       * nickname addressed?
       */
      if (MyUser(sptr) || Protocol(cptr) < 10)
	acptr = FindUser(nick);
      else if ((acptr = findNUser(nick)) && !IsUser(acptr))
	acptr = NULL;

Si es un usuario local o viene de un nodo remoto P09, la variable nick 
contiene el nickname y si viene de un nodo P10, nick contiene el 
NUMERICO ya que P10 maneja numericos en vez de nicks. Si existe el 
usuario en la red, acptr contiene un puntero al aClient del usuario y 
se entrega el mensaje al usuario. Y si acptr es NULL (es el nuestro 
caso, de no existir el nick y por lo tanto no poder entregar un 
mensaje) entonces hay que dar error ya que nunca llegara a destino. 
Bien, mas abajo, hay un if (acptr) para los casos de exito y mas abajo 
unos else para el caso de enviar un error, veamos:

      else if (MyUser(sptr) || Protocol(cptr) < 10)
	sendto_one(sptr, err_str(ERR_NOSUCHNICK), me.name, parv[0], 
nick);
      else
	sendto_one(sptr,
	    ":%s %d %s %s :Target left IRC. Failed to deliver: [%.50s]",
	    me.name, ERR_NOSUCHNICK, sptr->name, nick, parv[parc - 1]);

Si es un usuario local o viene de un servidor P09, como sabemos su 
nick, se manda un mensaje de error. Pero si viene de un servidor P10, 
no sabemos el nick que tenia, porque el usuario ya ha salido y no 
tenemos datos ni nada, pues los de Undernet pusieron un "*" para 
curarse en salud.

Ya me parecia a mi que el "*" estaba para algo, y siempre he dado la 
razon a NiKoLaS de sus comentarios sobre la discusion que hubo sobre el 
tema.

Si el autor del parche hubiera puesto un acptr->name en vez de nick con 
la intencion de que saliera el nick en vez del numerico, pedazos CORE 
DUMPS se verian en la red ;-)   

Y por lo visto, se nota mucho que no ha probado el parche, porque 
ademas en una red local es muy dificil de reproducir un caso asi por la 
ausencia de lag que suelen tener las redes locales.

Un saludo

zoltan





More information about the IRC-Dev mailing list