From 796932b62e7d007a46d8ad31cdb618e8125073ab Mon Sep 17 00:00:00 2001 From: Brian Potchik Date: Tue, 30 Sep 2025 15:09:48 -0400 Subject: Initial support for opening container formats. --- transform.cpp | 46 +++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) (limited to 'transform.cpp') diff --git a/transform.cpp b/transform.cpp index 86f2caf9..468cc0f2 100644 --- a/transform.cpp +++ b/transform.cpp @@ -31,7 +31,14 @@ Transform::Transform(BNTransform* xform) Transform::Transform(BNTransformType type, const string& name, const string& longName, const string& group) : - m_typeForRegister(type), m_nameForRegister(name), m_longNameForRegister(longName), m_groupForRegister(group) + m_typeForRegister(type), m_capabilitiesForRegister(TransformNoCapabilities), m_nameForRegister(name), m_longNameForRegister(longName), m_groupForRegister(group) +{ + m_object = nullptr; +} + + +Transform::Transform(BNTransformType type, BNTransformCapabilities capabilities, const string& name, const string& longName, const string& group) : + m_typeForRegister(type), m_capabilitiesForRegister(capabilities), m_nameForRegister(name), m_longNameForRegister(longName), m_groupForRegister(group) { m_object = nullptr; } @@ -100,6 +107,13 @@ bool Transform::EncodeCallback( } +bool Transform::CanDecodeCallback(void* ctxt, BNBinaryView* input) +{ + CallbackRef xform(ctxt); + return xform->CanDecode(new BinaryView(input)); +} + + vector Transform::EncryptionKeyParameters(size_t fixedKeyLength) { vector params; @@ -136,9 +150,10 @@ void Transform::Register(Transform* xform) callbacks.freeParameters = FreeParametersCallback; callbacks.decode = DecodeCallback; callbacks.encode = EncodeCallback; + callbacks.canDecode = CanDecodeCallback; xform->AddRefForRegistration(); - xform->m_object = BNRegisterTransformType(xform->m_typeForRegister, xform->m_nameForRegister.c_str(), - xform->m_longNameForRegister.c_str(), xform->m_groupForRegister.c_str(), &callbacks); + xform->m_object = BNRegisterTransformTypeWithCapabilities(xform->m_typeForRegister, xform->m_capabilitiesForRegister, + xform->m_nameForRegister.c_str(), xform->m_longNameForRegister.c_str(), xform->m_groupForRegister.c_str(), &callbacks); } @@ -172,6 +187,18 @@ BNTransformType Transform::GetType() const } +BNTransformCapabilities Transform::GetCapabilities() const +{ + return static_cast(BNGetTransformCapabilities(m_object)); +} + + +bool Transform::SupportsDetection() const +{ + return BNTransformSupportsDetection(m_object); +} + + string Transform::GetName() const { char* name = BNGetTransformName(m_object); @@ -219,6 +246,12 @@ bool Transform::Encode(const DataBuffer&, DataBuffer&, const map input) const +{ + return false; +} + + CoreTransform::CoreTransform(BNTransform* xform) : Transform(xform) {} @@ -275,3 +308,10 @@ bool CoreTransform::Encode(const DataBuffer& input, DataBuffer& output, const ma delete[] list; return result; } + + +bool CoreTransform::CanDecode(Ref input) const +{ + return BNCanDecode(m_object, input->GetObject()); +} + -- cgit v1.3.1