X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/80e2389990082500d76eb566d4946be3e786c3ef..d8f41ccd20de16f8ebe2ccc84d47bf1cb2b26bbb:/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 index 00000000..f5121f21 --- /dev/null +++ b/Security/libsecurity_transform/lib/SingleShotSource.cpp @@ -0,0 +1,61 @@ + +#include "SingleShotSource.h" +#include + +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; +}