A modo de introducción a la implementación de el componente MU-Conference presentamos la extensión LEP-0045. En la misma se discuten aspectos relacionados a la configuración, participación y administración de salas de conferencia basadas en texto. Los requerimientos planteados fueron bien tratados dentro de la comunidad Jabber o familiares en ambientes del estilo como en el Internet Relay Chat (IRC).
En el momento de plantear esta extensión se utilizo como punto de partida las funcionalidades ofrecidas por los servicios de multiconferencia para Jabber existentes al momento los cuales utilizaban el protocolo original “groupchat 1.0”. Esos requerimientos fueron extendidos hasta alcanzar la siguiente lista:
Requerimiento |
Tipo |
Los mensajes dentro de las salas de chat son del tipo especial “groupchat” |
B |
Cada sala esta identificada como sala@servicio donde “sala” es el nombre de la misma y “servicio” es el nombre del servidor en el cual esta corriendo el servicio de multiconferencia. |
B |
Cada ocupante de la sala es identificado por sala@servicio/apodo. Apodo (nick en inglés) es especificado por el usuario al entrar a la sala y puede cambiarlo en el transcurso de la “visita” a la misma |
B |
El usuario entra a una sala (convirtiéndose en ocupante de la misma) enviando “presence” a la misma. |
B |
El usuario sale de una sala enviando “unaviable” a la misma |
B |
El usuario puede cambiar su nick o estado de disponibilidad dentro de la sala enviado “update” |
B |
Logeo nativo de las conversaciones |
E |
Habilitar que el usuario solicite membresía a la sala |
E |
Habilitar a los ocupantes para que puedan ver la JID completa de otro ocupante en salas no anónimas. |
E |
Habilitar a los moderadores ver el JID completo de un ocupante de forma semi anónima |
E |
Permitir que solo los moderadores cambien el tema de la sala |
E |
Habilitar a los moderadores a expulsar temporalmente a participantes y visitantes de las salas |
E |
Habilitar a los moderadores a otorgar y revocar el derecho a voz (es decir a hablar) en las salas moderadas y manejar la “lista de voces” |
E |
Habilitar a los administradores otorgar y revocar permisos de moderador y manejar la lista de moderadores |
E |
Habilitar a los administradores a expulsar definitivamente a usuarios de una sala y manejar la lista de expulsados definitivos |
E |
Habilitar a los administradores a otorgar y revocar privilegios de membresía y manejar la lista de miembros en las salas exclusivas |
E |
Habilitar a los dueños de la sala limitar el número de ocupantes |
E |
Habilitar a los dueños especificar otros dueños |
E |
Habilitar a los dueños otorgar y revocar privilegios de administración y manejar las lista de administradores |
E |
Habilitar a los dueños de las salas destruirlas |
E |
Las salas podrán ser publicas o escondidas |
E |
Persistentes o temporales |
E |
Protegidas por clave o inseguras |
E |
Abiertas o solo para miembros |
E |
Moderadas o no |
E |
No anónimas o semi anónimas |
E |
B significa funcionalidad Básica y E propuesta como extensión por la JEP-0045
Por otro lado se establecieron dos dimensiones mutuamente ortogonales que permiten determinar la calidad de un usuario, la cual dura el tiempo de visita a la sala por parte del usuario. No hay mapeo uno a uno entre estas afiliaciones y los roles de los ocupantes de una sala. Las afiliaciones son otorgadas, revocadas y mantenidas en base al JID común de cada usuario. Ellas son:
Afiliación que es una asociación o conexión de larga vida con una sala. Las afiliaciones posibles son
dueño (owner) significado normal o común.
administrador (admin) idem.
miembro (member) usuario incluido en la "whitelist" o lista de habilitados a entrar a una sala cuando esta es solo para miembros o para quienes están registrados en salas abiertas.
descastado (outcast) usuario expulsado definitivamente (banned) de una sala.
Si un usuario entra a una sala sin una afiliación definida estos se le define como “none” pero esta afiliación no persiste durante la visita.
Dueños (Owners) y administradores (admins) son inmunes por definición a ciertas acciones. Específicamente no pueden ser expulsados temporal (kicked) o definitivamente (banned) de las salas. Un administrador debe perder su afiliación como tal antes de ser sujeto a tales acciones.
Las afiliaciones permiten a los administradores mantener “whitelists” en salas con membresía y a los usuario en salas abiertas un registro efectivo en las mismas.
Información sobre la afiliación debe ser enviada en todas las stanzas de presencia generadas por la sala y enviadas a los ocupantes de la misma
Rol – posición temporal o nivel de privilegio de un usuario en la sala. Estos son
moderador (moderator) significado normal.
participante (participant) aplica a los ocupantes que no tienen privilegios administrativos; en salas moderadas se los definen como “los que tienen voz” en contraste a los visitantes.
visitante (visitor) en salas moderadas los ocupantes sin derecho a voz.
También es posible no tener un rol definido y estos duran el tiempo de visita del ocupante a la sala.
Privilegios asociados a los Roles
Privilegio |
Ninguno1 |
Visitante |
Participante |
Moderador |
Presencia en la sala |
No |
Si |
Si |
Si |
Recibir mensajes |
No |
Si |
Si |
Si |
Cambiar el estado de disponibilidad |
No |
Si |
Si |
Si |
Cambiar el Nick de la Sala |
No |
Si* |
Si |
Si |
Envío de mensajes privados |
No |
Si* |
Si |
Si |
Invitar a otros usuarios |
No |
Si* |
Si* |
Si* |
Enviar mensajes a todos |
No |
No** |
Si |
Si |
Modificar el tema de la sala |
No |
No |
Si* |
Si |
Expulsar visitantes y participantes |
No |
No |
No |
Si |
Otorgar derecho de voz |
No |
No |
No |
Si |
Revocar derecho de voz |
No |
No |
No |
Si*** |
* Por defecto; los seteos de configuración podrían restringir más aún estos privilegios
** Una implementación puede otorgar derecho de voz por defecto a los visitantes en salas no moderadas
*** Un moderador NO DEBE ser capaz de revocar el derecho a voz de un administrador o de un dueño de sala.
Privilegios asociados a la afiliación
Privilegio |
Descastado |
Ninguno |
Miembro |
Administrador |
Dueño |
Entrar a salas abiertas |
No |
Si** |
Si |
Si |
Si |
Registrarse en salas abiertas |
No |
Si |
N/A |
N/A |
N/A |
Entrar a salas exclusivas |
No |
No |
Si* |
Si |
Si |
Expulsar (ban) miembros y usuarios no afiliados |
No |
No |
No |
Si |
Si |
Editar la lista de miembros |
No |
No |
No |
Si |
Si |
Editar la lista de moderadores |
No |
No |
No |
Si** |
Si** |
Editar la lista de administradores |
No |
No |
No |
No |
Si |
Editar la lista de dueños |
No |
No |
No |
No |
Si |
Cambiar las definiciones de la sala |
No |
No |
No |
No |
Si |
Destruir la sala |
No |
No |
No |
No |
Si |
* Por defecto, usuarios no afiliados entran en salas moderadas como visitantes, y a salas abiertas como participantes. Un miembro entra a salas como participante. Administradores y dueños como moderadores.
** Un administrador o un dueño NO DEBE ser capaz de revocar privilegios de moderación de otro administrador o dueño.
Si el usuario entra a una sala protegida por clave y el mismo no la suministra, el servicio debe negar la entrada al usuario a la sala.
Si un usuario intenta entrar a una sala exclusiva para miembros y no lo es, se le negará la entrada
Si el usuario fue expulsado definitivamente (es decir, se le cambio el rol a outcast) se le negara el ingreso a las salas.
Si se produce un conflicto de nickname durante el ingreso, se negará el acceso
En cualquiera de estos casos se notificará adecuadamente del motivo de la negación.
Como se puede apreciar, esta extensión posee funcionalidades y mecanismos que permiten uso más que adecuado de un servicio de estas características. Si el lector desea profundizar en el tema, sobre todo en el modo que se implementan los distintos casos de usuario con las stanzas, deberá referirse al texto de la JEP-0045
Ban – remover a usuario de una sala de tal forma que el usuario quede deshabilitado a re-entrar a la mima (hasta o al menos que se removido este estado). El usuario “ banned” posee una afiliación de descastado.
JID Plan (Bare JID) – la dirección user@host por el cual un usuario es identificado fuera del contexto de cualquier sesión o recurso existente, en contraste con JID Completa o JID de Sala.
JID Completa (Full JID) – la dirección user@host/resource por el cual se conoce a un usuario fuera del contexto de una sala.
Invitación (Invitation) – mensaje especial enviado por un usuario a otro pidiendo al receptor que entre a una sala.
IRC -- Internet Relay Chat.
Kick – remover temporalmente a un participante o a un visitante de una sala. El usuario tendrá permitido el acceso en cualquier momento. Tiene rol “none”.
Logging – almacenamiento de la discusión que ocurre dentro de una sala para recuperación dentro o fuera de la misma.
MUC – protocolo de conferencia multi usuario documentado por el JEP-0045.
Ocupante (Occupant) – cualquier usuario Jabber dentro de una sala.
Mensaje Privado (Private Message) – mensaje enviado por un ocupante a otro directamente.
Sala (Room) – espacio virtual en el cual entran figuradamente los usuarios Jabber para participar en tiempo real de discusiones basadas en texto con más de un usuario.
ID de Sala (Room ID) – el identificador de nodo correspondiente al Room JID, el cual puede ser opaco y como tal carente de sentido para los humanos a diferencia del Room Name.
JID de Sala (Room JID) – la dirección room@service/nick por la cual un ocupante es identificado en el contexto de una Sala.
Nombre de Sala (Room Name) – Nombre para la sala en lenguaje natural y amigable al usuario, configurado por el Dueño de la Sala y presentado en el Servicio de Descubrimiento.
Apodo de Sala (Room Nickname) – identificador de recurso del JID de Sala.
Lista de usuarios en el chatroom (Room Roster) – representación a nivel de un cliente Jabber de los ocupantes de un chatroom.
Servidor (Server) – Servidor Jabber que puede o no tener asociado un Servicio MUC.
Servicio (Service) – Host que ofrece las capacidades de MUC; a menudo pero no necesariamente un subdominio del Servidor Jabber(e.j., conference.jabber.org).
Tema (Subject) – tópico temporario de discusión dentro de una Sala.
Visita (Visit) - “sesión” de un usuario en una sala, comienza cuando entra a la misma y finaliza cuando sale.
Derecho de Voz (Voice)-- en Salas Moderadas, es el privilegio de poder enviar mensajes.
Este componente se puede descargar de http://jabberstudio.org/projects/mu-conference/releases/ y al momento de realizar la instalación la última versión estable era la 0.6.0.
Como único requisito requiere el JCR (Jabberd Component Runtime library), la cual se puede obtener desde http://jabber.terrapin.com/JCR/ la versión disponible al momento de realizar la instalación era la 0.2.4.
Lo que sigue es una breve secuencia de pasos a seguir para compilar e instalar el componente mu-conference.
tar -zxvf jcr-0.2.4.tar.gz
cd jcr-0.2.4
make
Luego copiamos el mu-conferece.0.6.0.tar.gz dentro del directorio actual y lo descomprimimos
tar -zxvf mu-conference-0.6.0.tar.gz
Copiamos los siguientes archivos dentro del directorio con los fuentes de mu-conference
cp src/main.c mu-conference-0.6.0/src
cp src/jcomp.mk mu-conference-0.6.0/src
Cambiamos de directorio y compilamos
cd mu-conference-0.6.0/src
make -f jcomp.mk
Esto generará el ejecutable de mu-conference el cual habrá que copiar al directorio donde se encuentran el resto de los componentes del servidor jabber (/usr/local/bin).
Luego deberemos copiar el archivo de configuración muc-jcr.xml provisto en la distribución de mu-conference al directorio donde se encuentran los archivos de configuración de jabberd /etc/jabberd.
Incluimos en Apéndices archivo de configuración muc-jcr.xml
Modificaciones en los demás archivos de configuración de jabber
<user>
<!-- corresponde al valor de tag <name> en la sección <jcr> de
muc-jcr.xml -->
<name>mu-conference</name>
<!-- corresponde al valor del tag <secret> de la sección <jcr> de
muc-jcr.xml y al tag <secret> de la seccion <router>
subsección <local> de de router.xml -->
<secret>secret</secret>
</user>
Agregar la siguiente línea en la seccion <aliases>.
<alias name='conference.tortuga.fing.edu.uy' target='mu-conference'/>
donde name se corresponde con el valor del tag <host> de la sección <jcr> y target con el valor de <name> en la misma sección.
Agregar las siguientes líneas en la seccion <agents>
<agent jid='conference.fing.edu.uy'>
<name>Public Conferencing</name>
<description>Public chatrooms for users.</description>
<service>public</service>
<groupchat/>
</agent>
Una vez, configurado el servicio y con el servidor jabberd levantado lo iniciamos con el comando
/usr/local/bin/mu-conference -c /etc/jabberd/muc-jcr.xml &
Las salas de conferencia en Jabber pueden ser persistentes o no. Por defecto son no persistentes y pueden ser creadas por los distintos usuarios los cuales, una vez creada la sala, podrán invitar a sus “amigos” a participar en ella.
Las salas permanentes son creadas una sola vez y permanecen abiertas hasta que se las de baja. La distribución de mu-conference facilita un script perl para su creación. El mismo tiene los siguientes módulos como dependencias.
XML::Simple
Digest::MD5
El proceso general de instalación de módulos perl desde los fuentes y el enlace al sitio donde poder descargarlos se encuentra en el Apéndice B
Este script es de muy fácil manejo, simplemente hay que seguir las instrucciones. Incluimos los pasos seguidos por uno de los integrantes durante una prueba realizada con este script.
[root@tortuga rooms]# ./roommaker.pl
Please enter spool directory path (e.g. /usr/local/jabber/spool): /usr/local/var/jabberd/spool
Please enter jid for the room: chat1@tortuga.fing.edu.uy
/usr/local/var/jabberd/spool/tortuga.fing.edu.uy/ doesn't exist - Create? (Y/N) Y
Creating Directory
Configuring room chat1@ tortuga.fing.edu.uy
Filename: /usr/local/var/jabberd/spool/tortuga.fing.edu.uy/2402f2f44290e8505ddac91e3a0aad89e6ed079a.xml
General Options
---
Room name (text) [Default: chat1]: Chat1
Password (text) [Default: ]: pwdchat1
Room description/MOTD (text) [Default: ]: Sala 1 de prueba - creado por mario
Room subject (text) [Default: ]: proyecto GNU/Linux
Bare JID of room creator (text)[Default: ]: mario@tortuga.fing.edu.uy
Is room public (0/1) [Default: 0]: 0
Maximum Users (value) [Default: 0]: 20
Permission Options
---
Allow non-admins to see real jids (0/1) [Default: 0]: 0
Can users change subject (0/1) [Default: 0]: 0
Allow users to IQ query other users (0/1) [Default: 0]: 0
Legacy Options:
---
Consider all clients legacy (0/1) [Default: 0]: 1
Legacy join message (text) [Default: ]: join
Legacy leave message (text) [Default: ]: leave
Legacy rename message (text) [Default: ]: rename
Moderation Options:
---
Is room moderated (0/1) [Default: 0]: 1
Default entry type of participant (0/1) [Default: 0]: 0
Default entry type of participant (0/1) [Default: 0]: 0
Member-Only Options:
---
Make room member-only (0/1) [Default: 0]: 1
Allow members to send invites (0/1) [Default: 0]: 0
Logging Options:
---
Enable native room logging (0/1) [Default: 0]: 0
Skipping Logging options
Owner List:
---
JID of owner (Empty line to exit): mario@tortuga.fing.edu.uy
JID of owner (Empty line to exit):
Admin List:
---
JID of admin (Empty line to exit): mario@tortuga.fing.edu.uy
JID of admin (Empty line to exit):
Member List:
---
JID of member (Empty line to exit): mario@tortuga.fing.edu.uy
JID of member (Empty line to exit): daniel@tortuga.fing.edu.uy
JID of member (Empty line to exit):
Outcast List:
---
JID of outcast (Empty line to exit):
Writing Room definition file
Room registry not found. Creating
Writing updated Room registry file
Luego de terminado el script dentro del directorio spool se habrá creado un directorio tortuga.fing.edu.uy y dentro de el se hallan los archivos de configuración de la sala y el de registro de salas del servidor.
1Significa la ausencia de Rol.
Estudio del Open/Free (GNU/Linux) como plataforma de servicios de red en entornos empresariales
Daniel Caraballo - Mario Madera - Marcelo Odin
Tutor: Ariel Sabiguero Yawelak
2004 - 2005.