Aller au contenu principal

Serveur d'Application XCAP - Documentation sur l'Utilisation et l'Architecture

Table des Matières

  1. Résumé Exécutif
  2. XCAP dans les Réseaux 3GPP
  3. Architecture Système
  4. Intégration HSS
  5. Authentification BSF
  6. Types de Documents XCAP
  7. Diagrammes de Flux d'Appel
  8. Exemples de Documents XCAP
  9. Guide de Configuration
  10. 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 :

  1. Diversion de Communication (Renvoi d'Appels)

    • Inconditionnel (CFU)
    • Occupé (CFB)
    • Pas de Réponse (CFNA)
    • Non Joignable (CFNRc)
    • Non Enregistré (CFNReg)
  2. 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
  3. 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

NormeTitrePertinence
ETSI TS 183 063Services de simulation PSTN/ISDN basés sur IMSSpécification principale pour le schéma XML simservs
3GPP TS 24.623Protocole d'Accès à la Configuration XML (XCAP) sur l'interface UtSpécifications de l'interface XCAP
3GPP TS 24.238Configuration utilisateur basée sur le Protocole d'Initiation de Session (SIP)Gestion de la configuration utilisateur
3GPP TS 33.220Architecture d'Authentification Générique (GAA)Cadre d'authentification BSF/GBA
RFC 4825Le Protocole d'Accès à la Configuration XML (XCAP)Définition de base du protocole XCAP
RFC 4745Politique 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

ComposantButPort/Protocole
Serveur XCAPServeur d'application principal, points de terminaison API REST5000/HTTP
Gestionnaire XMLConversion et manipulation de documents XMLN/A
Client HSSRécupère/met à jour les données des abonnés via l'API REST8080/HTTP
Moteur de ModèleGénère XML XCAP à partir des données des abonnésN/A
Auth BSFAuthentification par hachage GBA optionnelleN/A
Interface WebPortail d'auto-assistance pour les abonnés5000/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é :

AspectDiameter Sh (Traditionnel)API REST (Cette Implémentation)
ProtocoleDiameter (RFC 6733)HTTP/JSON
ComplexitéÉlevée - nécessite une pile DiameterFaible - bibliothèque HTTP standard
Format de MessageAVP (Attribut-Valeur-Paire) binaireJSON (lisible par l'homme)
Port3868 (SCTP/TCP)8080 (HTTP)
Cas d'UtilisationRéseaux de télécommunications de classe opérateurDéploiements cloud-natifs, axés sur l'API
IntégrationNécessite FreeDiameter, OpenDiameterClient REST standard (requests)
AuthentificationSécurité TLS/DiameterJetons 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ètreValeurBut
realm3GPP-bootstrapping@xcap.ims.example.comDomaine d'authentification
qopauth-intQualité de Protection : authentification avec protection de l'intégrité
algorithmMD5Algorithme de hachage pour le calcul du digest
nonceChaîne aléatoire de 32 caractèresDéfi du serveur pour prévenir les attaques par rejeu
opaqueChaîne aléatoire de 32 caractèresDonné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 :

  1. Extraire l'IP source de la connexion TCP de la requête HTTP
  2. Vérifier que l'IP est dans la plage ue_subnets configurée
  3. Interroger le PCRF : GET /pcrf/subscriber_routing/{source_ip}
  4. Le PCRF retourne subscriber_id si une session active existe
  5. Récupérer les détails de l'abonné : GET /subscriber/{subscriber_id}
  6. Obtenir l'IMSI, puis interroger : GET /ims_subscriber/ims_subscriber_imsi/{imsi}
  7. Comparer le MSISDN dans l'URL XCAP avec le MSISDN résolu par le PCRF
  8. 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 :

  1. Déployer le Serveur BSF : Mettre en œuvre le serveur de démarrage 3GPP TS 33.220
  2. Configurer Diameter Zh : Connecter le BSF au HSS via Diameter
  3. Mettre à Jour config.yaml :
    bsf_support: True
    bsf_url: "http://bsf-server:8090"
  4. Implémenter la Récupération de Clé NAF : Ajouter un appel API BSF pour récupérer Ks_NAF pour validation
  5. 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ègleConditionDescription
cfa(aucune)Renvoi d'Appels Inconditionnel - renvoyer tous les appels immédiatement
cfboccupéRenvoi d'Appels sur Occupé - renvoyer lorsque la ligne est occupée
cfnapas de réponseRenvoi d'Appels sur Pas de Réponse - renvoyer après l'expiration de NoReplyTimer
cfnrcnon joignableRenvoi d'Appels sur Non Joignable - renvoyer lorsque l'appareil est hors ligne
cfnregnon 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ègleConditionDescription
all(aucune)Bloquer tous les appels entrants
internationalinternationalBloquer les appels provenant de numéros internationaux
international-exHCinternational-exHCBloquer les appels internationaux sauf pays d'origine
roamingroamingBloquer 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 :

  1. L'appareil de l'utilisateur a déjà une session de données active (contexte PDP/PDN)
  2. Le serveur XCAP extrait l'IP source de la connexion HTTP
  3. Le serveur interroge le PCRF HSS pour résoudre IP → identité de l'abonné
  4. L'utilisateur est automatiquement connecté - aucun nom d'utilisateur/mot de passe requis
  5. 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érationMéthodeURL XCAPDescription
Obtenir tous les servicesGET/users/{sip}/simservs.xmlRécupérer le document simservs complet
Obtenir les règles CFGET/users/{sip}/simservs.xml/~~/simservs/communication-diversionObtenir toutes les règles de renvoi d'appels
Obtenir une règle CF spécifiqueGET/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 CFPUT/users/{sip}/simservs.xml/~~/simservs/communication-diversion/cp:ruleset/{rule_id}Mettre à jour la règle de renvoi d'appels
Mettre à jour une condition CFPUT/users/{sip}/simservs.xml/~~/simservs/communication-diversion/cp:ruleset/{rule_id}/{element}Mettre à jour un élément de règle (target, condition)
Définir NoReplyTimerPUT/users/{sip}/simservs.xml/~~/simservs/communication-diversion/NoReplyTimerChanger le délai de non-réponse
Obtenir l'identité de l'appelantGET/users/{sip}/simservs.xml/~~/simservs/originating-identity-presentation-restrictionObtenir le paramètre de restriction de l'identité de l'appelant
Obtenir le blocage CB entrantGET/users/{sip}/simservs.xml/~~/simservs/incoming-communication-barring/cp:ruleset/{rule_id}Obtenir la règle de blocage entrant
Mettre à jour le blocage CB entrantPUT/users/{sip}/simservs.xml/~~/simservs/incoming-communication-barring/cp:ruleset/{rule_id}Mettre à jour la règle de blocage entrant
Obtenir le blocage CB sortantGET/users/{sip}/simservs.xml/~~/simservs/outgoing-communication-barring/cp:ruleset/{rule_id}Obtenir la règle de blocage sortant
Mettre à jour le blocage CB sortantPUT/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 HTTPSignificationDescription
200 OKSuccèsOpération complétée avec succès
401 Non AutoriséAuthentification RequiseDéfi d'authentification BSF/GBA (si activé)
404 Non TrouvéRessource Non TrouvéeAbonné ou document n'existe pas
409 ConflitConflitMismatch de version de document (conflit ETag)
500 Erreur Interne du ServeurErreur ServeurÉchec de communication HSS ou erreur de traitement

Points de Terminaison de l'UI Web

Point de TerminaisonMéthodeBut
/GETPage d'informations sur l'abonné (recherche basée sur IP)
/call_forwardingGETAfficher le formulaire de gestion du renvoi d'appels
/call_forwardingPOSTMettre à jour la règle de renvoi d'appels via l'UI web
/apiGETDocumentation 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écificationTitreDescriptionURL
ETSI TS 183 063Services de simulation PSTN/ISDN basés sur IMSSpécification principale définissant le schéma XML simservs pour les services complémentaires IMSPortail ETSI
3GPP TS 24.623Protocole d'Accès à la Configuration XML (XCAP) sur l'interface Ut pour Manipuler les Services ComplémentairesDéfinit l'interface XCAP Ut entre l'UE et le serveur d'application pour la configuration des services complémentairesPortail 3GPP
3GPP TS 24.238Configuration utilisateur basée sur le Protocole d'Initiation de Session (SIP) ; Étape 3Spécifie les mécanismes basés sur SIP pour la gestion de la configuration utilisateur dans IMSPortail 3GPP
3GPP TS 33.220Architecture 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