Skip to content

← العودة لمجلد init

📄 ملف protocol.rs (البروتوكول) ​

يُعرّف هذا الملف هيكلة الرسائل التي تفهمها النواة وباقي الخدمات عند التحدث مع init. جميع الرسائل تعتمد على حجم ثابت لتسهيل التعامل معها وتجنب الحجز الديناميكي (Heap).

1. أنواع الرسائل الثابتة ​

rust
pub const MSG_REGISTER: u8 = 0x01; // خدمة تسجّل نفسها
pub const MSG_LOOKUP:   u8 = 0x02; // تطبيق يبحث عن خدمة
pub const MSG_SPAWN:    u8 = 0x03; // طلب إطلاق خدمة جديدة

2. هيكل الرسالة (ServiceMsg) ​

الرسائل حجمها ثابت 256 بايت، وهي مقسمة هندسياً بالشكل التالي:

  • [0]: نوع الرسالة (مثلاً 0x01 لـ MSG_REGISTER).
  • [1]: طول البيانات (data_len) - محجوز للاستخدام المستقبلي لتقليل النسخ.
  • [2..17]: اسم الخدمة (مثلاً "vfs_server")، بحد أقصى 16 حرفاً ومختومة بـ Null.
  • [18..25]: مساحة إضافية لتخزين الـ PID أو الـ Port.
  • [26..255]: مساحة محجوزة.

3. دوال قراءة الرسالة ​

يوفر الملف دوالاً لاستخراج البيانات بسرعة وبأمان، وأهمها دالة name_trimmed():

rust
pub fn name_trimmed(&self) -> &[u8] {
    let raw = self.name_raw();
    let end = raw.iter().position(|&b| b == 0).unwrap_or(raw.len());
    &raw[..end]
}

هذه الدالة تقوم بقص الأصفار الزائدة (\0) من نهاية سلسلة الاسم لتسهيل الطباعة والمقارنة الدقيقة دون ظهور رموز غريبة (■) على الشاشة.

تم تطويره بحب بواسطة مجتمع Qtoom.