[IRC-DEV] Re:_[IRC-DEV]_¿Inconsitencias_en_parche_u2.10.H.05.71?

Ruben Cardenal rubenc at arrakis.es
Mon Sep 30 10:06:06 CEST 2002


Hola,

> Ya le comenté a jcea por privado que mi parche no enviaba el nick correctamente. Intenté
> solucionar el problema, pero con las cosas de la matrícula de la universidad, etc, aún no he
> podido mirarlo.

   Si no envia el nick, por qué envias un parche que dice "(...) se envía el 
nick (...)"? Claro que si dices que le dijiste que no se envia correctamente, 
y te acepta el parche...

> Como bien dices, no es posible determinar con la variable "nick" el nick real a quien va dirigido.

   Claro que se puede: con FindUser(nick), y te devuelve un puntero a una 
estructura aClient *SOLO* si esa estructura devuelta es de un usuario. Examina 
esto:

       if (MyUser(sptr) || Protocol(cptr) < 10)
         acptr = FindUser(nick);
       else if ((acptr = findNUser(nick)) && !IsUser(acptr))
         acptr = NULL;.

   Evidentemente, esto te impide que hagas un actpr->name para acceder al nick 
(como ya dije en su dia) si FindUser() no devuelve un puntero válido. Si en 
estas condiciones intentas un acptr->name, cataplof.

> Esta semana que entra intentaré averiguar si hay alguna forma de acceder a esa información.

   No vas a poder. Como dijo zoltan antes, un nodo remoto cuando recibe la 
lista de nicks para un PRIVMSG los recibe en formato numérico y en "nick" 
tienes el numeric para ese nick. Si examinas m_message (cosa que ya en su día 
expuse pero al parecer nadie hizo caso y este parche salió adelante), veras 
que para enviar un mensaje:

   for (p = NULL, nick = strtoken(&p, parv[1], ","); nick;
       nick = strtoken(&p, NULL, ","))

   Ahi, se van tomando los argumentos separados por "," que existen en la 
lista de destinatarios. Ahi mismo ya, "nick" es el numeric. La función primero 
comprueba que "nick" sea el nombre de un canal "if (IsChannelName(nick))", y 
la siguiente comprobación es que el numeric pertenezca a una estructura de 
cliente válida (que lo puse más arriba).

   Si no es el caso, lo único que tienes es un numeric, y ese es el motivo de 
que se envie "*", porque, evidentemente, no vamos a tener al ircd enviando 
numerics de nicks en las notificaciones a los usuarios :)

   En resumen: que el código original tenía un "*" por algo, y no de casualidad.

   Un saludito, Oscar.

NiKoLaS




More information about the IRC-Dev mailing list