mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 22:58:20 +00:00
support for transmitting of capture-semantics closures via Broker, while keeping deprecated functionality
This commit is contained in:
parent
e531b2a7ca
commit
80f7d36582
5 changed files with 166 additions and 35 deletions
39
src/Frame.h
39
src/Frame.h
|
@ -13,6 +13,7 @@
|
|||
|
||||
#include "zeek/ZeekList.h" // for typedef val_list
|
||||
#include "zeek/Obj.h"
|
||||
#include "zeek/Type.h"
|
||||
#include "zeek/IntrusivePtr.h"
|
||||
#include "zeek/ZeekArgs.h"
|
||||
|
||||
|
@ -178,29 +179,42 @@ public:
|
|||
Frame* SelectiveClone(const IDPList& selection, ScriptFunc* func) const;
|
||||
|
||||
/**
|
||||
* Serializes the Frame into a Broker representation.
|
||||
*
|
||||
* Serializing a frame can be fairly non-trivial. If the frame has no
|
||||
* closure the serialized frame is just a vector:
|
||||
* Serializes the frame in the context of supporting the (deprecated)
|
||||
* reference semantics for closures. This can be fairly non-trivial.
|
||||
* If the frame itself has no closure then the serialized frame
|
||||
* is a vector:
|
||||
*
|
||||
* [ "Frame", [offset_map] [serialized_values] ]
|
||||
*
|
||||
* Where serialized_values are two element vectors. A serialized_value
|
||||
* where serialized_values are two-element vectors. A serialized_value
|
||||
* has the result of calling broker::data_to_val on the value in the
|
||||
* first index, and an integer representing that value's type in the
|
||||
* second index. offset_map is a serialized version of the frame's
|
||||
* offset_map.
|
||||
*
|
||||
* A Frame with a closure needs to serialize a little more information.
|
||||
* It is serialized as:
|
||||
* A reference-semantics frame with its own closure needs to
|
||||
* (recursively) serialize more information:
|
||||
*
|
||||
* [ "ClosureFrame", [outer_ids], Serialize(closure), [offset_map],
|
||||
* [serialized_values] ]
|
||||
*
|
||||
* @return the broker representaton, or an error if the serialization
|
||||
* @return the broker representation, or an error if the serialization
|
||||
* failed.
|
||||
*/
|
||||
static broker::expected<broker::data> Serialize(const Frame* target, const IDPList& selection);
|
||||
broker::expected<broker::data> SerializeClosureFrame(const IDPList& selection);
|
||||
|
||||
/**
|
||||
* Serializes the frame in the context of supporting copy semantics
|
||||
* for lambdas:
|
||||
*
|
||||
* [ "CopyFrame", serialized_values ]
|
||||
*
|
||||
* where serialized_values are two-element vectors. A serialized_value
|
||||
* has the result of calling broker::data_to_val on the value in the
|
||||
* first index, and an integer representing that value's type in the
|
||||
* second index.
|
||||
*/
|
||||
broker::expected<broker::data> SerializeCopyFrame();
|
||||
|
||||
/**
|
||||
* Instantiates a Frame from a serialized one.
|
||||
|
@ -208,8 +222,13 @@ public:
|
|||
* @return a pair in which the first item is the status of the serialization;
|
||||
* and the second is the unserialized frame with reference count +1, or
|
||||
* null if the serialization wasn't successful.
|
||||
*
|
||||
* The *captures* argument, if non-nil, specifies that the frame
|
||||
* reflects captures with copy-semantics rather than deprecated
|
||||
* reference semantics.
|
||||
*/
|
||||
static std::pair<bool, FramePtr> Unserialize(const broker::vector& data);
|
||||
static std::pair<bool, FramePtr> Unserialize(const broker::vector& data,
|
||||
const std::vector<FuncType::Capture*>* captures);
|
||||
|
||||
/**
|
||||
* Sets the IDs that the frame knows offsets for. These offsets will
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue