blob: 47257691399255acd8f42b2dc3f6c79e7c863d0e [file] [log] [blame]
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#pragma once
#include "include/proxy-wasm/wasm.h"
#include "ats_context.h"
#include "ts/ts.h"
namespace ats_wasm
{
using proxy_wasm::ContextBase;
using proxy_wasm::PluginBase;
using proxy_wasm::AllowedCapabilitiesMap;
using proxy_wasm::WasmBase;
using proxy_wasm::WasmHandleBase;
using proxy_wasm::WasmVm;
using proxy_wasm::WasmVmFactory;
using proxy_wasm::WasmVmIntegration;
class Context;
class ATSWasmVmIntegration : public WasmVmIntegration
{
public:
// proxy_wasm::WasmVmIntegration
WasmVmIntegration *
clone() override
{
return new ATSWasmVmIntegration();
}
bool getNullVmFunction(std::string_view function_name, bool returns_word, int number_of_arguments, proxy_wasm::NullPlugin *plugin,
void *ptr_to_function_return) override;
proxy_wasm::LogLevel getLogLevel() override;
void error(std::string_view message) override;
void trace(std::string_view message) override;
};
class Wasm : public WasmBase
{
public:
// new constructors
Wasm(std::unique_ptr<WasmVm> wasm_vm, std::string_view vm_id, std::string_view vm_configuration, std::string_view vm_key,
std::unordered_map<std::string, std::string> envs, AllowedCapabilitiesMap allowed_capabilities);
Wasm(const std::shared_ptr<WasmHandleBase> &base_wasm_handle, const WasmVmFactory &factory);
// start a new VM
Context *start(const std::shared_ptr<PluginBase> &plugin, TSCont cont);
// provide access to VM mutex
TSMutex mutex() const;
// functions to manage lifecycle of VM
bool readyShutdown();
bool readyDelete();
// functions for creating contexts from the VM
ContextBase *createVmContext() override;
ContextBase *createRootContext(const std::shared_ptr<PluginBase> &plugin) override;
ContextBase *createContext(const std::shared_ptr<PluginBase> &plugin) override;
// functions managing timer
bool existsTimerPeriod(uint32_t root_context_id);
std::chrono::milliseconds getTimerPeriod(uint32_t root_context_id);
void removeTimerPeriod(uint32_t root_context_id);
// override function for reporting error
void error(std::string_view message) override;
protected:
friend class Context;
private:
TSMutex mutex_{nullptr};
};
} // namespace ats_wasm