diff options
| author | Brian Potchik <brian@vector35.com> | 2025-09-30 15:09:48 -0400 |
|---|---|---|
| committer | Brian Potchik <brian@vector35.com> | 2025-09-30 15:09:48 -0400 |
| commit | 796932b62e7d007a46d8ad31cdb618e8125073ab (patch) | |
| tree | 35937ae27a646cc6a1d7e79cafd4b46b0991a0b1 /transform.cpp | |
| parent | 36a06931b3eac492eb1e609949e2cc5a3a03bf57 (diff) | |
Initial support for opening container formats.
Diffstat (limited to 'transform.cpp')
| -rw-r--r-- | transform.cpp | 46 |
1 files changed, 43 insertions, 3 deletions
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<Transform> xform(ctxt); + return xform->CanDecode(new BinaryView(input)); +} + + vector<TransformParameter> Transform::EncryptionKeyParameters(size_t fixedKeyLength) { vector<TransformParameter> 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<BNTransformCapabilities>(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<string, DataBuf } +bool Transform::CanDecode(Ref<BinaryView> 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<BinaryView> input) const +{ + return BNCanDecode(m_object, input->GetObject()); +} + |
