]> git.saurik.com Git - apple/security.git/blobdiff - Security/libsecurity_transform/lib/SingleShotSource.cpp
Security-57031.1.35.tar.gz
[apple/security.git] / Security / libsecurity_transform / lib / SingleShotSource.cpp
diff --git a/Security/libsecurity_transform/lib/SingleShotSource.cpp b/Security/libsecurity_transform/lib/SingleShotSource.cpp
new file mode 100644 (file)
index 0000000..f5121f2
--- /dev/null
@@ -0,0 +1,61 @@
+
+#include "SingleShotSource.h"
+#include <string>
+
+using namespace std;
+
+CFStringRef gSingleShotSourceName = CFSTR("Single Shot Source");
+
+SingleShotSource::SingleShotSource(CFTypeRef value, Transform* t, CFStringRef name) :
+       Source(gSingleShotSourceName, t, name)
+{
+       SetValue(value);
+}
+
+void SingleShotSource::DoActivate()
+{
+       // Make sure our destination doesn't vanish while we are sending it data (or the final NULL)
+       CFRetain(mDestination->GetCFObject());
+       
+       // take our value and send it on its way
+       mDestination->SetAttribute(mDestinationName, GetValue());
+       
+       // send an end of stream
+       mDestination->SetAttribute(mDestinationName, NULL);
+
+       CFRelease(mDestination->GetCFObject());
+}
+
+
+
+Boolean SingleShotSource::Equal(const CoreFoundationObject* obj)
+{
+       if (Source::Equal(obj))
+       {
+               const SingleShotSource* sss = (const SingleShotSource*) obj;
+               return CFEqual(GetValue(), sss->GetValue());
+       }
+       
+       return false;
+}
+
+
+
+CFTypeRef SingleShotSource::Make(CFTypeRef value, Transform* t, CFStringRef name)
+{
+       return CoreFoundationHolder::MakeHolder(gInternalCFObjectName, new SingleShotSource(value, t, name));
+}
+
+
+
+std::string SingleShotSource::DebugDescription()
+{
+       string result = Source::DebugDescription() + ": SingleShotSource ";
+       
+       char buffer[256];
+       snprintf(buffer, sizeof(buffer), "(value = %p)", GetValue());
+       
+       result += buffer;
+       
+       return result;
+}