summaryrefslogtreecommitdiff
path: root/transform.cpp
diff options
context:
space:
mode:
authorBrian Potchik <brian@vector35.com>2025-09-30 15:09:48 -0400
committerBrian Potchik <brian@vector35.com>2025-09-30 15:09:48 -0400
commit796932b62e7d007a46d8ad31cdb618e8125073ab (patch)
tree35937ae27a646cc6a1d7e79cafd4b46b0991a0b1 /transform.cpp
parent36a06931b3eac492eb1e609949e2cc5a3a03bf57 (diff)
Initial support for opening container formats.
Diffstat (limited to 'transform.cpp')
-rw-r--r--transform.cpp46
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());
+}
+