SSL_CTX_SET_INFO_CALLBACK(3SSL)

الاسم
SSL_CTX_set_info_callback, SSL_CTX_get_info_callback, SSL_set_info_callback, SSL_get_info_callback - معالجة استدعاء رد المعلومات لاتصالات SSL

موجز
 #include <openssl/ssl.h>

 void SSL_CTX_set_info_callback(SSL_CTX *ctx,
                                void (*callback) (const SSL *ssl, int type, int val));

 void (*SSL_CTX_get_info_callback(SSL_CTX *ctx)) (const SSL *ssl, int type, int val));

 void SSL_set_info_callback(SSL *ssl,
                            void (*callback) (const SSL *ssl, int type, int val));

 void (*SSL_get_info_callback(const SSL *ssl)) (const SSL *ssl, int type, int val));

الوصف
SSL_CTX_set_info_callback() تُعيِّن دالة callback، التي يمكن استخدامها للحصول على معلومات الحالة لكائنات SSL المنشأة من ctx أثناء إعداد الاتصال واستخدامه. يُتجاوز الإعداد لـ ctx من الإعداد لكائن SSL محدد، إذا حُدد. عندما يكون callback NULL، لا تُستخدم أي دالة استدعاء رد.

SSL_set_info_callback() تُعيِّن دالة callback، التي يمكن استخدامها للحصول على معلومات الحالة لـ ssl أثناء إعداد الاتصال واستخدامه. عندما يكون callback NULL، يُستخدم إعداد الاستدعاء الصالح حاليًا لـ ctx. ssl يجب ألا يكون NULL.

SSL_CTX_get_info_callback() تُرجع مؤشرًا إلى دالة استدعاء رد المعلومات المُعيَّنة حاليًا لـ ctx.

SSL_get_info_callback() تُرجع مؤشرًا إلى دالة استدعاء رد المعلومات المُعيَّنة حاليًا لـ ssl.

ملاحظات
عند إعداد اتصال وأثناء الاستخدام، يمكن الحصول على معلومات الحالة من محرك SSL/TLS. عند التعيين، تُستدعى دالة استدعاء رد المعلومات كلما حدث حدث مهم مثل: تغير الحالة، ظهور تنبيه، أو حدوث خطأ.

تُستدعى دالة الاستدعاء كـ callback(SSL *ssl, int where, int ret). تُحدد الوسيطة where معلومات حول أين (في أي سياق) دُعيت دالة الاستدعاء. إذا كان ret هو 0، حدثت حالة خطأ. إذا عولج تنبيه، يُعيَّن SSL_CB_ALERT ويُحدد ret معلومات التنبيه.

where هو قناع بتات مكون من البتات التالية:

SSL_CB_LOOP
    دُعيت دالة الاستدعاء للإشارة إلى تغير الحالة أو حدث آخر مهم في آلة الحالة. قد يعني هذا أن دالة الاستدعاء تُستدعى أكثر من مرة لكل حالة في بعض المواقف.

SSL_CB_EXIT
    دُعيت دالة الاستدعاء للإشارة إلى خروج من دالة المصافحة. سيحدث هذا بعد نهاية المصافحة، لكن قد يحدث في أوقات أخرى أيضًا مثل عند الخطأ أو عندما قد يحجب الإدخال/الإخراج ويُستخدم الوضع غير المحجب.

SSL_CB_READ
    دُعيت دالة الاستدعاء أثناء عملية القراءة.

SSL_CB_WRITE
    دُعيت دالة الاستدعاء أثناء عملية الكتابة.

SSL_CB_ALERT
    استُدعي الاستدعاء بسبب إرسال أو استقبال تنبيه.

SSL_CB_READ_ALERT               (SSL_CB_ALERT|SSL_CB_READ)
SSL_CB_WRITE_ALERT              (SSL_CB_ALERT|SSL_CB_WRITE)
SSL_CB_ACCEPT_LOOP              (SSL_ST_ACCEPT|SSL_CB_LOOP)
SSL_CB_ACCEPT_EXIT              (SSL_ST_ACCEPT|SSL_CB_EXIT)
SSL_CB_CONNECT_LOOP             (SSL_ST_CONNECT|SSL_CB_LOOP)
SSL_CB_CONNECT_EXIT             (SSL_ST_CONNECT|SSL_CB_EXIT)
SSL_CB_HANDSHAKE_START
    استُدعي الاستدعاء لأن مصافحة جديدة بُدئت. ويحدث ذلك أيضًا عند استئناف مصافحة بعد توقف مؤقت لمعالجة البيانات المبكرة.

SSL_CB_HANDSHAKE_DONE
    استُدعي الاستدعاء لأن المصافحة اكتملت. ويحدث ذلك أيضًا إذا أُوقف المصافحة مؤقتًا للسماح بتبادل البيانات المبكرة.

يمكن الحصول على معلومات الحالة الحالية باستخدام عائلة دوال SSL_state_string(3).

يمكن تقييم معلومات ret باستخدام عائلة دوال SSL_alert_type_string(3).

القيم المُرجعة
لا توفر SSL_set_info_callback() معلومات تشخيصية.

SSL_get_info_callback() تُعيد الإعداد الحالي.

أمثلة
دالة الاستدعاء المثالية التالية تطبع سلاسل الحالة، ومعلومات عن التنبيهات التي تُعالج، ورسائل الأخطاء إلى BIO bio_err.

 void apps_ssl_info_callback(const SSL *s, int where, int ret)
 {
     const char *str;
     int w = where & ~SSL_ST_MASK;

     if (w & SSL_ST_CONNECT)
         str = "SSL_connect";
     else if (w & SSL_ST_ACCEPT)
         str = "SSL_accept";
     else
         str = "undefined";

     if (where & SSL_CB_LOOP) {
         BIO_printf(bio_err, "%s:%s\n", str, SSL_state_string_long(s));
     } else if (where & SSL_CB_ALERT) {
         str = (where & SSL_CB_READ) ? "read" : "write";
         BIO_printf(bio_err, "SSL3 alert %s:%s:%s\n", str,
                    SSL_alert_type_string_long(ret),
                    SSL_alert_desc_string_long(ret));
     } else if (where & SSL_CB_EXIT) {
         if (ret == 0) {
             BIO_printf(bio_err, "%s:failed in %s\n",
                        str, SSL_state_string_long(s));
         } else if (ret < 0) {
             BIO_printf(bio_err, "%s:error in %s\n",
                        str, SSL_state_string_long(s));
         }
     }
 }

انظر أيضًا
ssl(7), SSL_state_string(3), SSL_alert_type_string(3)

حقوق النسخ
حقوق النشر 2001-2020 لمؤلفي مشروع OpenSSL. جميع الحقوق محفوظة.

مرخص بموجب رخصة Apache 2.0 (المشار إليها فيما يلي بـ ”الرخصة“). لا يجوز لك استخدام هذا الملف إلا وفقًا لشروط الرخصة. يمكنك الحصول على نسخة منها في الملف LICENSE الموجود في حزمة التوزيع المصدرية أو على الرابط <https://www.openssl.org/source/license.html>.

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.