Beispiele

Überblick

Wir haben einige Beispiele vorbereitet, die Ihnen bei der Implementierung Ihrer ersten Sandboxed API-Bibliothek helfen sollen.

Sie finden sie unter //sandboxed_api/examples. Eine ausführliche Erläuterung finden Sie weiter unten.

hello_sapi

Dies ist ein sehr einfaches Beispiel, das veranschaulicht, wie SAPI funktioniert. hello_lib.cc implementiert die Funktion AddTwoIntegers(), die in einer Sandbox ausgeführt wird und im Hostcode aufgerufen wird.

Die zweite Hostcodedatei, hello_transacted.cc, zeigt ein Beispiel für die Verwendung von SAPI-Transaktionen.

Summe

Demobibliothek zur Implementierung einiger C-Funktionen und einer einzelnen C++-Funktion Dabei werden Protokollpuffer für den Datenaustausch zwischen Hostcode und der SAPI-Bibliothek verwendet.

  • Die Sandbox-Definition finden Sie in der Datei sandbox.h.
  • Die (automatisch generierte) Annotationsdatei für die Funktion (eine Datei mit Prototypen von Funktionen in einer Sandbox) befindet sich nach einem Bazel-Build in bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h.
  • Die eigentliche Ausführungslogik (auch Hostcode genannt), die die exportierten, in der Sandbox ausgeführten Prozeduren nutzt, finden Sie in main_sum.cc.

zlib

Dies ist eine Demoimplementierung der zlib-Bibliothek, die zwar funktioniert, aber derzeit nicht in der Produktion verwendet wird, bei der einige Funktionen exportiert und für den Hostcode verfügbar gemacht werden.

Die demonstrierte Funktionalität des Hostcodes ist die Decodierung von zlib-Streams von stdin nach stdout.

Diese SAPI-Bibliothek verwendet nicht die Datei sandbox.h, da sie die Sandbox2-Standardrichtlinie und eine eingebettete SAPI-Bibliothek verwendet. Daher ist es nicht erforderlich, die Methode sapi::Sandbox::GetLibPath() oder sapi::Sandbox::GetPolicy() anzugeben.

Die zlib-SAPI finden Sie unter //sapi_sandbox/examples/zlib zusammen mit dem zugehörigen Hostcode.

Stringop

In diesem Beispiel wird die Verwendung von Protokollzwischenspeichern veranschaulicht, mit denen die String-Funktionen reverse und duplication bereitgestellt werden. Die Bibliothek enthält außerdem eine eigene sandbox.h für strengere Sandbox-Richtlinien.

Der Hostcode stellt kein „normales“ Programm dar, sondern veranschaulicht die Funktionalität der SAPI-Bibliothek mithilfe von Einheitentests.

In diesem Beispiel sind auch die nicht auf protobuf basierenden Funktionen enthalten, um einen Vergleich zwischen den beiden Ansätzen zu ermöglichen.