خادم تطبيق XCAP - وثائق الاستخدام والهندسة المعمارية
جدول المحتويات
- الملخص التنفيذي
- XCAP في شبكات 3GPP
- هندسة النظام
- تكامل HSS
- مصادقة BSF
- أنواع مستندات XCAP
- مخططات تدفق المكالمات
- مستندات XCAP مثال
- دليل التكوين
- مرجع API
الملخص التنفيذي
يوفر خادم تطبيق XCAP (بروتوكول الوصول إلى تكوين XML) إدارة خدمات IMS (نظام الوسائط المتعددة عبر بروتوكول الإنترنت) الإضافية لشبكات الاتصالات. يتيح للمشتركين إدارة إعدادات تحويل المكالمات، وحظر المكالمات، وعرض معرف المتصل من خلال مس��ندات XML موحدة.
الميزات الرئيسية:
- متوافق مع 3GPP: ينفذ ETSI TS 183 063 لخدمات IMS الإضافية
- تكامل HSS: اتصال قائم على واجهة برمجة التطبيقات REST مع خادم المشتركين المنزلي
- جاهز لـ BSF: إطار عمل لمصادقة بنية التمهيد العامة (GBA)
- خدمات متعددة: تحويل المكالمات، حظر المكالمات (الواردة/الصادرة)، التحكم في معرف المتصل
- توفر عالية: توازن الحمل عبر عدة أقران HSS
- واجهة ويب: بوابة خدمة ذاتية لإدارة المشتركين
XCAP في شبكات 3GPP
ما هو XCAP؟
XCAP (بروتوكول الوصول إلى تكوين XML) هو بروتوكول موحد قائم على HTTP تم تعريفه بواسطة IETF (RFC 4825) وتم اعتماده من قبل 3GPP لإدارة بيانات تكوين المستخدم في شبكات IMS. يسمح للأجهزة المحمولة والتطبيقات بإنشاء، وقراءة، وتحديث، وحذف مستندات XML المخزنة على خوادم الشبكة.
الدور في هندسة IMS 3GPP
فئات خدمات XCAP
يدير خادم XCAP ثلاث فئات رئيسية من خدمات IMS الإضافية:
-
تحويل الاتصال (تحويل المكالمات)
- غير مشروط (CFU)
- مشغول (CFB)
- لا إجابة (CFNA)
- غير قابل للوصول (CFNRc)
- غير مسجل (CFNReg)
-
حظر الاتصال (حظر المكالمات)
- الوارد: جميع المكالمات، دولية، دولية باستثناء الدولة الأم، أثناء التجوال
- الصادر: جميع المكالمات، دولية، دولية باستثناء الدولة الأم، أثناء التجوال
-
خدمات عرض الهوية
- عرض الهوية الأصلية (OIP) - عرض معرف المتصل
- تقييد عرض الهوية الأصلية (OIR) - إخفاء معرف المتصل
الامتثال لمعايير 3GPP
| المعيار | العنوان | الصلة |
|---|---|---|
| ETSI TS 183 063 | خدمات محاكاة PSTN/ISDN المستندة إلى IMS | المواصفة الأساسية لمخطط XML simservs |
| 3GPP TS 24.623 | بروتوكول الوصول إلى تكوين XML (XCAP) عبر واجهة Ut | مواصفات واجهة XCAP |
| 3GPP TS 24.238 | تكوين المستخدم المستند إلى بروتوكول بدء الجلسة (SIP) | إدارة تكوين المستخدم |
| 3GPP TS 33.220 | بنية المصادقة العامة (GAA) | إطار مصادقة BSF/GBA |
| RFC 4825 | بروتوكول الوصول إلى تكوين XML (XCAP) | تعريف بروتوكول XCAP الأساسي |
| RFC 4745 | سياسة شائعة: تنسيق مستند للتعبير عن تفضيلات الخصوصية | مساحة XML لظروف القاعدة |
هندسة النظام
عرض المكونات على مستوى عالٍ
هندسة تدفق البيانات
مسؤوليات المكونات
| المكون | الغرض | المنفذ/البروتوكول |
|---|---|---|
| خادم XCAP | خادم التطبيق الرئيسي، نقاط نهاية واجهة برمجة التطبيقات REST | 5000/HTTP |
| معالج XML | تحويل ومعالجة مستندات XML | N/A |
| عميل HSS | يسترجع/يحدث بيانات المشترك عبر واجهة برمجة التطبيقات REST | 8080/HTTP |
| محرك القالب | يولد XML XCAP من بيانات المشترك | N/A |
| مصادقة BSF | مصادقة GBA الاختيارية | N/A |
| واجهة ويب | بوابة الخدمة الذاتية للمشتركين | 5000/HTTP |
تكامل HSS
نمط الاتصال HSS
يعمل خادم XCAP كـ وكيل بلا حالة بين عملاء XCAP وHSS. لا يحتفظ بتخزين محلي لبيانات المشتركين ولكنه يستعلم عن HSS لكل طلب.
نقاط نهاية واجهة برمجة التطبيقات REST HSS
1. استرجاع المشترك بواسطة MSISDN
GET /ims_subscriber/ims_subscriber_msisdn/{msisdn}
Host: 10.4.2.140:8080
الاستجابة:
{
"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. تحديث ملف تعريف المشترك
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>"
}
الاستجابة:
{
"Status": "success",
"ims_subscriber_id": 12345
}
3. بحث عن مشترك PCRF (مستند إلى IP)
GET /pcrf/subscriber_routing/{ip_address}
Host: 10.4.2.140:8080
الغرض: حل هوية المشترك من عنوان IP لجهاز UE للوصول إلى واجهة الويب.
الاستجابة:
{
"subscriber_id": 67890,
"ip_address": "100.64.4.16",
"apn": "ims"
}
4. الحصول على معلومات المشترك الأساسية
GET /subscriber/{subscriber_id}
Host: 10.4.2.140:8080
الاستجابة:
{
"subscriber_id": 67890,
"imsi": "505570000012345",
"msisdn": "15551234567"
}
5. الحصول على مشترك IMS بواسطة IMSI
GET /ims_subscriber/ims_subscriber_imsi/{imsi}
Host: 10.4.2.140:8080
الاستجابة: نفس الهيكل كما في نقطة النهاية #1
توازن الحمل HSS
الخصائص:
- بلا حالة: يمكن أن يذهب كل طلب إلى أي قرين HSS
- توزيع عشوائي: توازن الحمل عبر الأقران المتاحة
- مزامنة قاعدة البيانات: تشارك أقران HSS قاعدة بيانات خلفية مشتركة
- لا جلسات لاصقة: لا ارتباط بالعميل أو استمرارية الجلسة
لماذا REST بدلاً من Diameter؟
تستخدم الشبكات التقليدية 3GPP واجهة Diameter Sh للتواصل بين XCAP وHSS. تستخدم هذه التنفيذ واجهة برمجة التطبيقات REST من أجل البساطة:
| الجانب | Diameter Sh (التقليدي) | واجهة برمجة التطبيقات REST (هذا التنفيذ) |
|---|---|---|
| البروتوكول | Diameter (RFC 6733) | HTTP/JSON |
| التعقيد | مرتفع - يتطلب مجموعة Diameter | منخفض - مكتبة HTTP قياسية |
| تنسيق الرسالة | AVP (زوج القيمة-السمة) ثنائي | JSON (قابل للقراءة البشرية) |
| المنفذ | 3868 (SCTP/TCP) | 8080 (HTTP) |
| حالة الاستخدام | شبكات الاتصالات من الدرجة الأولى | نشرات قائمة على السحابة، أولاً API |
| التكامل | يتطلب FreeDiameter، OpenDiameter | عميل REST قياسي (requests) |
| المصادقة | أمان TLS/Diameter | رموز API، OAuth (مستقبلًا) |
مزايا نهج REST:
- تكامل أسهل مع أدوات DevOps الحديثة
- تصحيح أخطاء أبسط (curl، Postman)
- توافق مع بنية السحابة
- تقليل تعقيد البنية التحتية
- صديق للمطورين
مصادقة BSF
بنية التمهيد العامة (GBA)
GBA هو إطار عمل مصادقة 3GPP (TS 33.220) يمكّن المصادقة المتبادلة بين UE وخدمات الشبكة باستخدام مفاتيح مشتركة مشتقة من بنية مصادقة UMTS/LTE.
حالة تنفيذ BSF
يوفر الخادم خيارات مصادقة مرنة مع دعم كامل لـ BSF/GBA متاح عند الحاجة.
التكوين:
# config.yaml
bsf_support: False
تحدي المصادقة:
عندما يتم تمكين مصادقة BSF، يصدر الخادم HTTP 401 غير مصرح به مع:
WWW-Authenticate: Digest realm="3GPP-bootstrapping@xcap.ims.example.com",
qop="auth-int",
nonce="<random-32-chars>",
opaque="<random-32-chars>",
algorithm="MD5",
domain="/"
معلمات مصادقة Digest
عندما يتم تمكين مصادقة BSF، يتحدى الخادم العملاء بهذه المعلمات:
| المعلمة | القيمة | الغرض |
|---|---|---|
| realm | 3GPP-bootstrapping@xcap.ims.example.com | مجال المصادقة |
| qop | auth-int | جودة الحماية: المصادقة مع حماية السلامة |
| algorithm | MD5 | خوارزمية التجزئة لحساب digest |
| nonce | سلسلة عشوائية مكونة من 32 حرفًا | تحدي الخادم لمنع هجمات إعادة التشغيل |
| opaque | سلسلة عشوائية مكونة من 32 حرفًا | بيانات خاصة بالخادم تُعاد من العميل دون تغيير |
| domain | / | مساحة URI التي تكون فيها بيانات الاعتماد صالحة |
بنية المصادقة
يوفر خادم XCAP آليات مصادقة متعددة لتناسب سيناريوهات النشر المختلفة:
1. مصادقة IP الخاصة بـ UE عبر PCRF (موصى بها)
يمكن لخادم XCAP مصادقة المشتركين من خلال التحقق من عنوان IP الخاص بـ UE مقابل الجلسات النشطة في HSS/PCRF. يوفر ذلك مصادقة آمنة وواعية للجلسة دون الحاجة إلى بنية GBA.
كيف يعمل:
المزايا:
- واعية للجلسة: يمكن فقط للمستخدمين المصادق عليهم الذين لديهم جلسات بيانات نشطة الوصول إلى XCAP
- لا أسرار مشتركة: لا تتطلب مفاتيح مسبقة المشاركة أو كلمات مرور
- تسجيل خروج تلقائي: عندما يفصل UE عن الشبكة، تنتهي جلسة IP
- دعم التجوال: يعمل عبر الشبكات المحلية والزائرة (إذا كان PCRF متاحًا)
- آمن ضد NAT: يتم التحقق من IP UE مباشرة، وليس من رؤوس جانب العميل
خصائص الأمان:
- التحقق من IP المصدر: لا يمكن تزوير IP المصدر لاتصال TCP في الاتصال القائم
- تفويض PCRF: فقط UEs التي لديها سياقات PDP/PDN نشطة ومصرح بها لديها عناوين IP
- التحقق في الوقت الحقيقي: يتم استعلام حالة PCRF الحالية لكل طلب
- ربط المشترك: يتم التحقق من تطابق IP مع المشترك في كل طلب
التكوين:
# config.yaml
ue_subnets:
- '100.64.0.0/22' # نطاق CGNAT 1
- '100.64.4.0/22' # نطاق CGNAT 2
- '100.64.24.0/24' # نطاق اختبار UE
# بحث PCRF عبر واجهة برمجة التطبيقات HSS
hss_peers:
- '10.4.2.140:8080' # HSS مع نقطة نهاية PCRF
- '10.4.2.141:8080'
نقطة نهاية واجهة برمجة التطبيقات PCRF:
GET /pcrf/subscriber_routing/{ue_ip_address}
Host: hss-server:8080
Response:
{
"subscriber_id": 12345,
"ip_address": "100.64.4.16",
"apn": "ims",
"session_start": "2026-01-07T10:30:00Z",
"rat_type": "EUTRAN"
}
تدفق التحقق:
- استخراج IP المصدر من اتصال HTTP
- تحقق من أن IP في نطاق
ue_subnetsالمكون - استعلام PCRF:
GET /pcrf/subscriber_routing/{source_ip} - يعيد PCRF
subscriber_idإذا كانت الجلسة النشطة موجودة - استرجاع تفاصيل المشترك:
GET /subscriber/{subscriber_id} - الحصول على IMSI، ثم الاستعلام:
GET /ims_subscriber/ims_subscriber_imsi/{imsi} - مقارنة MSISDN في URL XCAP مع MSISDN المحلولة من PCRF
- إذا كانت المطابقة: مصادق عليه ✓
حالات الاستخدام:
- الخدمة الذاتية عبر الويب: يتصل UE عبر البيانات المحمولة، المصادقة التلقائية بواسطة IP
- التطبيقات المحمولة: عملاء XCAP الأصلية على الهواتف الذكية
- المؤسسات: أجهزة CPE مع تخصيصات IP ثابتة لـ UE
2. قائمة بيضاء لشبكة IP (الشبكات الموثوقة)
لخوادم التطبيقات الموثوقة وبيئات الاختبار:
# config.yaml
as_allowed_ips:
- '10.4.3.60' # خادم تطبيق SIP
- '10.4.3.61' # خادم الاختبار
حالات الاستخدام:
- خوادم تطبيق SIP التي تسترجع ملفات تعريف المشتركين أثناء معالجة المكالمات
- أدوات إدارة الشبكة الداخلية
- بيئات التطوير/الاختبار
3. تحويل URI SIP إلى MSISDN
يستخرج الخادم هوية المشترك من URL XCAP نفسه:
/simservs.ngn.etsi.org/users/sip:+15551234567@ims.example.com/simservs.xml
└─────────┬─────────┘
MSISDN: 15551234567
يحلل الخادم URI SIP لاستخراج رقم الهاتف E.164 (MSISDN).
4. رأس X-3GPP-Intended-Identity
يدعم الخادم رأس 3GPP القياسي لتأكيد الهوية:
GET /simservs.xml HTTP/1.1
Host: xcap.ims.example.com
X-3GPP-Intended-Identity: sip:+15551234567@ims.example.com
يسمح هذا الرأس للعملاء بتحديد هوية المشترك المستهدفة بشكل صريح للطلب.
تمكين مصادقة BSF
لتمكين مصادقة GBA في الإنتاج:
- نشر خادم BSF: تنفيذ خادم التمهيد وفقًا لـ 3GPP TS 33.220
- تكوين Diameter Zh: ربط BSF بـ HSS عبر Diameter
- تحديث config.yaml:
bsf_support: True
bsf_url: "http://bsf-server:8090" - تنفيذ استرجاع NAF-Key: إضافة استدعاء واجهة برمجة التطبيقات BSF للحصول على Ks_NAF للتحقق
- إضافة منطق التحقق من Digest: تحقق من استجابة العميل باستخدام المفتاح المشترك
أنواع مستندات XCAP
هيكل مستند الجذر Simservs
تُلف جميع مستندات XCAP في عنصر الجذر 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">
<!-- خدمات عرض الهوية -->
<originating-identity-presentation active="true"/>
<originating-identity-presentation-restriction active="true">
<default-behaviour>presentation-not-restricted</default-behaviour>
</originating-identity-presentation-restriction>
<!-- تحويل المكالمات (تحويل الاتصال) -->
<communication-diversion active="true">
<NoReplyTimer>20</NoReplyTimer>
<cp:ruleset>
<!-- قواعد تحويل المكالمات -->
</cp:ruleset>
</communication-diversion>
<!-- حظر المكالمات -->
<incoming-communication-barring active="false">
<cp:ruleset>
<!-- قواعد الحظر الواردة -->
</cp:ruleset>
</incoming-communication-barring>
<outgoing-communication-barring active="false">
<cp:ruleset>
<!-- قواعد الحظر الصادرة -->
</cp:ruleset>
</outgoing-communication-barring>
</simservs>
تفاصيل نوع المستند
1. تحويل الاتصال (تحويل المكالمات)
الغرض: إعادة توجيه المكالمات الواردة إلى وجهات بديلة بناءً على الشروط
نمط URL XCAP:
/simservs.ngn.etsi.org/users/{sip_uri}/simservs.xml/~~/simservs/communication-diversion
أنواع القواعد:
| معرف القاعدة | الشرط | الوصف |
|---|---|---|
| cfa | (لا شيء) | تحويل المكالمات غير المشروط - تحويل جميع المكالمات على الفور |
| cfb | مشغول | تحويل المكالمات عند الانشغال - تحويل عندما تكون الخط مشغولًا |
| cfna | لا إجابة | تحويل المكالمات عند عدم الإجابة - تحويل بعد انتهاء NoReplyTimer |
| cfnrc | غير قابل للوصول | تحويل المكالمات عند عدم الوصول - تحويل عندما يكون الجهاز غير متصل |
| cfnreg | غير مسجل | تحويل المكالمات عند عدم التسجيل - تحويل عندما لا يكون مسجلاً في IMS |
هيكل 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">
<!-- تحويل غير مشروط -->
<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>
<!-- تحويل عند الانشغال -->
<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. حظر الاتصال الوارد
الغرض: حظر المكالمات الواردة من فئات معينة
نمط URL XCAP:
/simservs.ngn.etsi.org/users/{sip_uri}/simservs.xml/~~/simservs/incoming-communication-barring
أنواع القواعد:
| معرف القاعدة | الشرط | الوصف |
|---|---|---|
| all | (لا شيء) | حظر جميع المكالمات الواردة |
| international | دولي | حظر المكالمات من الأرقام الدولية |
| international-exHC | دولي باستثناء الدولة الأم | حظر المكالمات الدولية باستثناء الدولة الأم |
| roaming | أثناء التجوال | حظر المكالمات الواردة أثناء التجوال |
هيكل 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. حظر الاتصال الصادر
الغرض: تقييد المكالمات الصادرة إلى وجهات معينة
نمط URL XCAP:
/simservs.ngn.etsi.org/users/{sip_uri}/simservs.xml/~~/simservs/outgoing-communication-barring
أنواع القواعد: نفس الحظر الوارد
هيكل 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. تقييد عرض الهوية الأصلية (معرف المتصل)
الغرض: التحكم في ما إ��ا كان يتم عرض معرف المتصل للأطراف المتصلة
نمط URL XCAP:
/simservs.ngn.etsi.org/users/{sip_uri}/simservs.xml/~~/simservs/originating-identity-presentation-restriction
هيكل XML:
<ss:originating-identity-presentation-restriction active="true">
<ss:default-behaviour>presentation-restricted</ss:default-behaviour>
</ss:originating-identity-presentation-restriction>
الخيارات:
presentation-restricted- إخفاء معرف المتصل (مجهول)presentation-not-restricted- عرض معرف المتصل (عادي)
مخططات تدفق المكالمات
تدفق تكوين تحويل المكالمات
تدفق الخدمة الذاتية عبر الويب
تدفق تنفيذ حظر المكالمات
تدفق مصادقة BSF GBA (عند التمكين)
مستندات XCAP مثال
مستند 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"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- خدمات معرف المتصل -->
<originating-identity-presentation active="true"/>
<originating-identity-presentation-restriction active="true">
<default-behaviour>presentation-not-restricted</default-behaviour>
</originating-identity-presentation-restriction>
<!-- تكوين تحويل المكالمات -->
<communication-diversion active="true">
<NoReplyTimer>20</NoReplyTimer>
<cp:ruleset>
<!-- تحويل غير مشروط (معطل) -->
<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>
<!-- تحويل عند الانشغال (مفعل) -->
<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>
<!-- تحويل عند عدم الإجابة (مفعل) -->
<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>
<!-- تحويل عند عدم الوصول (مفعل) -->
<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>
<!-- تحويل عند عدم التسجيل (مفعل) -->
<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>
<!-- حظر المكالمات الواردة -->
<incoming-communication-barring active="false">
<cp:ruleset>
<!-- حظر جميع المكالمات الواردة (معطل) -->
<cp:rule id="all">
<cp:conditions></cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
<!-- حظر المكالمات الواردة الدولية (معطل) -->
<cp:rule id="international">
<cp:conditions>
<international/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
<!-- حظر المكالمات الواردة الدولية باستثناء الدولة الأم (معطل) -->
<cp:rule id="international-exHC">
<cp:conditions>
<international-exHC/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
<!-- حظر المكالمات أثناء التجوال (معطل) -->
<cp:rule id="roaming">
<cp:conditions>
<roaming/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
</incoming-communication-barring>
<!-- حظر المكالمات الصادرة -->
<outgoing-communication-barring active="false">
<cp:ruleset>
<!-- حظر جميع المكالمات الصادرة (معطل) -->
<cp:rule id="all">
<cp:conditions></cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
<!-- حظر المكالمات الصادرة الدولية (معطل) -->
<cp:rule id="international">
<cp:conditions>
<international/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
<!-- حظر المكالمات الصادرة الدولية باستثناء الدولة الأم (معطل) -->
<cp:rule id="international-exHC">
<cp:conditions>
<international-exHC/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
<!-- حظر المكالمات أثناء التجوال (معطل) -->
<cp:rule id="roaming">
<cp:conditions>
<roaming/>
</cp:conditions>
<cp:actions>
<allow>false</allow>
</cp:actions>
</cp:rule>
</cp:ruleset>
</outgoing-communication-barring>
</simservs>
بيانات المشترك YAML (تنسيق تخزين HSS)
هذا هو التمثيل الداخلي المخزن في حقل xcap_profile في 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
مثال على طلب XCAP PUT (تمكين CFB)
الطلب:
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>
الاستجابة:
HTTP/1.1 200 OK
Content-Type: application/xcap-el+xml
ETag: "eti87"
Content-Length: 0
مثال على طلب XCAP GET (استرجاع جميع قواعد CF)
الطلب:
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
الاستجابة:
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>
<!-- قواعد إضافية محذوفة للاختصار -->
</cp:ruleset>
</ss:communication-diversion>
مثال على تحديث جزئي (تغيير NoReplyTimer)
الطلب:
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>
الاستجابة:
HTTP/1.1 200 OK
Content-Type: application/xcap-el+xml
ETag: "eti87"
دليل التكوين
مرجع config.yaml
# خوادم الخلفية HSS (توازن الحمل)
hss_peers:
- '10.4.2.140:8080' # opt-se2-hss01
- '10.4.2.141:8080' # opt-se2-hss02
# OCS (نظام الشحن عبر الإنترنت) - غير مستخدم حاليًا
ocs_peers:
- '10.4.2.140'
- '10.4.2.141'
# تبديل مصادقة BSF/GBA
bsf_support: False # تعيين إلى True للإنتاج GBA
# تكوين مجال IMS
ims_domain: 'ims.example.com'
diameter_realm: 'example.com'
# تبديل بادئة مساحة XML
ss_prefix: True # تضمين بادئة 'ss:' في XML المولد
# نطاقات IP المسموح بها لـ UE (للمصادقة المستندة إلى IP)
ue_subnets:
- '100.64.0.0/22' # نطاق CGNAT 1
- '100.64.4.0/22' # نطاق CGNAT 2
- '100.64.24.0/24' # نطاق CGNAT 3
# عناوين IP لخوادم التطبيقات الموثوقة
as_allowed_ips:
- '10.4.3.60' # opt-se2-as01
# تكوين اختبار الوحدة
unit_test_data:
source_ip: "100.64.4.16"
base_url: "http://localhost:5000"
msisdn: "15551234567" # MSISDN المشترك الاختباري
بوابة الخدمة الذاتية عبر الويب
بالنسبة للمشتركين الذين لا تدعم أجهزتهم XCAP بشكل أصلي، يوفر الخادم بوابة خدمة ذاتية قائمة على الويب. يمكن للمستخدمين تصفح خادم XCAP مباشرة من جهازهم المحمول لإدارة إعداداتهم من خلال واجهة HTML سهلة الاستخدام.
طريقة الوصول:
يفتح المستخدمون ببساطة متصفح الويب على هواتفهم وينتقلون إلى عنوان خادم XCAP:
http://xcap.ims.example.com:5000/
المصادقة التلقائية:
عند الوصول من جهاز محمول متصل بشبكة الناقل، تحدث المصادقة تلقائيًا عبر التحقق من IP UE:
- يحتوي جهاز المستخدم بالفعل على جلسة بيانات نشطة (سياق PDP/PDN)
- يستخرج خادم XCAP IP المصدر من اتصال HTTP
- يستعلم الخادم PCRF لحل IP → هوية المشترك
- يتم تسجيل دخول المستخدم تلقائيًا - لا حاجة لاسم مستخدم/كلمة مرور
- تعرض واجهة الويب إعدادات تحويل المكالمات الحالية، وحظر المكالمات، ومعرف المتصل
الميزات:
- إدارة تحويل المكالمات: تمكين/تعطيل قواعد التحويل، تعيين أرقام الوجهة
- تحكم في حظر المكالمات: تكوين قيود المكالمات الواردة والصادرة
- مؤقت عدم الرد: ضبط المهلة قبل تحويل المكالمات عند عدم الإجابة
- تحديثات في الوقت الحقيقي: التغييرات تنعكس على الفور في ملف تعريف المشترك
- محسن للهواتف المحمولة: تصميم متجاوب لمتصفحات الهواتف الذكية
حالات الاستخدام:
- الأجهزة القديمة: الهواتف الذكية التي لا تدعم عميل XCAP بشكل أصلي
- أجهزة iOS: iPhones التي لا تعرض إعدادات XCAP في تطبيق الإعدادات
- إصدارات Android: إصدارات Android التي لا تحتوي على تكامل XCAP خاص بالناقل
- تفضيل المستخدم: المشتركين الذين يفضلون واجهة الويب على قوائم إعدادات الجهاز
- الوصول السريع: تغييرات مؤقتة أثناء السفر أو التجوال
تدفق العمل المثال:
هذا يلغي الحاجة إلى برامج عميل XCAP المتخصصة ويوفر وصولاً عالميًا من خلال متصفحات الويب القياسية.
مرجع API
هيكل عنوان URL الأساسي
http(s)://xcap.ims.example.com:5000/simservs.ngn.etsi.org/users/{sip_uri}/simservs.xml[/~~/selector]
المكونات:
- الجذر:
simservs.ngn.etsi.org(AUID - معرف التطبيق الفريد) - XUI:
users/{sip_uri}(معرف مستخدم XCAP) - المستند:
simservs.xml - محدد العقدة:
/~~/simservs/communication-diversion/...(استنادًا إلى XPath)
جدول مرجع نقاط النهاية
| العملية | الطريقة | URL XCAP | الوصف |
|---|---|---|---|
| الحصول على جميع الخدمات | GET | /users/{sip}/simservs.xml | استرجاع مستند simservs الكامل |
| الحصول على قواعد CF | GET | /users/{sip}/simservs.xml/~~/simservs/communication-diversion | الحصول على جميع قواعد تحويل المكالمات |
| الحصول على قاعدة CF محددة | GET | /users/{sip}/simservs.xml/~~/simservs/communication-diversion/cp:ruleset/{rule_id} | الحصول على قاعدة CF واحدة (cfa، cfb، إلخ) |
| تحديث قاعدة CF | PUT | /users/{sip}/simservs.xml/~~/simservs/communication-diversion/cp:ruleset/{rule_id} | تحديث قاعدة تحويل المكالمات |
| تحديث شرط CF | PUT | /users/{sip}/simservs.xml/~~/simservs/communication-diversion/cp:ruleset/{rule_id}/{element} | تحديث عنصر القاعدة (الهدف، الشرط) |
| تعيين NoReplyTimer | PUT | /users/{sip}/simservs.xml/~~/simservs/communication-diversion/NoReplyTimer | تغيير المهلة عند عدم الإجابة |
| الحصول على معرف المتصل | GET | /users/{sip}/simservs.xml/~~/simservs/originating-identity-presentation-restriction | الحصول على إعداد تقييد معرف المتصل |
| الحصول على حظر المكالمات الواردة | GET | /users/{sip}/simservs.xml/~~/simservs/incoming-communication-barring/cp:ruleset/{rule_id} | الحصول على قاعدة الحظر الواردة |
| تحديث حظر المكالمات الواردة | PUT | /users/{sip}/simservs.xml/~~/simservs/incoming-communication-barring/cp:ruleset/{rule_id} | تحديث قاعدة الحظر الواردة |
| الحصول على حظر المكالمات الصادرة | GET | /users/{sip}/simservs.xml/~~/simservs/outgoing-communication-barring/cp:ruleset/{rule_id} | الحصول على قاعدة الحظر الصادرة |
| تحديث حظر المكالمات الصادرة | PUT | /users/{sip}/simservs.xml/~~/simservs/outgoing-communication-barring/cp:ruleset/{rule_id} | تحديث قاعدة الحظر الصادرة |
رؤوس HTTP
رؤوس الطلب
Content-Type: application/xcap-el+xml
Accept: application/xcap-el+xml
X-3GPP-Intended-Identity: sip:+15551234567@ims.example.com
رؤوس الاستجابة
Content-Type: application/xcap-el+xml
ETag: "eti87"
استجابات الأخطاء
| رمز HTTP | المعنى | الوصف |
|---|---|---|
| 200 OK | نجاح | تمت العملية بنجاح |
| 401 غير مصرح | المصادقة مطلوبة | تحدي مصادقة BSF/GBA (إذا تم تمكينه) |
| 404 غير موجود | المورد غير موجود | المشترك أو المستند غير موجود |
| 409 تعارض | تعارض | عدم تطابق إصدار المستند (تعارض ETag) |
| 500 خطأ داخلي في الخادم | خطأ في الخادم | فشل في الاتصال بـ HSS أو خطأ في المعالجة |
نقاط نهاية واجهة الويب
| نقطة النهاية | الطريقة | الغرض |
|---|---|---|
/ | GET | صفحة معلومات المشترك (بحث بواسطة IP) |
/call_forwarding | GET | عرض نموذج إدارة تحويل المكالمات |
/call_forwarding | POST | تحديث قاعدة تحويل المكالمات عبر واجهة الويب |
/api | GET | وثائق واجهة Swagger UI |
تنسيق السجل
2026-01-07 10:15:32,456 12345 {/var/log/XCAP.log:123} INFO GetSubscriberData called for MSISDN: 15551234567
الحقول: الطابع الزمني، معرف العملية، موقع الملف، مستوى السجل، الرسالة
اعتبارات الأداء
- تصميم بلا حالة: لا يتم الاحتفاظ بحالة الجلسة في خادم XCAP
- توزيع الحمل: اختيار قرين HSS عشوائي لكل طلب
- تخزين القوالب: يتم تحميل قوالب المستندات مرة واحدة عند بدء التشغيل
- معالجة XML: التحليل والتنسيق في الذاكرة
- استعلامات قاعدة البيانات: استعلام HSS واحد لكل GET، اثنان لكل PUT (قراءة-تعديل-كتابة)
الخاتمة
يوفر خادم تطبيق XCAP تنفيذًا جاهزًا للإنتاج لإدارة خدمات IMS الإضافية 3GPP. النقاط البارزة الرئيسية:
نقاط القوة:
- الامتثال الكامل لمعايير XCAP الخاصة بـ ETSI/3GPP
- تكامل قائم على واجهة برمجة التطبيقات REST مع نشر سحابي
- خيارات مصادقة متعددة بما في ذلك BSF/GBA والتحقق المستند إلى IP لـ UE
- بوابة خدمة ذاتية قائمة على الويب لتوافق الأجهزة العالمية
- توفر عالية مع أقران HSS متوازنين
سيناريوهات النشر:
- مشغلو الشبكات المحمولة (MNOs) ومشغلو الشبكات الافتراضية المحمولة (MVNOs)
- نشرات IMS للمؤسسات
- منصات خدمات VoLTE/VoWiFi
- بنية الاتصالات السحابية
- شبكات LTE/5G الخاصة
المراجع
مواصفات 3GPP وETSI
| المواصفة | العنوان | الوصف | URL |
|---|---|---|---|
| ETSI TS 183 063 | خدمات محاكاة PSTN/ISDN المستندة إلى IMS | المواصفة الأساسية التي تحدد مخطط XML simservs لخدمات IMS الإضافية | بوابة ETSI |
| 3GPP TS 24.623 | بروتوكول الوصول إلى تكوين XML (XCAP) عبر واجهة Ut لتكوين خدمات إضافية | يحدد واجهة XCAP بين UE وخادم التطبيق لتكوين الخدمات الإضافية | بوابة 3GPP |
| 3GPP TS 24.238 | تكوين المستخدم المستند إلى بروتوكول بدء الجلسة (SIP)؛ المرحلة 3 | يحدد آليات مستندة إلى SIP لإدارة تكوين المستخدم في IMS | بوابة 3GPP |
| 3GPP TS 33.220 | بنية المصادقة العامة (GAA)؛ بنية التمهيد العامة (GBA) | يحدد إطار عمل BSF وGBA لتمهيد بيانات الاعتماد الأمنية | بوابة 3GPP |
| 3GPP TS 24.229 | بروتوكول التحكم في المكالمات متعددة الوسائط المستند إلى بروتوكول بدء الجلسة (SIP) وبروتوكول وصف الجلسة (SDP)؛ المرحلة 3 | المواصفة الأساسية للتحكم في المكالمات IMS بما في ذلك مشغلات الخدمة وتنفيذ الخدمة الإضافية | بوابة 3GPP |
| 3GPP TS 29.228 | واجهات Cx وDx لنظام الوسائط المتعددة (IM)؛ تدفقات الإشارة ومحتويات الرسائل | يحدد واجهة Diameter Cx/Dx بين S-CSCF وHSS (متعلق باسترجاع ملف تعريف المستخدم) | بوابة 3GPP |
| 3GPP TS 29.328 | واجهة Sh لنظام الوسائط المتعددة (IM)؛ تدفقات الإشارة ومحتويات الرسائل | يحدد واجهة Diameter Sh بين AS وHSS للوصول إلى بيانات المستخدم | بوابة 3GPP |
RFCs IETF
| RFC | العنوان | الوصف | URL |
|---|---|---|---|
| RFC 4825 | بروتوكول الوصول إلى تكوين XML (XCAP) | المواصفة الأساسية لبروتوكول XCAP التي تحدد معالجة مستندات XML القائمة على HTTP | مراقب بيانات IETF |
| RFC 4745 | سياسة شائعة: تنسيق مستند للتعبير عن تفضيلات الخصوصية | يحدد مساحة XML الخاصة بالسياسة الشائعة المستخدمة لظروف القاعدة في مستندات XCAP | مراقب بيانات IETF |
| RFC 2617 | المصادقة عبر HTTP: المصادقة الأساسية والتجزئة | يحدد آلية المصادقة Digest المستخدمة في تحديات |