انتقل إلى المحتوى الرئيسي

خادم تطبيق XCAP - وثائق الاستخدام والهندسة المعمارية

جدول المحتويات

  1. الملخص التنفيذي
  2. XCAP في شبكات 3GPP
  3. هندسة النظام
  4. تكامل HSS
  5. مصادقة BSF
  6. أنواع مستندات XCAP
  7. مخططات تدفق المكالمات
  8. مستندات XCAP مثال
  9. دليل التكوين
  10. مرجع 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 الإضافية:

  1. تحويل الاتصال (تحويل المكالمات)

    • غير مشروط (CFU)
    • مشغول (CFB)
    • لا إجابة (CFNA)
    • غير قابل للوصول (CFNRc)
    • غير مسجل (CFNReg)
  2. حظر الاتصال (حظر المكالمات)

    • الوارد: جميع المكالمات، دولية، دولية باستثناء الدولة الأم، أثناء التجوال
    • الصادر: جميع المكالمات، دولية، دولية باستثناء الدولة الأم، أثناء التجوال
  3. خدمات عرض الهوية

    • عرض الهوية الأصلية (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خادم التطبيق الرئيسي، نقاط نهاية واجهة برمجة التطبيقات REST5000/HTTP
معالج XMLتحويل ومعالجة مستندات XMLN/A
عميل HSSيسترجع/يحدث بيانات المشترك عبر واجهة برمجة التطبيقات REST8080/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، يتحدى الخادم العملاء بهذه المعلمات:

المعلمةالقيمةالغرض
realm3GPP-bootstrapping@xcap.ims.example.comمجال المصادقة
qopauth-intجودة الحماية: المصادقة مع حماية السلامة
algorithmMD5خوارزمية التجزئة لحساب 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"
}

تدفق التحقق:

  1. استخراج IP المصدر من اتصال HTTP
  2. تحقق من أن IP في نطاق ue_subnets المكون
  3. استعلام PCRF: GET /pcrf/subscriber_routing/{source_ip}
  4. يعيد PCRF subscriber_id إذا كانت الجلسة النشطة موجودة
  5. استرجاع تفاصيل المشترك: GET /subscriber/{subscriber_id}
  6. الحصول على IMSI، ثم الاستعلام: GET /ims_subscriber/ims_subscriber_imsi/{imsi}
  7. مقارنة MSISDN في URL XCAP مع MSISDN المحلولة من PCRF
  8. إذا كانت المطابقة: مصادق عليه ✓

حالات الاستخدام:

  • الخدمة الذاتية عبر الويب: يتصل 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 في الإنتاج:

  1. نشر خادم BSF: تنفيذ خادم التمهيد وفقًا لـ 3GPP TS 33.220
  2. تكوين Diameter Zh: ربط BSF بـ HSS عبر Diameter
  3. تحديث config.yaml:
    bsf_support: True
    bsf_url: "http://bsf-server:8090"
  4. تنفيذ استرجاع NAF-Key: إضافة استدعاء واجهة برمجة التطبيقات BSF للحصول على Ks_NAF للتحقق
  5. إضافة منطق التحقق من 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:

  1. يحتوي جهاز المستخدم بالفعل على جلسة بيانات نشطة (سياق PDP/PDN)
  2. يستخرج خادم XCAP IP المصدر من اتصال HTTP
  3. يستعلم الخادم PCRF لحل IP → هوية المشترك
  4. يتم تسجيل دخول المستخدم تلقائيًا - لا حاجة لاسم مستخدم/كلمة مرور
  5. تعرض واجهة الويب إعدادات تحويل المكالمات الحالية، وحظر المكالمات، ومعرف المتصل

الميزات:

  • إدارة تحويل المكالمات: تمكين/تعطيل قواعد التحويل، تعيين أرقام الوجهة
  • تحكم في حظر المكالمات: تكوين قيود المكالمات الواردة والصادرة
  • مؤقت عدم الرد: ضبط المهلة قبل تحويل المكالمات عند عدم الإجابة
  • تحديثات في الوقت الحقيقي: التغييرات تنعكس على الفور في ملف تعريف المشترك
  • محسن للهواتف المحمولة: تصميم متجاوب لمتصفحات الهواتف الذكية

حالات الاستخدام:

  • الأجهزة القديمة: الهواتف الذكية التي لا تدعم عميل 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 الكامل
الحصول على قواعد CFGET/users/{sip}/simservs.xml/~~/simservs/communication-diversionالحصول على جميع قواعد تحويل المكالمات
الحصول على قاعدة CF محددةGET/users/{sip}/simservs.xml/~~/simservs/communication-diversion/cp:ruleset/{rule_id}الحصول على قاعدة CF واحدة (cfa، cfb، إلخ)
تحديث قاعدة CFPUT/users/{sip}/simservs.xml/~~/simservs/communication-diversion/cp:ruleset/{rule_id}تحديث قاعدة تحويل المكالمات
تحديث شرط CFPUT/users/{sip}/simservs.xml/~~/simservs/communication-diversion/cp:ruleset/{rule_id}/{element}تحديث عنصر القاعدة (الهدف، الشرط)
تعيين NoReplyTimerPUT/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_forwardingGETعرض نموذج إدارة تحويل المكالمات
/call_forwardingPOSTتحديث قاعدة تحويل المكالمات عبر واجهة الويب
/apiGETوثائق واجهة 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 المستخدمة في تحديات