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.