كيفية حساب حقل SM Length في SMPP
في بروتوكول SMPP، يحدد حقل sm_length الطول بالبايت لمحتوى الرسالة القصيرة الموجود في حقل short_message لـ PDUs مثل submit_sm و deliver_sm و data_sm.
تفاصيل الحقل
- اسم الحقل: sm_length
- الحجم: 1 بايت (عدد صحيح غير موقّع)
- النطاق: 0–254 (الحد الأقصى المسموح به في SMPP 3.4)
- الموقع: مباشرة قبل حقل
short_message - الغرض: يشير إلى عدد البايتات في حمولة
short_message
السلوك الرئيسي
تعتمد قيمة sm_length على الترميز المستخدم:
| الترميز | عدد الأحرف لكل رسالة SMS | حجم البايت | ملاحظات |
|---|---|---|---|
| GSM 7-bit | حتى 160 | حتى 140 | بتات مضغوطة؛ يعتمد حجم البايت الفعلي على المحتوى |
| UCS2 | حتى 70 | 2 × عدد الأحرف | كل حرف يمثل 2 بايت |
| 8-bit binary | غير متاح | حتى 140 | طول البايت الخام |
مثال: رسالة ASCII
رسالة بسيطة باستخدام ترميز 7-bit الافتراضي:
النص: "Hello" الترميز: GSM 7-bit البايتات المضغوطة (Hex): C8 32 9B FD 06 طول البايت: 5 sm_length: 5
مثال: رسالة مشفرة بـ UCS2
رسالة يونيكود باستخدام ترميز UCS2 (data_coding = 0x08):
النص: "Hi" UCS2 Hex: 0048 0069 مصفوفة البايت: 00 48 00 69 طول البايت: 4 sm_length: 4
مثال PDU لـ SMPP (submit_sm)
0000003B // طول الأمر (59 بايت)
00000004 // معرف الأمر: submit_sm
00000000 // حالة الأمر
00000001 // رقم التسلسل
00 // service_type
01 // source_addr_ton
01 // source_addr_npi
31323334 // source_addr ("1234")
00
01 // dest_addr_ton
01 // dest_addr_npi
35363738 // destination_addr ("5678")
00
00 // esm_class
00 // protocol_id
00 // priority_flag
00 // schedule_delivery_time
00 // validity_period
00 // registered_delivery
00 // replace_if_present_flag
08 // data_coding: UCS2
00 // sm_default_msg_id
04 // sm_length: 4
00480069 // short_message: "Hi" في UCS2
ملاحظات مهمة
- يشير
sm_lengthإلى طول البايت، وليس عدد الأحرف. - إذا تم تقسيم محتوى الرسالة عبر عدة رسائل (ربط)، فإن كل جزء له
sm_lengthالخاص به. - لا تخلط بين
sm_lengthوالطول الكلي للرسالة (طول PDU).
تقسيم الرسائل والربط
عندما تتجاوز الرسالة الحد الأقصى لحجم الحمولة، يتم تقسيمها إلى أجزاء باستخدام UDH (رأس بيانات المستخدم). في مثل هذه الحالات، يتضمن sm_length UDH أيضًا:
مثال: UDH (6 بايت) + 67 بايت UCS2 = 73 sm_length = 73
الختام
يعتبر حقل sm_length حاسمًا في مراسلة SMPP لأنه يحدد عدد البايتات التي يجب على SMSC قراءتها لجسم الرسالة الفعلي. فهم كيفية تأثير الترميز على هذا الحقل يضمن تسليم الرسائل بدقة ونجاح.
المراجع
- مواصفات SMPP 3.4
- مجموعة أحرف GSM 03.38
- ترميز Unicode UCS2