[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