# Kamailio

Kamailio est un serveur SIP libre (anciennement OpenSER).

## Fonctionnalités

Voici les fonctionnalités implémentées en 3.2.x dans le logiciel selon l'équipe du projet :

### Serveur SIP conforme à la RFC3261

* Serveur d'enregistrement,
* Serveur de localisation,
* Serveur proxy,
* Serveur d'application SIP,
* Serveur de redirection.

### Flexibilité

* Faible consommation de ressources – idéal pour les applications embarquées – grâce à des binaires de faible taille,
* Capacité de charger des modules sans toucher au cœur du logiciel,
* Architecture modulaire,
* plus de 150 modules.

## Configuration

Le fichier kamailio.cfg contient les informations principales de configuration de Kamailio. Les sections présentes sont les suivantes :
* Définitions globales (Global Parameters) : Cette section du fichier liste les paramètres d'exécution du programme. On y trouve principalement le niveau de débogage, le type de couche de transport utilisé (UDP ou TCP), l'alias du serveur, les adresses IP et les ports d'écoute. Il faut redémarer kamailio pour recharger ces paramètres.
* Paramètres locaux (Custom Parameters) : Ces paramètres peuvent être modifiés en cours d'exécution grâce au module 'cfg_rpc'.
* Modules utilisés (Modules Section) : Cette section du fichier liste les modules chargés au démarrage de Kamailio, ainsi que le chemin pour trouver les modules (mpath). Pour définir des paramètres à ces modules, la commande modparam est utilisée. Les paramètres sont aussi listés dans cette section.
* Routage et automate (Routing Logic) : Cette section définit comment le serveur réagit à un message SIP ou à un événement. C'est l'automate du serveur SIP. L'algorithme livré initialement est censé être conforme aux normes SIP, mais il peut être modifié dans cette section justement. La routine route permet de définir cela.
Les paramètres précédents ont été listés pour la version 3.2.x de Kamailio. Ils sont susceptibles d'évoluer.

### Définitions globales (Global Parameters)

* debug : niveau de log compris entre -3 et 4. Le niveau par défaut est 2 et les logs sont inscrits dans /var/log/syslog. Les niveaux sont les suivants : -3 (alerte) : erreurs nécessitant une action immédiate ; -2 (critique) : erreur causant une situation critique ; -1 (erreur) : erreur pendant le traitement des données mais n'engendrant pas de dysfonctionnement ; 1 (warning) : warning ; 2 (notice) : situation non usuelle ; 3 (informatif) : messages d'informations ; 4 (débogage) : pour le débogage,
* fork : paramètre indiquant si le processus tournera lors de son lancement en tâche d'arrière-plan,
* log_stderror : paramètre pour rediriger les messages d'erreur vers la sortie standard,
* children : définit le nombre d'enfants (sous-processus) à créer par interface pour traiter les requêtes entrantes, il est utilisé uniquement pour les interfaces UDP et n'a pas d'impact sur les processus TCP.
* tcp_max_connections :
* alias :
* listen :

### Paramètres locaux (Custom Parameters)

* pstn.gw_ip :

### Modules utilisés (Modules Section)

* mpath : Le chemin pour trouver les bibliothèques des modules à charger (*.so en général). Voici la syntaxe pour ce paramètre : mpath="/tmp/blabla/:/home/ect/:/home/usw/:/home/aso/",
* loadmodule : La commande loadmodule permet de charger les modules. La syntaxe est la suivante : loadmodule "module.so"
* modparam : La commande modparam permet de configurer les modules chargés. La syntaxe est la suivante : modparam("nom_du_module","nom_du_paramètre_du_module","valeur_du_paramètre_du_module");
Chaque module possède un fichier de documentation appelé README, souvent sous le répertoire /usr/share/doc/kamailio/modules*/.

### Routage et automate (Routing Logic)

Chaque requête SIP reçue sera traitée dans la boucle commençant par :
elle se termine avec :
Lorsqu'un mot clef MotClef est utilisé en paramètre, la fonction
est exécutée