Documentation ¶
Index ¶
- Variables
- type Action
- type DefaultHttpContext
- func (*DefaultHttpContext) OnHttpRequestBody(int, bool) Action
- func (*DefaultHttpContext) OnHttpRequestHeaders(int, bool) Action
- func (*DefaultHttpContext) OnHttpRequestTrailers(int) Action
- func (*DefaultHttpContext) OnHttpResponseBody(int, bool) Action
- func (*DefaultHttpContext) OnHttpResponseHeaders(int, bool) Action
- func (*DefaultHttpContext) OnHttpResponseTrailers(int) Action
- func (*DefaultHttpContext) OnHttpStreamDone()
- type DefaultPluginContext
- func (*DefaultPluginContext) NewHttpContext(uint32) HttpContext
- func (*DefaultPluginContext) NewTcpContext(uint32) TcpContext
- func (*DefaultPluginContext) OnPluginDone() bool
- func (*DefaultPluginContext) OnPluginStart(int) OnPluginStartStatus
- func (*DefaultPluginContext) OnQueueReady(uint32)
- func (*DefaultPluginContext) OnTick()
- type DefaultTcpContext
- func (*DefaultTcpContext) OnDownstreamClose(PeerType)
- func (*DefaultTcpContext) OnDownstreamData(int, bool) Action
- func (*DefaultTcpContext) OnNewConnection() Action
- func (*DefaultTcpContext) OnStreamDone()
- func (*DefaultTcpContext) OnUpstreamClose(PeerType)
- func (*DefaultTcpContext) OnUpstreamData(int, bool) Action
- type DefaultVMContext
- type HttpContext
- type OnPluginStartStatus
- type OnVMStartStatus
- type PeerType
- type PluginContext
- type TcpContext
- type VMContext
Constants ¶
This section is empty.
Variables ¶
var ( // ErrorStatusNotFound means not found for various hostcalls. ErrorStatusNotFound = errors.New("error status returned by host: not found") // ErrorStatusBadArgument means the arguments for a hostcall are invalid. ErrorStatusBadArgument = errors.New("error status returned by host: bad argument") // ErrorStatusEmpty means the target queue of DequeueSharedQueue call is empty. ErrorStatusEmpty = errors.New("error status returned by host: empty") // ErrorStatusCasMismatch means the CAS value provided to the SetSharedData // does not match the current value. It indicates that other Wasm VMs // have already set a value for the same key, and the current CAS // for the key gets incremented. // Having retry logic in the face of this error is recommended. ErrorStatusCasMismatch = errors.New("error status returned by host: cas mismatch") // ErrorInternalFailure indicates an internal failure in hosts. // When this error occurs, there's nothing we could do in the Wasm VM. // Abort or panic after this error is recommended. ErrorInternalFailure = errors.New("error status returned by host: internal failure") // ErrorUnimplemented indicates the API is not implemented in the host yet. ErrorUnimplemented = errors.New("error status returned by host: unimplemented") )
Functions ¶
This section is empty.
Types ¶
type Action ¶
type Action uint32
Action represents the action which Wasm contexts expects hosts to take.
const ( // ActionContinue means that the host continues the processing. ActionContinue Action = 0 // ActionPause means that the host pauses the processing. ActionPause Action = 1 // FilterHeadersStatus::Continue HeaderContinue Action = 0 // FilterHeadersStatus::StopIteration HeaderStopIteration Action = 1 // FilterHeadersStatus::ContinueAndEndStream HeaderContinueAndEndStream Action = 2 // FilterHeadersStatus::StopAllIterationAndBuffer HeaderStopAllIterationAndBuffer Action = 3 // FilterHeadersStatus::StopAllIterationAndWatermark HeaderStopAllIterationAndWatermark Action = 4 // FilterDataStatus::Continue DataContinue Action = 0 // FilterDataStatus::StopIterationAndBuffer DataStopIterationAndBuffer Action = 1 // FilterDataStatus::StopIterationAndWatermark DataStopIterationAndWatermark Action = 2 // FilterDataStatus::StopIterationNoBuffer DataStopIterationNoBuffer Action = 3 )
type DefaultHttpContext ¶
type DefaultHttpContext struct{}
DefaultHttpContext provides the no-op implementation of the HttpContext interface.
func (*DefaultHttpContext) OnHttpRequestBody ¶
func (*DefaultHttpContext) OnHttpRequestBody(int, bool) Action
func (*DefaultHttpContext) OnHttpRequestHeaders ¶
func (*DefaultHttpContext) OnHttpRequestHeaders(int, bool) Action
func (*DefaultHttpContext) OnHttpRequestTrailers ¶
func (*DefaultHttpContext) OnHttpRequestTrailers(int) Action
func (*DefaultHttpContext) OnHttpResponseBody ¶
func (*DefaultHttpContext) OnHttpResponseBody(int, bool) Action
func (*DefaultHttpContext) OnHttpResponseHeaders ¶
func (*DefaultHttpContext) OnHttpResponseHeaders(int, bool) Action
func (*DefaultHttpContext) OnHttpResponseTrailers ¶
func (*DefaultHttpContext) OnHttpResponseTrailers(int) Action
func (*DefaultHttpContext) OnHttpStreamDone ¶
func (*DefaultHttpContext) OnHttpStreamDone()
type DefaultPluginContext ¶
type DefaultPluginContext struct{}
DefaultPluginContext provides the no-op implementation of the PluginContext interface.
func (*DefaultPluginContext) NewHttpContext ¶
func (*DefaultPluginContext) NewHttpContext(uint32) HttpContext
func (*DefaultPluginContext) NewTcpContext ¶
func (*DefaultPluginContext) NewTcpContext(uint32) TcpContext
func (*DefaultPluginContext) OnPluginDone ¶
func (*DefaultPluginContext) OnPluginDone() bool
func (*DefaultPluginContext) OnPluginStart ¶
func (*DefaultPluginContext) OnPluginStart(int) OnPluginStartStatus
func (*DefaultPluginContext) OnQueueReady ¶
func (*DefaultPluginContext) OnQueueReady(uint32)
func (*DefaultPluginContext) OnTick ¶
func (*DefaultPluginContext) OnTick()
type DefaultTcpContext ¶
type DefaultTcpContext struct{}
DefaultTcpContext provides the no-op implementation of the TcpContext interface.
func (*DefaultTcpContext) OnDownstreamClose ¶
func (*DefaultTcpContext) OnDownstreamClose(PeerType)
func (*DefaultTcpContext) OnDownstreamData ¶
func (*DefaultTcpContext) OnDownstreamData(int, bool) Action
func (*DefaultTcpContext) OnNewConnection ¶
func (*DefaultTcpContext) OnNewConnection() Action
func (*DefaultTcpContext) OnStreamDone ¶
func (*DefaultTcpContext) OnStreamDone()
func (*DefaultTcpContext) OnUpstreamClose ¶
func (*DefaultTcpContext) OnUpstreamClose(PeerType)
func (*DefaultTcpContext) OnUpstreamData ¶
func (*DefaultTcpContext) OnUpstreamData(int, bool) Action
type DefaultVMContext ¶
type DefaultVMContext struct{}
DefaultVMContext provides the no-op implementation of the VMContext interface.
func (*DefaultVMContext) NewPluginContext ¶
func (*DefaultVMContext) NewPluginContext(contextID uint32) PluginContext
func (*DefaultVMContext) OnVMStart ¶
func (*DefaultVMContext) OnVMStart(vmConfigurationSize int) OnVMStartStatus
type HttpContext ¶
type HttpContext interface { // OnHttpRequestHeaders is called when request headers arrive. // Return types.ActionPause if you want to stop sending headers to the upstream. OnHttpRequestHeaders(numHeaders int, endOfStream bool) Action // OnHttpRequestBody is called when a request body *frame* arrives. // Note that this is potentially called multiple times until we see end_of_stream = true. // Return types.ActionPause if you want to buffer the body and stop sending body to the upstream. // Even after returning types.ActionPause, this will be called when an unseen frame arrives. OnHttpRequestBody(bodySize int, endOfStream bool) Action // OnHttpRequestTrailers is called when request trailers arrive. // Return types.ActionPause if you want to stop sending trailers to the upstream. OnHttpRequestTrailers(numTrailers int) Action // OnHttpResponseHeaders is called when response headers arrive. // Return types.ActionPause if you want to stop sending headers to downstream. OnHttpResponseHeaders(numHeaders int, endOfStream bool) Action // OnHttpResponseBody is called when a response body *frame* arrives. // Note that this is potentially called multiple times until we see end_of_stream = true. // Return types.ActionPause if you want to buffer the body and stop sending body to the downtream. // Even after returning types.ActionPause, this will be called when an unseen frame arrives. OnHttpResponseBody(bodySize int, endOfStream bool) Action // OnHttpResponseTrailers is called when response trailers arrive. // Return types.ActionPause if you want to stop sending trailers to the downstream. OnHttpResponseTrailers(numTrailers int) Action // OnHttpStreamDone is called before the host deletes this context. // You can retrieve the HTTP request/response information (such as headers, etc.) during this call. // This can be used to implement logging features. OnHttpStreamDone() }
HttpContext corresponds to each Http stream and is created by PluginContext via NewHttpContext.
type OnPluginStartStatus ¶
type OnPluginStartStatus bool
OnPluginStartStatus is the type of status returned by OnPluginStart
const ( // OnPluginStartStatusOK indicates that PluginContext.OnPluginStart succeeded. OnPluginStartStatusOK OnPluginStartStatus = true // OnPluginStartStatusFailed indicates that PluginContext.OnPluginStart failed. // Further processing for this plugin context never happens. OnPluginStartStatusFailed OnPluginStartStatus = false )
type OnVMStartStatus ¶
type OnVMStartStatus bool
OnVMStartStatus is the type of status returned by OnVMStart
const ( // OnVMStartStatusOK indicates that VMContext.OnVMStartStatus succeeded. OnVMStartStatusOK OnVMStartStatus = true // OnVMStartStatusFailed indicates that VMContext.OnVMStartStatus failed. // Further processing for this VM never happens, and hosts would // delete this VM. OnVMStartStatusFailed OnVMStartStatus = false )
type PluginContext ¶
type PluginContext interface { // OnPluginStart is called for all plugin contexts (after OnVmStart if this is the VM context). // During this call, GetPluginConfiguration is available and can be used to // retrieve the configuration set at config.configuration in the host configuration. OnPluginStart(pluginConfigurationSize int) OnPluginStartStatus // OnPluginDone is called right before the plugin contexts are deleted by hosts. // Return false to indicate plugin is in a pending state and there's more work left. // In that case you must call PluginDone() function once the work is completed to indicate that // hosts can kill this context. OnPluginDone() bool // OnQueueReady is called when the queue is ready after calling the RegisterQueue hostcall. // Note that the queue might be dequeued by another VM running in another thread, so it's // possible queue will be empty during the OnQueueReady even if it is not dequeued by this VM. OnQueueReady(queueID uint32) // OnTick is called when SetTickPeriodMilliSeconds hostcall is called by this plugin context. // This can be used to do asynchronous tasks in parallel to the stream processing. OnTick() // NewTcpContext is used for creating TcpContext for each Tcp stream. // Return nil to indicate this PluginContext is not for TcpContext. NewTcpContext(contextID uint32) TcpContext // NewHttpContext is used for creating HttpContext for each Http stream. // Return nil to indicate this PluginContext is not for HttpContext. NewHttpContext(contextID uint32) HttpContext }
PluginContext corresponds to different plugin configurations (config.configuration). Each configuration is typically given at the HTTP/TCP filter in a listener in the hosts. PluginContext is responsible for creating the "filter instances" for each TCP/HTTP stream on the listener.
type TcpContext ¶
type TcpContext interface { // OnNewConnection is called when the Tcp connection is established between downstream and upstream. OnNewConnection() Action // OnDownstreamData is called when a data frame arrives from the downstream connection. OnDownstreamData(dataSize int, endOfStream bool) Action // OnDownstreamClose is called when the downstream connection is closed. OnDownstreamClose(peerType PeerType) // OnUpstreamData is called when a data frame arrives from the upstream connection. OnUpstreamData(dataSize int, endOfStream bool) Action // OnUpstreamClose is called when the upstream connection is closed. OnUpstreamClose(peerType PeerType) // OnStreamDone is called before the host deletes this context. // You can retrieve the stream information (such as remote addresses, etc.) during this call. // This can be used to implement logging features. OnStreamDone() }
TcpContext corresponds to each Tcp stream and is created by PluginContext via NewTcpContext.
type VMContext ¶
type VMContext interface { // OnVMStart is called after the VM is created and main function is called. // During this call, GetVMConfiguration hostcall is available and can be used to // retrieve the configuration set at vm_config.configuration in the host configuration. // This is mainly used for doing Wasm VM-wide initialization. OnVMStart(vmConfigurationSize int) OnVMStartStatus // NewPluginContext is used for creating PluginContext for each plugin configuration. NewPluginContext(contextID uint32) PluginContext }
VMContext corresponds to a Wasm VM machine and its configuration. It's the entrypoint for extending the network proxy. Its lifetime matches the Wasm Virtual Machines on the host.