Przykłady

Przegląd

Przygotowaliśmy kilka przykładów, które pomogą Ci w implementacji pierwszej biblioteki interfejsu Sandboxed API.

Znajdziesz je w folderze //sandboxed_api/examples. Szczegółowe wyjaśnienia znajdziesz poniżej.

hello_sapi

To bardzo prosty przykład, który pokazuje, jak działa SAPI. Plik hello_lib.cc zawiera jedną funkcję AddTwoIntegers(), która będzie działać w trybie piaskownicy i będzie wywoływana w kodzie hosta.

Drugi plik kodu hosta, hello_transacted.cc, zawiera przykład użycia transakcji SAPI.

Suma

Biblioteka demonstracyjna implementująca kilka funkcji C i jedną funkcję C++. Do wymiany danych między kodem hosta a biblioteką SAPI używa protokołów protobuf.

  • Definicję piaskownicy znajdziesz w pliku sandbox.h.
  • Plik adnotacji funkcji (generowany automatycznie plik zawierający prototypy funkcji w piaskownicy) można znaleźć w bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h po kompilacji Bazel.
  • Rzeczywista logika wykonania (czyli kod hosta), która korzysta z wyeksportowanych procedur piaskownicy, znajduje się w pliku main_sum.cc.

zlib

Jest to implementacja demonstracyjna (działająca, ale obecnie nieużywana w środowisku produkcyjnym) biblioteki zlib, która eksportuje niektóre z jej funkcji i udostępnia je kodowi hosta.

Demonstrowana funkcjonalność kodu hosta to dekodowanie strumieni zlib ze standardowego wejścia na standardowe wyjście.

Ta biblioteka SAPI nie używa pliku sandbox.h, ponieważ korzysta z domyślnych zasad Sandbox2 i wbudowanej biblioteki SAPI, więc nie musisz podawać metody sapi::Sandbox::GetLibPath() ani sapi::Sandbox::GetPolicy().

Interfejs zlib SAPI znajdziesz w //sapi_sandbox/examples/zlib wraz z kodem hosta.

stringop

Ten przykład pokazuje, jak za pomocą buforów protokołu udostępnić ciąg znaków reverse i funkcję duplication. Biblioteka zawiera też dedykowany plik sandbox.h, który zapewnia bardziej rygorystyczne zasady piaskownicy.

Kod hosta nie jest „normalnym” programem, ale demonstruje funkcjonalność biblioteki SAPI za pomocą testów jednostkowych.

W tym przykładzie uwzględniono też funkcje oparte na protokole innym niż protobuf, aby umożliwić porównanie obu podejść.