Panoramica
Abbiamo preparato alcuni esempi per aiutarti a implementare la tua prima libreria API Sandboxed.
Per una spiegazione dettagliata, consulta la sezione //sandboxed_api/examples.
hello_sapi
Questo è un esempio molto semplice che illustra il funzionamento di SAPI. hello_lib.cc implementa una funzione, AddTwoIntegers()
, che verrà limitata tramite sandbox e chiamata nel codice host.
Il secondo file Codice host, hello_transacted.cc, mostra un esempio di utilizzo delle transazioni SAPI.
Somma
Una libreria demo che implementa alcune funzioni C e una singola funzione C++. Utilizza i protobuf per lo scambio di dati tra il codice host e la libreria SAPI.
- La definizione della sandbox è disponibile nel file sandbox.h.
- Il file di annotazione delle funzioni (generato automaticamente) (un file che fornisce prototipi di funzioni con sandbox) è disponibile in
bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h
dopo una build Bazel. - La logica di esecuzione effettiva (nota anche come Host Code) che utilizza le procedure sandbox esportate è disponibile 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 nell'Host Code.
La funzionalità dimostrata dell'host Code consiste nel decodificare i flussi zlib da stdin a stdout.
Questa libreria SAPI non utilizza il file sandbox.h
, in quanto usa il criterio Sandbox2 predefinito e una libreria SAPI incorporata, quindi non è necessario fornire il metodo sapi::Sandbox::GetLibPath()
o sapi::Sandbox::GetPolicy()
.
La SAPI zlib è disponibile in //sapi_sandbox/examples/zlib, insieme al relativo codice host.
Stringop
Questo esempio mostra l'uso di protobuf per fornire una stringa reverse
e una funzione duplication
. La libreria contiene anche un file sandbox.h dedicato per fornire un criterio sandbox più rigido.
Il codice host non rappresenta un programma "normale", ma dimostra la funzionalità della libreria SAPI utilizzando i test delle unità.
In questo esempio, sono incluse anche funzioni non basate su protobuf per fornire un confronto tra i due approcci.