كيفية حساب حقل 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

More information