Przykłady

Opis

Przygotowaliśmy kilka przykładów, które pomogą Ci wdrożyć pierwszą bibliotekę interfejsów API w trybie piaskownicy.

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

hello_sapi

To bardzo podstawowy przykład, który ilustruje działanie interfejsu SAPI. Biblioteka hello_lib.cc implementuje 1 funkcję AddTwoIntegers(), która jest uruchamiana w piaskownicy i wywoływana w kodzie hosta.

Drugi plik z kodem hosta, hello_transacted.cc, przedstawia przykład użycia transakcji SAPI.

Suma

Biblioteka demonstracyjna z implementacją kilku funkcji C i jednej funkcji C++. Wykorzystuje protobufy do wymiany danych między kodem hosta a biblioteką SAPI.

  • Definicję piaskownicy znajdziesz w pliku sandbox.h.
  • (generowany automatycznie) plik adnotacji funkcji (plik zawierający prototypy funkcji piaskownicy) będzie można znaleźć w bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h po kompilacji w Bazelu.
  • Prawdziwą logikę wykonywania (kod hosta), która wykorzystuje wyeksportowane procedury w trybie piaskownicy, można znaleźć w pliku main_sum.cc.

zlib

To jest implementacja demonstracyjna biblioteki zlib, która działa, ale nie jest obecnie wykorzystywana w wersji produkcyjnej. Służy do eksportowania niektórych jej funkcji i udostępniania ich w kodzie hosta.

Zademonstrowana funkcja kodu hosta to dekodowanie strumieni zlib ze stdin do stdout.

Ta biblioteka SAPI nie korzysta z pliku sandbox.h, ponieważ korzysta z domyślnej zasady Sandbox2 i osadzonej biblioteki SAPI, więc nie trzeba podawać metody sapi::Sandbox::GetLibPath() ani sapi::Sandbox::GetPolicy().

Pakiet Zlib SAPI można znaleźć w katalogu //sapi_sandbox/examples/zlib wraz z kodem hosta.

stringop

Ten przykład pokazuje użycie protobufów do podania funkcji reverse i duplication w postaci ciągu znaków. Biblioteka zawiera też specjalny plik sandbox.h, aby zapewnić bardziej rygorystyczne zasady piaskownicy.

Kod hosta nie reprezentuje „normalnego” programu, tylko obrazuje funkcjonalność biblioteki SAPI za pomocą testów jednostkowych.

W tym przykładzie uwzględniono też funkcje inne niż protobuf, które pozwalają porównać oba podejścia.