[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