Exemplos

Informações gerais

Preparamos alguns exemplos para ajudar você a implementar sua primeira biblioteca de APIs no modo sandbox.

Você pode encontrá-los em //sandboxed_api/examples. Veja abaixo explicações detalhadas.

hello_sapi

Este é um exemplo muito básico que ilustra como o SAPI funciona. hello_lib.cc implementa uma função, AddTwoIntegers(), que será colocada no sandbox e chamada no Código do host.

O segundo arquivo de código de host, hello_transacted.cc, demonstra um exemplo de uso de transações SAPI.

Soma

Uma biblioteca de demonstração que implementa algumas funções C e uma única função C++. Ele usa protobufs para trocar dados entre o código de host e a biblioteca SAPI.

  • A definição do sandbox pode ser encontrada no arquivo sandbox.h.
  • O arquivo de anotação de função (gerado automaticamente) (que fornece protótipos de funções no modo sandbox) pode ser encontrado em bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h após um build do Bazel.
  • A lógica de execução real, também conhecida como código de host, que usa os procedimentos exportados no sandbox pode ser encontrada em main_sum.cc.

zlib

Essa é uma implementação de demonstração (funcional, mas atualmente não usada na produção) para a biblioteca zlib, exportando algumas das funções e disponibilizando-as para o Código host.

A funcionalidade demonstrada do Código de Host é a decodificação de streams zlib de stdin para stdout.

Essa biblioteca SAPI não usa o arquivo sandbox.h, porque usa a política Sandbox2 padrão e uma biblioteca SAPI incorporada. Portanto, não é necessário fornecer o método sapi::Sandbox::GetLibPath() ou sapi::Sandbox::GetPolicy().

A SAPI zlib pode ser encontrada em //sapi_sandbox/examples/zlib com o código host (links em inglês).

Stringop

Este exemplo demonstra o uso de protobufs para fornecer uma função de string reverse e duplication. A biblioteca também contém um sandbox.h dedicado para fornecer uma política de sandbox mais rigorosa.

O código host não representa um programa “normal”, mas demonstra a funcionalidade da biblioteca SAPI usando testes de unidade.

Neste exemplo, as funções não baseadas em protobuf também são incluídas para fornecer uma comparação entre as duas abordagens.