Exemplos

Visão geral

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

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

hello_sapi

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

O segundo arquivo de código do host, hello_transacted.cc, demonstra um exemplo de uso das transações da 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 do 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 em 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 do host) que usa os procedimentos em sandbox exportados pode ser encontrada em main_sum.cc.

zlib

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

A funcionalidade demonstrada do código do host é a decodificação de fluxos zlib de stdin para stdout.

Essa biblioteca SAPI não usa o arquivo sandbox.h, porque usa a política padrão do Sandbox2 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, junto com o código do host.

stringop

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

O Host Code 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.