Serveur d'Application XCAP - Documentation sur l'Utilisation et l'Architecture
Table des Matières
- Résumé Exécutif
- XCAP dans les Réseaux 3GPP
- Architecture Système
- Intégration HSS
- Authentification BSF
- Types de Documents XCAP
- Diagrammes de Flux d'Appel
- Exemples de Documents XCAP
- Guide de Configuration
- Référence API
Résumé Exécutif
Ce Serveur d'Application XCAP (XML Configuration Access Protocol) fournit la gestion des Services Complémentaires IMS (IP Multimedia Subsystem) pour les réseaux de télécommunications. Il permet aux abonnés de gérer le renvoi d'appels, le blocage d'appels et les paramètres de présentation de l'identité de l'appelant via des documents XML standardisés.
Fonctionnalités Clés :
- Conforme à la 3GPP : Implémente l'ETSI TS 183 063 pour les Services Complémentaires IMS
- Intégration HSS : Communication basée sur API REST avec le Serveur d'Abonnés Domiciliaires
- Prêt pour BSF : Cadre pour l'authentification de l'Architecture de Démarrage Générique (GBA)
- Multi-Service : Renvoi d'Appels, Blocage d'Appels (entrant/sortant), contrôle de l'identité de l'appelant
- Haute Disponibilité : Équilibrage de charge entre plusieurs pairs HSS
- Interface Web : Portail d'auto-assistance pour la gestion des abonnés
XCAP dans les Réseaux 3GPP
Qu'est-ce que XCAP ?
XCAP (XML Configuration Access Protocol) est un protocole standardisé basé sur HTTP défini par l'IETF (RFC 4825) et adopté par la 3GPP pour gérer les données de configuration utilisateur dans les réseaux IMS. Il permet aux appareils mobiles et aux applications de créer, lire, mettre à jour et supprimer des documents XML stockés sur des serveurs de réseau.
Rôle dans l'Architecture IMS 3GPP
Catégories de Services XCAP
Le serveur XCAP gère trois catégories principales de Services Complémentaires IMS :
-
Diversion de Communication (Renvoi d'Appels)
- Inconditionnel (CFU)
- Occupé (CFB)
- Pas de Réponse (CFNA)
- Non Joignable (CFNRc)
- Non Enregistré (CFNReg)
-
Blocage de Communication (Blocage d'Appels)
- Entrant : Tous les appels, International, International sauf Pays d'Origine, En Roaming
- Sortant : Tous les appels, International, International sauf Pays d'Origine, En Roaming
-
Services de Présentation d'Identité
- Présentation de l'Identité d'Origine (OIP) - Afficher l'identité de l'appelant
- Restriction de Présentation de l'Identité d'Origine (OIR) - Cacher l'identité de l'appelant
Conformité aux Normes 3GPP
| Norme | Titre | Pertinence |
|---|---|---|
| ETSI TS 183 063 | Services de simulation PSTN/ISDN basés sur IMS | Spécification principale pour le schéma XML simservs |
| 3GPP TS 24.623 | Protocole d'Accès à la Configuration XML (XCAP) sur l'interface Ut | Spécifications de l'interface XCAP |
| 3GPP TS 24.238 | Configuration utilisateur basée sur le Protocole d'Initiation de Session (SIP) | Gestion de la configuration utilisateur |
| 3GPP TS 33.220 | Architecture d'Authentification Générique (GAA) | Cadre d'authentification BSF/GBA |
| RFC 4825 | Le Protocole d'Accès à la Configuration XML (XCAP) | Définition de base du protocole XCAP |
| RFC 4745 | Politique Commune : Un Format de Document pour Exprimer les Préférences de Confidentialité | Espace de noms XML pour les conditions de règle |
Architecture Système
Vue d'Ensemble des Composants
Architecture de Flux de Données
Responsabilités des Composants
| Composant | But | Port/Protocole |
|---|---|---|
| Serveur XCAP | Serveur d'application principal, points de terminaison API REST | 5000/HTTP |
| Gestionnaire XML | Conversion et manipulation de documents XML | N/A |
| Client HSS | Récupère/met à jour les données des abonnés via l'API REST | 8080/HTTP |
| Moteur de Modèle | Génère XML XCAP à partir des données des abonnés | N/A |
| Auth BSF | Authentification par hachage GBA optionnelle | N/A |
| Interface Web | Portail d'auto-assistance pour les abonnés | 5000/HTTP |
Intégration HSS
Modèle de Communication HSS
Le serveur XCAP agit comme un proxy sans état entre les clients XCAP et le HSS. Il ne maintient pas de stockage local des données des abonnés mais interroge le HSS pour chaque demande.
Points de Terminaison de l'API REST HSS
1. Récupérer l'Abonné par MSISDN
GET /ims_subscriber/ims_subscriber_msisdn/{msisdn}
Host: 10.4.2.140:8080
Réponse :
{
"ims_subscriber_id": 12345,
"imsi": "505570000012345",
"msisdn": "15551234567",
"xcap_profile": "<ss:communication-diversion>...</ss:communication-diversion>",
"scscf": "sip:scscf1.ims.example.com:6060",
"scscf_peer": "scscf1.ims.example.com",
"scscf_realm": "ims.example.com"
}
2. Mettre à Jour le Profil de l'Abonné
PATCH /ims_subscriber/{ims_subscriber_id}
Host: 10.4.2.140:8080
Content-Type: application/json
{
"xcap_profile": "<ss:communication-diversion xmlns:ss=\"http://uri.etsi.org/ngn/params/xml/simservs/xcap\" active=\"true\">...</ss:communication-diversion>"
}
Réponse :
{
"Status": "success",
"ims_subscriber_id": 12345
}
3. Recherche d'Abonné PCRF (basée sur IP)
GET /pcrf/subscriber_routing/{ip_address}
Host: 10.4.2.140:8080
But : Résoudre l'identité de l'abonné à partir de l'adresse IP de l'UE pour l'accès au web UI.
Réponse :
{
"subscriber_id": 67890,
"ip_address": "100.64.4.16",
"apn": "ims"
}
4. Obtenir les Informations de Base de l'Abonné
GET /subscriber/{subscriber_id}
Host: 10.4.2.140:8080
Réponse :
{
"subscriber_id": 67890,
"imsi": "505570000012345",
"msisdn": "15551234567"
}
5. Obtenir l'Abonné IMS par IMSI
GET /ims_subscriber/ims_subscriber_imsi/{imsi}
Host: 10.4.2.140:8080
Réponse : Même structure que le point de terminaison #1
Équilibrage de Charge HSS
Caractéristiques :
- Sans État : Chaque demande peut aller à n'importe quel pair HSS
- Distribution Aléatoire : Équilibré entre les pairs disponibles
- Synchronisation de Base de Données : Les pairs HSS partagent une base de données backend commune
- Pas de Sessions Collantes : Pas d'affinité client ou de persistance de session
Pourquoi REST au lieu de Diameter ?
Les réseaux 3GPP traditionnels utilisent l'interface Diameter Sh pour la communication XCAP↔HSS. Cette implémentation utilise l'API REST pour sa simplicité :
| Aspect | Diameter Sh (Traditionnel) | API REST (Cette Implémentation) |
|---|---|---|
| Protocole | Diameter (RFC 6733) | HTTP/JSON |
| Complexité | Élevée - nécessite une pile Diameter | Faible - bibliothèque HTTP standard |
| Format de Message | AVP (Attribut-Valeur-Paire) binaire | JSON (lisible par l'homme) |
| Port | 3868 (SCTP/TCP) | 8080 (HTTP) |
| Cas d'Utilisation | Réseaux de télécommunications de classe opérateur | Déploiements cloud-natifs, axés sur l'API |
| Intégration | Nécessite FreeDiameter, OpenDiameter | Client REST standard (requests) |
| Authentification | Sécurité TLS/Diameter | Jetons API, OAuth (futur) |
Avantages de l'Approche REST :
- Intégration plus facile avec les outils modernes de DevOps
- Débogage simplifié (curl, Postman)
- Compatibilité avec l'architecture cloud-native
- Complexité d'infrastructure réduite
- Amical pour les développeurs
Authentification BSF
Architecture de Démarrage Générique (GBA)
GBA est un cadre d'authentification 3GPP (TS 33.220) qui permet l'authentification mutuelle entre l'UE et les services réseau en utilisant des clés partagées dérivées de l'infrastructure d'authentification UMTS/LTE.
Statut de l'Implémentation BSF
Le serveur fournit des options d'authentification flexibles avec un support complet de BSF/GBA disponible lorsque nécessaire.
Configuration :
# config.yaml
bsf_support: False
Défi d'Authentification :
Lorsque l'authentification BSF est activée, le serveur émet un HTTP 401 Non Autorisé avec :
WWW-Authenticate: Digest realm="3GPP-bootstrapping@xcap.ims.example.com",
qop="auth-int",
nonce="<random-32-chars>",
opaque="<random-32-chars>",
algorithm="MD5",
domain="/"
Paramètres d'Authentification Digest
Lorsque l'authentification BSF est activée, le serveur défie les clients avec ces paramètres :
| Paramètre | Valeur | But |
|---|---|---|
| realm | 3GPP-bootstrapping@xcap.ims.example.com | Domaine d'authentification |
| qop | auth-int | Qualité de Protection : authentification avec protection de l'intégrité |
| algorithm | MD5 | Algorithme de hachage pour le calcul du digest |
| nonce | Chaîne aléatoire de 32 caractères | Défi du serveur pour prévenir les attaques par rejeu |
| opaque | Chaîne aléatoire de 32 caractères | Données spécifiques au serveur renvoyées par le client sans changement |
| domain | / | Espace URI pour lequel les identifiants sont valides |
Architecture d'Authentification
Le serveur XCAP fournit plusieurs mécanismes d'authentification pour s'adapter à différents scénarios de déploiement :
1. Authentification basée sur l'IP de l'UE via PCRF (Recommandé)
Le serveur XCAP peut authentifier les abonnés en validant leur adresse IP d'UE par rapport aux sessions actives dans le HSS/PCRF. Cela fournit une authentification sécurisée, consciente de la session, sans nécessiter d'infrastructure GBA.
Comment ça marche :
Avantages :
- Conscient de la Session : Seules les UEs authentifiées avec des sessions de données actives peuvent accéder à XCAP
- Pas de Secrets Partagés : Ne nécessite pas de clés pré-partagées ou de mots de passe
- Déconnexion Automatique : Lorsque l'UE se détache du réseau, la session IP se termine
- Support de Roaming : Fonctionne à travers les réseaux domestiques et visités (si PCRF accessible)
- Sûr pour NAT : IP directe de l'UE validée, pas d'en-têtes côté client
Propriétés de Sécurité :
- Vérification de l'IP Source : L'IP source de la connexion TCP ne peut pas être falsifiée dans une connexion établie
- Autorisation PCRF : Seules les UEs avec des contextes PDP/PDN actifs et autorisés ont des adresses IP
- Validation en Temps Réel : Chaque demande interroge l'état actuel du PCRF
- Liaison Abonné : La correspondance IP-abonné validée à chaque demande
Configuration :
# config.yaml
ue_subnets:
- '100.64.0.0/22' # Plage CGNAT de l'UE 1
- '100.64.4.0/22' # Plage CGNAT de l'UE 2
- '100.64.24.0/24' # Plage de test de l'UE
# Recherche PCRF via l'API HSS
hss_peers:
- '10.4.2.140:8080' # HSS avec point de terminaison PCRF
- '10.4.2.141:8080'
Point de Terminaison de l'API PCRF :
GET /pcrf/subscriber_routing/{ue_ip_address}
Host: hss-server:8080
Réponse :
{
"subscriber_id": 12345,
"ip_address": "100.64.4.16",
"apn": "ims",
"session_start": "2026-01-07T10:30:00Z",
"rat_type": "EUTRAN"
}
Flux de Validation :
- Extraire l'IP source de la connexion TCP de la requête HTTP
- Vérifier que l'IP est dans la plage
ue_subnetsconfigurée - Interroger le PCRF :
GET /pcrf/subscriber_routing/{source_ip} - Le PCRF retourne
subscriber_idsi une session active existe - Récupérer les détails de l'abonné :
GET /subscriber/{subscriber_id} - Obtenir l'IMSI, puis interroger :
GET /ims_subscriber/ims_subscriber_imsi/{imsi} - Comparer le MSISDN dans l'URL XCAP avec le MSISDN résolu par le PCRF
- Si correspondance : authentifié ✓
Cas d'Utilisation :
- Auto-Assistance Web : L'UE se connecte via des données mobiles, authentification automatique par IP
- Applications Mobiles : Clients XCAP natifs sur smartphones
- Entreprise : Appareils CPE avec allocations d'IP fixes pour l'UE
2. Liste Blanche de Sous-Réseau IP (Réseaux de Confiance)
Pour des serveurs d'application de confiance et des environnements de test :
# config.yaml
as_allowed_ips:
- '10.4.3.60' # Serveur d'Application SIP
- '10.4.3.61' # Serveur de test
Cas d'Utilisation :
- Serveurs d'Applications SIP récupérant des profils d'abonnés lors du traitement des appels
- Outils de gestion de réseau interne
- Environnements de développement/test
3. Résolution SIP URI vers MSISDN
Le serveur extrait l'identité de l'abonné de l'URL XCAP elle-même :
/simservs.ngn.etsi.org/users/sip:+15551234567@ims.example.com/simservs.xml
└─────────┬─────────┘
MSISDN: 15551234567
Le serveur analyse l'URI SIP pour extraire le numéro de téléphone E.164 (MSISDN).
4. En-tête X-3GPP-Intended-Identity
Le serveur prend en charge l'en-tête standard 3GPP pour l'assertion d'identité :
GET /simservs.xml HTTP/1.1
Host: xcap.ims.example.com
X-3GPP-Intended-Identity: sip:+15551234567@ims.example.com
Cet en-tête permet aux clients de spécifier explicitement l'identité de l'abonné cible pour la demande.
Activation de l'Authentification BSF
Pour activer l'authentification GBA en production :
- Déployer le Serveur BSF : Mettre en œuvre le serveur de démarrage 3GPP TS 33.220
- Configurer Diameter Zh : Connecter le BSF au HSS via Diameter
- Mettre à Jour config.yaml :
bsf_support: True
bsf_url: "http://bsf-server:8090" - Implémenter la Récupération de Clé NAF : Ajouter un appel API BSF pour récupérer Ks_NAF pour validation
- Ajouter la Logique de Validation Digest : Vérifier la réponse du client en utilisant la clé partagée
Types de Documents XCAP
Structure du Document Racine Simservs
Tous les documents XCAP sont enveloppés dans l'élément racine simservs :
<?xml version="1.0" encoding="UTF-8"?>
<simservs xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
xmlns:cp="urn:ietf:params:xml:ns:common-policy">
<!-- Services de Présentation d'Identité -->
<originating-identity-presentation active="true"/>
<originating-identity-presentation-restriction active="true">
<default-behaviour>presentation-not-restricted</default-behaviour>
</originating-identity-presentation-restriction>
<!-- Renvoi d'Appels (Diversion de Communication) -->
<communication-diversion active="true">
<NoReplyTimer>20</NoReplyTimer>
<cp:ruleset>
<!-- Règles de renvoi d'appels -->
</cp:ruleset>
</communication-diversion>
<!-- Blocage d'Appels -->
<incoming-communication-barring active="false">
<cp:ruleset>
<!-- Règles de blocage entrant -->
</cp:ruleset>
</incoming-communication-barring>
<outgoing-communication-barring active="false">
<cp:ruleset>
<!-- Règles de blocage sortant -->
</cp:ruleset>
</outgoing-communication-barring>
</simservs>
Détails du Type de Document
1. Diversion de Communication (Renvoi d'Appels)
But : Rediriger les appels entrants vers des destinations alternatives en fonction des conditions
Modèle d'URL XCAP :
/simservs.ngn.etsi.org/users/{sip_uri}/simservs.xml/~~/simservs/communication-diversion
Types de Règles :
| ID de Règle | Condition | Description |
|---|---|---|
| cfa | (aucune) | Renvoi d'Appels Inconditionnel - renvoyer tous les appels immédiatement |
| cfb | occupé | Renvoi d'Appels sur Occupé - renvoyer lorsque la ligne est occupée |
| cfna | pas de réponse | Renvoi d'Appels sur Pas de Réponse - renvoyer après l'expiration de NoReplyTimer |
| cfnrc | non joignable | Renvoi d'Appels sur Non Joignable - renvoyer lorsque l'appareil est hors ligne |
| cfnreg | non enregistré | Renvoi d'Appels sur Non Enregistré - renvoyer lorsque non enregistré à l'IMS |
Structure XML :
<ss:communication-diversion xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
active="true">
<ss:NoReplyTimer>20</ss:NoReplyTimer>
<cp:ruleset xmlns:cp="urn:ietf:params:xml:ns:common-policy">
<!-- Renvoi Inconditionnel -->
<cp:rule id="cfa">
<cp:conditions></cp:conditions>
<cp:actions>
<ss:forward-to>
<ss:target>tel:+15559999999</ss:target>
<ss:notify-caller>false</ss:notify-caller>
</ss:forward-to>
</cp:actions>
</cp:rule>
<!-- Renvoi sur Occupé -->
<cp:rule id="cfb">
<cp:conditions>
<ss:busy/>
</cp:conditions>
<cp:actions>
<ss:forward-to>
<ss:target>tel:+15558888888</ss:target>
<ss:notify-caller>false</ss:notify-caller>
</ss:forward-to>
</cp:actions>
</cp:rule>
</cp:ruleset>
</ss:communication-diversion>
2. Blocage de Communication Entrant
But : Bloquer les appels entrants de catégories spécifiques
Modèle d'URL XCAP :
/simservs.ngn.etsi.org/users/{sip_uri}/simservs.xml/~~/simservs/incoming-communication-barring
Types de Règles :
| ID de Règle | Condition | Description |
|---|---|---|
| all | (aucune) | Bloquer tous les appels entrants |
| international | international | Bloquer les appels provenant de numéros internationaux |
| international-exHC | international-exHC | Bloquer les appels internationaux sauf pays d'origine |
| roaming | roaming | Bloquer les appels entrants pendant le roaming |
Structure XML :
<ss:incoming-communication-barring xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
active="true">
<cp:ruleset xmlns:cp="urn:ietf:params:xml:ns:common-policy">
<cp:rule id="international">
<cp:conditions>
<ss:international/>
</cp:conditions>
<cp:actions>
<ss:allow>false</ss:allow>
</cp:actions>
</cp:rule>
<cp:rule id="roaming">
<cp:conditions>
<ss:roaming/>
</cp:conditions>
<cp:actions>
<ss:allow>false</ss:allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
</ss:incoming-communication-barring>
3. Blocage de Communication Sortant
But : Restreindre les appels sortants vers des destinations spécifiques
Modèle d'URL XCAP :
/simservs.ngn.etsi.org/users/{sip_uri}/simservs.xml/~~/simservs/outgoing-communication-barring
Types de Règles : Même que le blocage entrant
Structure XML :
<ss:outgoing-communication-barring xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
active="false">
<cp:ruleset xmlns:cp="urn:ietf:params:xml:ns:common-policy">
<cp:rule id="international">
<cp:conditions>
<ss:international/>
</cp:conditions>
<cp:actions>
<ss:allow>false</ss:allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
</ss:outgoing-communication-barring>
4. Restriction de Présentation de l'Identité d'Origine (ID de l'Appelant)
But : Contrôler si l'identité de l'appelant est affichée aux parties appelées
Modèle d'URL XCAP :
/simservs.ngn.etsi.org/users/{sip_uri}/simservs.xml/~~/simservs/originating-identity-presentation-restriction
Structure XML :
<ss:originating-identity-presentation-restriction active="true">
<ss:default-behaviour>presentation-restricted</ss:default-behaviour>
</ss:originating-identity-presentation-restriction>
Options :
presentation-restricted- Cacher l'identité de l'appelant (Anonyme)presentation-not-restricted- Afficher l'identité de l'appelant (Normal)
Diagrammes de Flux d'Appel
Flux de Configuration de Renvoi d'Appels
Flux d'Auto-Assistance Web
Flux d'Application du Blocage d'Appels
Flux d'Authentification BSF GBA (Lorsqu'Activé)
Exemples de Documents XCAP
Document Simservs Complet (Sans Identité)
<?xml version="1.0" encoding="UTF-8"?>
<simservs xmlns="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
xmlns:cp="urn:ietf:params:xml:ns:common-policy"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- Services d'Identité d'Appelant -->
<originating-identity-presentation active="true"/>
<originating-identity-presentation-restriction active="true">
<default-behaviour>presentation-not-restricted</default-behaviour>
</originating-identity-presentation-restriction>
<!-- Configuration de Renvoi d'Appels -->
<communication-diversion active="true">
<NoReplyTimer>20</NoReplyTimer>
<cp:ruleset>
<!-- Renvoi Inconditionnel (Désactivé) -->
<cp:rule id="cfa">
<cp:conditions></cp:conditions>
<cp:actions>
<forward-to>
<target>tel:+15556666666</target>
<notify-caller>false</notify-caller>
</forward-to>
</cp:actions>
</cp:rule>
<!-- Renvoi sur Occupé (Activé) -->
<cp:rule id="cfb">
<cp:conditions>
<busy/>
</cp:conditions>
<cp:actions>
<forward-to>
<target>tel:+15557777777</target>
<notify-caller>false</notify-caller>
</forward-to>
</cp:actions>
</cp:rule>
<!-- Renvoi sur Pas de Réponse (Activé) -->
<cp:rule id="cfna">
<cp:conditions>
<no-answer/>
</cp:conditions>
<cp:actions>
<forward-to>
<target>tel:+15558888888</target>
<notify-caller>false</notify-caller>
</forward-to>
</cp:actions>
</cp:rule>
<!-- Renvoi sur Non Joignable (Activé) -->
<cp:rule id="cfnrc">
<cp:conditions>
<not-reachable/>
</cp:conditions>
<cp:actions>
<forward-to>
<target>tel:+15559999999</target>
<notify-caller>false</notify-caller>
</forward-to>
</cp:actions>
</cp:rule>
<!-- Renvoi sur Non Enregistré (Activé) -->
<cp:rule id="cfnreg">
<cp:conditions>
<not-registered/>
</cp:conditions>
<cp:actions>
<forward-to>
<target>tel:+15559999999</target>
<notify-caller>false</notify-caller>
</forward-to>
</cp:actions>
</cp:rule>
</cp:ruleset>
</communication-diversion>
<!-- Blocage d'Appels Entrants -->
<incoming-communication-barring active="false">
<cp:ruleset>
<!-- Bloquer Tous les Entrants (Désactivé) -->
<cp:rule id="all">
<cp:conditions></cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
<!-- Bloquer International Entrant (Désactivé) -->
<cp:rule id="international">
<cp:conditions>
<international/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
<!-- Bloquer International Sauf Pays d'Origine (Désactivé) -->
<cp:rule id="international-exHC">
<cp:conditions>
<international-exHC/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
<!-- Bloquer Pendant Roaming (Désactivé) -->
<cp:rule id="roaming">
<cp:conditions>
<roaming/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
</incoming-communication-barring>
<!-- Blocage d'Appels Sortants -->
<outgoing-communication-barring active="false">
<cp:ruleset>
<!-- Bloquer Tous les Sortants (Désactivé) -->
<cp:rule id="all">
<cp:conditions></cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
<!-- Bloquer International Sortant (Désactivé) -->
<cp:rule id="international">
<cp:conditions>
<international/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
<!-- Bloquer International Sauf Pays d'Origine (Désactivé) -->
<cp:rule id="international-exHC">
<cp:conditions>
<international-exHC/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
<!-- Bloquer Pendant Roaming (Désactivé) -->
<cp:rule id="roaming">
<cp:conditions>
<roaming/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
</outgoing-communication-barring>
</simservs>
Données d'Abonné YAML (Format de Stockage HSS)
Ceci est la représentation interne stockée dans le champ xcap_profile du HSS :
NoReplyTimer: 20
call_forwarding:
cfa:
enabled: false
target: tel:+15556666666
cfb:
condition: busy
enabled: true
target: tel:+15557777777
cfna:
condition: no-answer
enabled: true
target: tel:+15558888888
cfnrc:
condition: not-reachable
enabled: true
target: tel:+15559999999
cfnreg:
condition: not-registered
enabled: true
target: tel:+15559999999
call_barring_incoming:
all:
allow: false
international:
allow: false
condition: international
international-exHC:
allow: false
condition: international-exHC
roaming:
allow: false
condition: roaming
call_barring_outgoing:
all:
allow: false
international:
allow: false
condition: international
international-exHC:
allow: false
condition: international-exHC
roaming:
allow: false
condition: roaming
Exemple de Requête XCAP PUT (Activer CFB)
Requête :
PUT /simservs.ngn.etsi.org/users/sip:+15551234567@ims.example.com/simservs.xml/~~/simservs/communication-diversion/cp:ruleset/cfb HTTP/1.1
Host: xcap.ims.example.com:5000
Content-Type: application/xcap-el+xml
Content-Length: 342
<?xml version="1.0" encoding="UTF-8"?>
<cp:rule id="cfb" xmlns:cp="urn:ietf:params:xml:ns:common-policy"
xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap">
<cp:conditions>
<ss:busy/>
</cp:conditions>
<cp:actions>
<ss:forward-to>
<ss:target>tel:+15557777777</ss:target>
<ss:notify-caller>false</ss:notify-caller>
</ss:forward-to>
</cp:actions>
</cp:rule>
Réponse :
HTTP/1.1 200 OK
Content-Type: application/xcap-el+xml
ETag: "eti87"
Content-Length: 0
Exemple de Requête XCAP GET (Récupérer Toutes les Règles CF)
Requête :
GET /simservs.ngn.etsi.org/users/sip:+15551234567@ims.example.com/simservs.xml/~~/simservs/communication-diversion HTTP/1.1
Host: xcap.ims.example.com:5000
Accept: application/xcap-el+xml
Réponse :
HTTP/1.1 200 OK
Content-Type: application/xcap-el+xml
ETag: "eti87"
Content-Length: 1456
<?xml version="1.0" encoding="UTF-8"?>
<ss:communication-diversion xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap"
xmlns:cp="urn:ietf:params:xml:ns:common-policy"
active="true">
<ss:NoReplyTimer>20</ss:NoReplyTimer>
<cp:ruleset>
<cp:rule id="cfa">
<cp:conditions></cp:conditions>
<cp:actions>
<ss:forward-to>
<ss:target>tel:+15556666666</ss:target>
<ss:notify-caller>false</ss:notify-caller>
</ss:forward-to>
</cp:actions>
</cp:rule>
<cp:rule id="cfb">
<cp:conditions>
<ss:busy/>
</cp:conditions>
<cp:actions>
<ss:forward-to>
<ss:target>tel:+15557777777</ss:target>
<ss:notify-caller>false</ss:notify-caller>
</ss:forward-to>
</cp:actions>
</cp:rule>
<!-- Règles supplémentaires omises pour la brièveté -->
</cp:ruleset>
</ss:communication-diversion>
Exemple de Mise à Jour Partielle (Changer NoReplyTimer)
Requête :
PUT /simservs.ngn.etsi.org/users/sip:+15551234567@ims.example.com/simservs.xml/~~/simservs/communication-diversion/NoReplyTimer HTTP/1.1
Host: xcap.ims.example.com:5000
Content-Type: application/xcap-el+xml
Content-Length: 87
<?xml version="1.0" encoding="UTF-8"?>
<ss:NoReplyTimer xmlns:ss="http://uri.etsi.org/ngn/params/xml/simservs/xcap">30</ss:NoReplyTimer>
Réponse :
HTTP/1.1 200 OK
Content-Type: application/xcap-el+xml
ETag: "eti87"
Guide de Configuration
Référence config.yaml
# Serveurs Backend HSS (Équilibré)
hss_peers:
- '10.4.2.140:8080' # opt-se2-hss01
- '10.4.2.141:8080' # opt-se2-hss02
# OCS (Système de Facturation en Ligne) - Actuellement inutilisé
ocs_peers:
- '10.4.2.140'
- '10.4.2.141'
# Bascule d'Authentification BSF/GBA
bsf_support: False # Défini sur True pour la production GBA
# Configuration de Domaine IMS
ims_domain: 'ims.example.com'
diameter_realm: 'example.com'
# Bascule de Préfixe d'Espace de Noms XML
ss_prefix: True # Inclure le préfixe 'ss:' dans le XML généré
# Plages IP Autorisées de l'UE (Pour l'authentification basée sur IP)
ue_subnets:
- '100.64.0.0/22' # Plage CGNAT de l'UE 1
- '100.64.4.0/22' # Plage CGNAT de l'UE 2
- '100.64.24.0/24' # Plage CGNAT de l'UE 3
# IPs des Serveurs d'Application de Confiance
as_allowed_ips:
- '10.4.3.60' # opt-se2-as01
# Configuration de Test Unitaire
unit_test_data:
source_ip: "100.64.4.16"
base_url: "http://localhost:5000"
msisdn: "15551234567" # MSISDN d'abonné de test
Portail d'Auto-Assistance Web
Pour les abonnés dont les appareils ne prennent pas en charge nativement XCAP, le serveur fournit un portail d'auto-assistance basé sur le web. Les utilisateurs peuvent naviguer directement vers le serveur XCAP depuis leur appareil mobile pour gérer leurs paramètres via une interface HTML intuitive.
Méthode d'Accès :
Les utilisateurs ouvrent simplement un navigateur web sur leur smartphone et naviguent vers l'URL du serveur XCAP :
http://xcap.ims.example.com:5000/
Authentification Automatique :
Lors de l'accès depuis un appareil mobile connecté au réseau de l'opérateur, l'authentification se fait automatiquement par validation de l'IP de l'UE :
- L'appareil de l'utilisateur a déjà une session de données active (contexte PDP/PDN)
- Le serveur XCAP extrait l'IP source de la connexion HTTP
- Le serveur interroge le PCRF HSS pour résoudre IP → identité de l'abonné
- L'utilisateur est automatiquement connecté - aucun nom d'utilisateur/mot de passe requis
- L'UI Web affiche les paramètres actuels de renvoi d'appels, de blocage d'appels et d'identité de l'appelant
Fonctionnalités :
- Gestion du Renvoi d'Appels : Activer/désactiver les règles de renvoi, définir les numéros de destination
- Contrôle du Blocage d'Appels : Configurer les restrictions d'appels entrants et sortants
- Minuteur de Non-Réponse : Ajuster le délai avant le renvoi d'appels en cas de non-réponse
- Mises à Jour en Temps Réel : Changements immédiatement reflétés dans le profil de l'abonné
- Optimisé pour Mobile : Design réactif pour les navigateurs de smartphones
Cas d'Utilisation :
- Appareils Hérités : Smartphones sans prise en charge native du client XCAP
- Appareils iOS : iPhones qui n'exposent pas les paramètres XCAP dans l'application Paramètres
- Variantes Android : Versions Android sans intégration XCAP spécifique à l'opérateur
- Préférence Utilisateur : Abonnés qui préfèrent l'interface web aux menus de paramètres de l'appareil
- Accès Rapide : Changements temporaires lors de déplacements ou de roaming
Flux de Travail Exemple :
Cela élimine le besoin d'un logiciel client XCAP spécialisé et fournit un accès universel via des navigateurs web standard.
Référence API
Structure de l'URL de Base
http(s)://xcap.ims.example.com:5000/simservs.ngn.etsi.org/users/{sip_uri}/simservs.xml[/~~/selector]
Composants :
- Racine :
simservs.ngn.etsi.org(AUID - Identifiant Unique d'Application) - XUI :
users/{sip_uri}(Identifiant d'Utilisateur XCAP) - Document :
simservs.xml - Sélecteur de Nœud :
/~~/simservs/communication-diversion/...(basé sur XPath)
Tableau de Référence des Points de Terminaison
| Opération | Méthode | URL XCAP | Description |
|---|---|---|---|
| Obtenir tous les services | GET | /users/{sip}/simservs.xml | Récupérer le document simservs complet |
| Obtenir les règles CF | GET | /users/{sip}/simservs.xml/~~/simservs/communication-diversion | Obtenir toutes les règles de renvoi d'appels |
| Obtenir une règle CF spécifique | GET | /users/{sip}/simservs.xml/~~/simservs/communication-diversion/cp:ruleset/{rule_id} | Obtenir une seule règle CF (cfa, cfb, etc.) |
| Mettre à jour une règle CF | PUT | /users/{sip}/simservs.xml/~~/simservs/communication-diversion/cp:ruleset/{rule_id} | Mettre à jour la règle de renvoi d'appels |
| Mettre à jour une condition CF | PUT | /users/{sip}/simservs.xml/~~/simservs/communication-diversion/cp:ruleset/{rule_id}/{element} | Mettre à jour un élément de règle (target, condition) |
| Définir NoReplyTimer | PUT | /users/{sip}/simservs.xml/~~/simservs/communication-diversion/NoReplyTimer | Changer le délai de non-réponse |
| Obtenir l'identité de l'appelant | GET | /users/{sip}/simservs.xml/~~/simservs/originating-identity-presentation-restriction | Obtenir le paramètre de restriction de l'identité de l'appelant |
| Obtenir le blocage CB entrant | GET | /users/{sip}/simservs.xml/~~/simservs/incoming-communication-barring/cp:ruleset/{rule_id} | Obtenir la règle de blocage entrant |
| Mettre à jour le blocage CB entrant | PUT | /users/{sip}/simservs.xml/~~/simservs/incoming-communication-barring/cp:ruleset/{rule_id} | Mettre à jour la règle de blocage entrant |
| Obtenir le blocage CB sortant | GET | /users/{sip}/simservs.xml/~~/simservs/outgoing-communication-barring/cp:ruleset/{rule_id} | Obtenir la règle de blocage sortant |
| Mettre à jour le blocage CB sortant | PUT | /users/{sip}/simservs.xml/~~/simservs/outgoing-communication-barring/cp:ruleset/{rule_id} | Mettre à jour la règle de blocage sortant |
En-têtes HTTP
En-têtes de Requête
Content-Type: application/xcap-el+xml
Accept: application/xcap-el+xml
X-3GPP-Intended-Identity: sip:+15551234567@ims.example.com
En-têtes de Réponse
Content-Type: application/xcap-el+xml
ETag: "eti87"
Réponses d'Erreur
| Code HTTP | Signification | Description |
|---|---|---|
| 200 OK | Succès | Opération complétée avec succès |
| 401 Non Autorisé | Authentification Requise | Défi d'authentification BSF/GBA (si activé) |
| 404 Non Trouvé | Ressource Non Trouvée | Abonné ou document n'existe pas |
| 409 Conflit | Conflit | Mismatch de version de document (conflit ETag) |
| 500 Erreur Interne du Serveur | Erreur Serveur | Échec de communication HSS ou erreur de traitement |
Points de Terminaison de l'UI Web
| Point de Terminaison | Méthode | But |
|---|---|---|
/ | GET | Page d'informations sur l'abonné (recherche basée sur IP) |
/call_forwarding | GET | Afficher le formulaire de gestion du renvoi d'appels |
/call_forwarding | POST | Mettre à jour la règle de renvoi d'appels via l'UI web |
/api | GET | Documentation Swagger UI |
Format de Journalisation
2026-01-07 10:15:32,456 12345 {/var/log/XCAP.log:123} INFO GetSubscriberData appelé pour MSISDN: 15551234567
Champs : horodatage, ID de processus, emplacement du fichier, niveau de journal, message
Considérations de Performance
- Conception Sans État : Aucun état de session maintenu dans le serveur XCAP
- Distribution de Charge : Sélection aléatoire du pair HSS par demande
- Mise en Cache des Modèles : Modèles de documents chargés une fois au démarrage
- Traitement XML : Analyse et formatage en mémoire
- Requêtes de Base de Données : Une requête HSS par GET, deux par PUT (lecture-modification-écriture)
Conclusion
Ce Serveur d'Application XCAP fournit une mise en œuvre prête pour la production de la gestion des Services Complémentaires IMS 3GPP. Points forts :
Forces :
- Conformité totale aux normes XCAP ETSI/3GPP
- Intégration HSS basée sur API REST pour un déploiement cloud-native
- Plusieurs options d'authentification, y compris BSF/GBA et validation basée sur l'IP de l'UE
- Portail d'auto-assistance basé sur le web pour une compatibilité universelle des appareils
- Haute disponibilité avec des pairs HSS équilibrés
Scénarios de Déploiement :
- Opérateurs de Réseaux Mobiles (MNO) et Opérateurs de Réseaux Mobiles Virtuels (MVNO)
- Déploiements IMS d'entreprise
- Plateformes de services VoLTE/VoWiFi
- Infrastructure de télécommunications cloud-native
- Réseaux privés LTE/5G
Références
Spécifications 3GPP et ETSI
| Spécification | Titre | Description | URL |
|---|---|---|---|
| ETSI TS 183 063 | Services de simulation PSTN/ISDN basés sur IMS | Spécification principale définissant le schéma XML simservs pour les services complémentaires IMS | Portail ETSI |
| 3GPP TS 24.623 | Protocole d'Accès à la Configuration XML (XCAP) sur l'interface Ut pour Manipuler les Services Complémentaires | Définit l'interface XCAP Ut entre l'UE et le serveur d'application pour la configuration des services complémentaires | Portail 3GPP |
| 3GPP TS 24.238 | Configuration utilisateur basée sur le Protocole d'Initiation de Session (SIP) ; Étape 3 | Spécifie les mécanismes basés sur SIP pour la gestion de la configuration utilisateur dans IMS | Portail 3GPP |
| 3GPP TS 33.220 | Architecture d'Authentification Générique (GAA) ; Architecture de Démarrage Générique (GBA) | Définit le cadre BSF et GBA pour le démarrage des identifiants de sécurité | [Portail 3GPP](https://www.3gpp.org/DynaReport |