Projet

Général

Profil

[Résolu] Enregistrement de 2 trunks chez le même fournisseur - Proposition d'amélioration

Ajouté par Bastien HIRIARTE il y a 6 mois

Bonjour à tous,

Il ne s'agit pas là d'un soucis mais d'une solution, en espérant que cela puisse aider quelqu'un d'autre voir même être intégrée dans les prochaines version de Xivo.

Contexte :
Lors de l'enregistrement de 2 trunks sur le même Xivo vers le même fournisseur, les 2 enregistrements sont fait sous le même nom sous la forme "reg_FQDNfournisseur". PJSIP ne voit alors qu'une "registration" avec 2 identifiant / mot de passe ce qui fait qu'un seul trunk est enregistré et cela de manière aléatoire et donc pose un soucis de réception d'appels.
Il est possible de le voir avec un "pjsip show registrations", vous verrez qu'un seul des 2 trunks n'apparait.

Solution trouvée
Modifier le nom d'enregistrement pour qu'il soit obligatoirement différent pour chaque trunks et ce en se basant sur le nom du trunk renseigné dans l'onglet général et non pas le FQDN du fournisseur ce qui donne reg_nomDuTrunk.
Afin d'être sûr de récupérer le bon nom de trunk, une vérification sur le FQDN du fournisseur + l'identifiant de connexion est faite (le cas où 2 trunks aient les mêmes informations étant impossible).

Solution validée sur
Jabbah (2022.10.05)
Kuma (2023.05.06)

Correction proposée
Tout se passe dans le fichier : /usr/lib/python3/dist-packages/xivo_confgen/generators/sip2pjsip/sip_to_pjsip.py
Et voici les modifications à apporter en essayant de coller au mieux au style du code (le fichier complet modifié est disponible en PJ) :

ajout -> avec les autres import en début de fichier -> from xivo_dao.resources.endpoint_sip import dao as sip_dao

ajout -> dans la fonction def __init__(...) de la classe Registration -> self.extract_trunk_name()

ajout -> avant la fonction def write(...), la fonction de récupération du nom du trunk (attention à l'indentation)

def extract_trunk_name(self):
    """
    Extract the name of the trunk to set different name for
    all the registration section in pjsip.conf.
    Function used in self.write().
    """
    trunk = sip_dao.find_by(commented=0,
        category='trunk',
        host=self.host,
        username=self.authuser)

    self.trunk_name = trunk.name

modification -> dans la fonction def write(...) -> modifier section = 'reg_' + self.host par section = 'reg_' + self.trunk_name

modification -> dans la fonction def write(...) -> modifier auth_section = 'auth_reg_' + self.host par auth_section = 'auth_reg_' + self.trunk_name

Résultat
Une fois ce correctif appliqué, vous verrez bien vos 2 "registrations" distinctes avec la commande PJSIP et n'aurais plus de soucis d'enregistrement / réception d'appel.

Conclusion
Voilà pour moi, je reste bien sûr ouvert à toute améliorations ou suggestions
Et sinon, bonne continuation à tous avec la VOIP


Réponses (2)

RE: [Résolu] Enregistrement de 2 trunks chez le même fournisseur - Proposition d'amélioration - Ajouté par Laurent MEILLER il y a 6 mois

Merci, en effet cette correction est tout à fait valide, et pourra servir à d'autres !

A voir pour nous pour l'intégrer dans le produit, car même si la modification semble mineur, il faut qu'on repasse une batterie de tests.

En tout cas, encore merci pour cette contribution.

    (1-2/2)