דוגמאות

סקירה כללית

הכנו כמה דוגמאות שיעזרו לך להטמיע את הספרייה הראשונה של Sandboxed API.

ההסברים מפורטים כאן למטה: //sandboxed_api/examples.

hello_sapi

זוהי דוגמה בסיסית מאוד שממחישה איך SAPI פועל. הקוד hello_lib.cc מטמיע פונקציה אחת, AddTwoIntegers(), שתבוצע ב'ארגז חול' ותקרא אותה בקוד המארח.

הקובץ השני של קוד המארח, hello_transacted.cc, מדגים שימוש לדוגמה בעסקאות SAPI.

סכום

ספריית הדגמה שמטמיעה כמה פונקציות C ופונקציית C++ אחת. היא משתמשת ב-protobufs כדי להחליף נתונים בין קוד המארח לבין ספריית SAPI.

  • אפשר למצוא את הגדרת ה-Sandbox בקובץ sandbox.h.
  • קובץ ההערות לפונקציות (שנוצר באופן אוטומטי) (קובץ שמספק אבות טיפוס של פונקציות בארגז חול) נמצא ב-bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h אחרי build של Bazel.
  • ב-main_sum.cc אפשר למצוא את לוגיקת הביצוע בפועל (שנקראת גם קוד מארח) שמשתמשת בהליכים שיוצאו בארגז החול.

zlib

זהו יישום הדגמה (פונקציונלי, אך לא נמצא כרגע בשימוש) עבור ספריית zlib, במטרה לייצא חלק מהפונקציות שלה ולהפוך אותן לזמינות לקוד המארח.

הפונקציונליות המוכחת של קוד המארח היא פענוח של זרמי zlib מ-stdin ל-stdout.

ספריית SAPI זו לא משתמשת בקובץ sandbox.h, מאחר שהיא משתמשת במדיניות ברירת המחדל Sandbox2 ובספריית SAPI מוטמעת, כך שאין צורך לספק את השיטה sapi::Sandbox::GetLibPath() או sapi::Sandbox::GetPolicy().

ה-SAPI של zlib נמצא ב-//sapi_sandbox/examples/zlib, יחד עם קוד המארח שלו.

Stringop

הדוגמה הזו מדגימה את השימוש ב-protobufs כדי לספק פונקציות reverse ו-duplication של מחרוזת. הספרייה מכילה גם sandbox.h ייעודי לנושא של מדיניות Sandbox מחמירה יותר.

קוד המארח לא מייצג תוכנית "נורמלית", אלא מדגים את הפונקציונליות של ספריית SAPI באמצעות בדיקות יחידה.

בדוגמה הזו, הפונקציות שאינן מבוססות-protobuf נכללות גם הן כדי לספק השוואה בין שתי הגישות.