Esempi

Panoramica

Abbiamo preparato alcuni esempi per aiutarti a implementare la tua prima libreria di API Sandbox.

Puoi trovarli in //sandboxed_api/examples. Per spiegazioni dettagliate, vedi di seguito.

hello_sapi

Si tratta di un esempio molto semplice che illustra il funzionamento di SAPI. Il file hello_lib.cc implementa una funzione, AddTwoIntegers(), che verrà sottoposta a sandbox e chiamata nel codice host.

Il secondo file di codice host, hello_transacted.cc, mostra un esempio di utilizzo di SAPI Transactions.

Somma

Una libreria demo che implementa alcune funzioni C e una singola funzione C++. Utilizza i protobuf per scambiare dati tra il codice host e la libreria SAPI.

  • La definizione della sandbox è disponibile nel file sandbox.h.
  • Il file di annotazione della funzione (generato automaticamente) (un file che fornisce i prototipi delle funzioni in sandbox) si trova in bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h dopo una compilazione Bazel.
  • La logica di esecuzione effettiva (ovvero il codice host) che utilizza le procedure sandbox esportate si trova in main_sum.cc.

zlib

Si tratta di un'implementazione demo (funzionale, ma attualmente non utilizzata in produzione) per la libreria zlib, che esporta alcune delle sue funzioni e le rende disponibili al codice host.

La funzionalità dimostrata del codice host è la decodifica dei flussi zlib da stdin a stdout.

Questa libreria SAPI non utilizza il file sandbox.h, in quanto utilizza la policy Sandbox2 predefinita e una libreria SAPI incorporata, pertanto non è necessario fornire il metodo sapi::Sandbox::GetLibPath() o sapi::Sandbox::GetPolicy().

L'API zlib si trova in //sapi_sandbox/examples/zlib, insieme al relativo codice host.

stringop

Questo esempio mostra l'utilizzo di protobuf per fornire una stringa reverse e una funzione duplication. La libreria contiene anche un sandbox.h dedicato per fornire un criterio di sandbox più rigoroso.

Il codice host non rappresenta un programma "normale", ma dimostra la funzionalità della libreria SAPI utilizzando i test unitari.

In questo esempio, sono incluse anche le funzioni non basate su protobuf per fornire un confronto tra i due approcci.