]> git.saurik.com Git - apple/security.git/blob - OSX/libsecurity_transform/lib/SingleShotSource.cpp
Security-58286.1.32.tar.gz
[apple/security.git] / OSX / libsecurity_transform / lib / SingleShotSource.cpp
1
2 #include "SingleShotSource.h"
3 #include "Utilities.h"
4 #include <string>
5
6 using namespace std;
7
8 CFStringRef gSingleShotSourceName = CFSTR("Single Shot Source");
9
10 SingleShotSource::SingleShotSource(CFTypeRef value, Transform* t, CFStringRef name) :
11 Source(gSingleShotSourceName, t, name)
12 {
13 SetValue(value);
14 }
15
16 void SingleShotSource::DoActivate()
17 {
18 // Make sure our destination doesn't vanish while we are sending it data (or the final NULL)
19 CFRetainSafe(mDestination->GetCFObject());
20
21 // take our value and send it on its way
22 mDestination->SetAttribute(mDestinationName, GetValue());
23
24 // send an end of stream
25 mDestination->SetAttribute(mDestinationName, NULL);
26
27 CFReleaseSafe(mDestination->GetCFObject());
28 }
29
30
31
32 Boolean SingleShotSource::Equal(const CoreFoundationObject* obj)
33 {
34 if (Source::Equal(obj))
35 {
36 const SingleShotSource* sss = (const SingleShotSource*) obj;
37 return CFEqual(GetValue(), sss->GetValue());
38 }
39
40 return false;
41 }
42
43
44
45 CFTypeRef SingleShotSource::Make(CFTypeRef value, Transform* t, CFStringRef name)
46 {
47 return CoreFoundationHolder::MakeHolder(gInternalCFObjectName, new SingleShotSource(value, t, name));
48 }
49
50
51
52 std::string SingleShotSource::DebugDescription()
53 {
54 string result = Source::DebugDescription() + ": SingleShotSource ";
55
56 char buffer[256];
57 snprintf(buffer, sizeof(buffer), "(value = %p)", GetValue());
58
59 result += buffer;
60
61 return result;
62 }