[IRC-DEV] Datos locales de las estructuras Client, User y Server

Miguel A. Fosas amn3s1a at ono.com
Tue Jul 29 15:26:53 CEST 2003


Buenas,

Extraido del todo.jcea:

16/Dic/02
Los "invites" deberian estar en la parte local
de los clientes, ya que solo se guardan los invites
de los usuarios propios.
..

	Esto obliga a considerar varias cosas. Para empezar, actualmente la 
estructura Client cuenta con, entre otras cosas, dos punteros a dos 
estructuras, una del tipo Server y otra del tipo User, dependiendo de si la 
conexion es a un servidor o a un usuario. Todas ellas se encuentran en 
ircd/include/struct.h

	Client tiene ademas, una parte local, para la cual solo se pide memoria en el 
caso de que se mantenga una conexion directa con el cliente, ahorrando así 
una cantidad considerable de memoria. Sin embargo, las estructuras User y 
Server NO cuentan con partes locales, y es aqui donde encuentro el problema.

	Esto implica que, actualmente, la manera mas sencilla de pasar los "invites" 
(entre otras cosas que indico mas adelante) a la parte local es moviéndola de 
User a la parte local de Client. El problema es que Client es, o deberia ser, 
a mi modo de ver, independiente para usuarios y servidores, y resulta confuso 
tener datos especificos de los usuarios en dicha estructura, para eso ya esta 
User, y viceversa, tener datos de los servidores en dicha estructura, aunque 
no suponga una gran perdida de memoria alojarlos en Client.

	Mi propuesta es, dejar en Client y su parte local, UNICAMENTE los datos 
comunes para servidores y usuarios, crear en las estructuras User y Server 
partes locales, para los datos especificos de estos. A simple vista puede 
parecer "excesivo" trabajo, pero se puede hacer en varias etapas, ganando en 
claridad y en un futuro, esto puede ser de mucha utilidad.

	Despues de decidir que datos deben ir en cada lugar, los primeros cambios que 
habria que hacer, aparte de documentarlo en la declaracion de las 
estructuras, seria adaptar make_user y make_server para que aceptasen un 
segundo parametro, que indicase si se trata de un usuario/servidor local o 
remoto, y, en funcion de dicho parametro, reservar el tamaño de memoria 
adecuado. Segundo, comprobar con assert que el acceso a dichos datos (los 
locales) solo se hace cuando realmente son usuarios o servidores locales, 
para curarnos en salud. Y por ultimo, revisar las rutinas que se encargan de 
mostrar en los stats, debug, etc.. el tamaño de dichas estructuras puesto que 
sizeof daria lugar a errores (ver las macros CLIENT_LOCAL_SIZE y 
CLIENT_REMOTE_SIZE en struct.h).

	En cuanto a la estructura User, habría que mover a la parte local: los 
"invites", lo referente al watch, nextnick, cookie y snomask.
	Respecto a Server, habría que mover todo lo referente a zlib. Aunque esto 
puede ampliarse en un futuro (algo lejano?) para los usuarios (como asi me 
comenta jcea), de momento, podria comentarse con #if 0, pudiendo asi 
cambiarlo con facilidad cuando fuese necesario.

¿Opiniones?¿Sugerencias?

Un saludo.
Miguel A.

PD: Quizas me deje en el tintero algo mas que se podria mover.





More information about the IRC-Dev mailing list