OpenSIPS dispone de diversos módulos mediante los cuales podemos enviar comandos para realizar determinadas acciones o consultar información. Podemos interactuar con OpenSIPS mediante un socket (mi_datagram) un fifo (mi_fifo) o XML-RPC (mi_xmlrpc).
Para mandar comandos sencillos podemos utilizar la herramienta de consola que ya viene con OpenSIPS opensipsctl, pero el fifo al que nos conectamos viene dado por el valor almacenado en un fichero (por defecto en /etc/opensips/opensipsctlrc), por lo tanto no es muy flexible si tenemos varias instancias de OpenSIPS corriendo en la misma máquina.
En MediaProxy y CallControl hacemos uso del módulo mi_datagram, para comunicarnos con OpenSIPS e indicarle que ha de terminar un diálogo, por ejemplo, por lo que pensé en reutilizar ese código para poder mandar comandos más fácilmente desde una interfaz de consola.
El resultado:
Un script que toma el comando que le pasemos por la línea de comando, lo formatea correctamente y lo envía al socket de OpenSIPS. Es bastante simple, pero nunca había probado el módulo stdio de Twisted, que permite hacer IO asíncrona de la entarda estándar, y ésta era una buena ocasión para probarlo. 😉
Hola Saúl,
esto me parece muy interesante. Estoy algo metido con OpenSIPS pero de momento solo conozco el metodo sencillo a traves del opensipsctl FIFO para enviarle MI Commands.
Con este script entiendo que podríamos enviarle comandos desde otra máquina. ¿Puedes ponerme un ejemplo sencillo para de como hacerlo?
Gracias.
Un saludo.
No, con este script puedes mandar comandos desde la misma máquina, porque es un socket UNIX, no un socket de red. La razón por la cual lo hice es que si tienes varias instancias de OpenSIPS en la misma máquina puedes elegir el socket correspondiente y mandar los comandos.
Para mandar comandos desde otra máquina puedes usar mi_xmlxpc y mandarlos por XML-RPC.