Asterisk PBX: identificar un Endpoint en PJSIP

En el nuevo canal PJSIP de Asterisk, el sinónimo de extensión es Endpoint. De hecho entre todos los distintos tipos de bloques que se pueden configurar en el archivo pjsip.conf hay uno que tiene ese nombre. Cuando una nueva solicitud SIP llega, el canal PJSIP necesita saber para que endpoint es la solicitud y para saberlo utiliza distintos identificadores que van a mirar distintas cabeceras presentes en la solicitud recibida.

El resultado de esta búsqueda puede devolver uno o más resultados y cual de todos se utilizará depende del orden/prioridad que se ha definido en el parámetro endpoint_identifier_order que se configura en el bloque de tipo global del archivo pjsip.conf. Para conocer el orden predefinido configurado en Asterisk, se accede a la consola de la PBX y se escribe el siguiente comando:

CLI> pjsip show identifiers

cuyo resultado es algo parecido a:.

El orden de identificación, en este caso, sería:

  • name not specified: es el tipo de identificador que se utiliza en los registros hacia servidores remotos que utilizan un bloque de tipo registration. En ese bloque es posible activar el parámetro line y a seguir el parámetro endpoint que contendrá el endpoint que se llamará cuando entre una llamada desde el servidor donde se ha realizado el registro.
  • username: es el tipo de identificador utilizado para los dispositivos que se registran hacia el servidor Aserisk y que dan nombre a un bloque de tipo endpoint. Es posible realizar la búsqueda de usuario y dominio ya que en teoría el nombre de endpoint puede contener esas dos partes (ejemplo: [1000@dominio1.org]). Hay que destacar que la configuración multi dominio en PJSIP no funciona debido a un BUG que todavía no se ha corregido. El orden en que el endpoint es buscado es:
    • username@domain presente en la cabecera From de la solicitud
    • username@domain-alias un alias para el dominio presente en la cabecera From especificado en una sección de tipo domain_alias en el archivo pjsip.conf
    • username@trasport-domain si el dominio presente en la cabecera From empareja con el dominio configurado en un bloque de tipo transport
    • username: solamente el usuario presente en la cabecera From
    • Si se encuentra un usuario luego se mirará al parámetro identify_by presente en un bloque de tipo endpoint para saber el orden de identificación que de manera predefinida es username,ip
  • anonymous: un endpoint de tipo anonymous tiene la misma funcionalidad del parametro allowguest del canal SIP es decir que permite las llamadas entrantes de usuario/dispositivos no registrados/autenticados. La forma en que viene identificado es parecida al anterior:
  • IP: el identificador IP reconoce el endpoint basandose en la IP de procedencia de la solicitud y asociandola a un bloque de tipo identify donde aparece esa IP y un endpoint configurado.
  • auth_username: este identificador se basa en la cabecera de autenticación de la solicitud donde aparece el numero/nombre del endpoint que se asociará con el numero/nombre del endpoint definido en un bloque de tipo endpoint. Si el soporte multi dominio no se ha deshabilitado, la busqueda se realiza según el siguiente orden:
    • username@realm el real presente en la cabecera de autorización
    • username@realm-alias
    • username@transport-domain
    • username
    • si un endpoint ha sido localizado luego el parametro identify_by debe contener el parametro auth_username para que ese endpoint se utilice
  • header: el identificador de tipo header es presente desde la versión 13.20 y 15.3 de Asterisk y el endpoint es indetificado si en un bloque de tipo identify está configurado el parametro match_header donde se indica una cabacera y su valor a indentificar. Ejemplo:
    • match_header = SIPHeader: valor - SIPHeader es el nombre de la cabecera y valor su valor. Si la solicitud SIP entrante contiene esa cabecera, la solicitud será asociada con el endpoint contenido como parametro en el mismo bloque de tipo identify
    • Si se quiere identificar más de una cabecera, hay que crear, para cada una de ellas, una nueva sección de tipo identify

Como los parámetros involucrados y los bloques de configuración utilizados son muchos, quizás al inicio tendrán algun problema para entender completmente el funcionamiento de la identificación de un Endpoint; lo mejor es probar probar probar hasta tener claro el funcionamiento de como identificar un Endpoint de manera univoca.

La distintas formas de identificar los Endpoints en Asterisk será uno de los temas que se tratarán en el proximo curso dedicado al canal PJSIP de Asterisk PBX.