]> git.saurik.com Git - apple/security.git/blob - SecurityTests/testKeychainAPI/testKeychainAPI/KCOperationID.h
Security-57031.1.35.tar.gz
[apple/security.git] / SecurityTests / testKeychainAPI / testKeychainAPI / KCOperationID.h
1 // ======================================================================
2 // File: KCOperationID.h
3 //
4 // OperationID must be registered so that a test script knows how to
5 // construct an appropriate KCOperation class
6 //
7 // Copyright: Copyright (c) 2000,2003 Apple Computer, Inc. All Rights Reserved.
8 //
9 // Change History (most recent first):
10 //
11 // <1> 2/22/00 em Created.
12 // ======================================================================
13 #ifndef __KC_OPERATION_ID__
14 #define __KC_OPERATION_ID__
15 #include <stdio.h>
16 enum eKCOperationID {
17 OpID_Unknown = -1,
18 OpID_COp_KCGetKeychainManagerVersion = 0,
19 OpID_COp_KeychainManagerAvailable,//1
20 OpID_COp_KCMakeKCRefFromFSRef,//2
21 OpID_COp_KCMakeKCRefFromFSSpec,//3
22 OpID_COp_KCMakeKCRefFromAlias,//4
23 OpID_COp_KCMakeAliasFromKCRef,//5
24 OpID_COp_KCReleaseKeychain,//6
25 OpID_COp_KCUnlockNoUI,//7
26 OpID_COp_KCUnlock,//8
27 OpID_COp_KCUnlockWithInfo,//9
28 OpID_COp_KCLock,//10
29 OpID_COp_KCLockNoUI,//11
30 OpID_COp_KCGetDefaultKeychain,//12
31 OpID_COp_KCSetDefaultKeychain,//13
32 OpID_COp_KCCreateKeychain,//14
33 OpID_COp_KCCreateKeychainNoUI,//15
34 OpID_COp_KCGetStatus,//16
35 OpID_COp_KCChangeSettingsNoUI,//17
36 OpID_COp_KCGetKeychain,//18
37 OpID_COp_KCGetKeychainName,//19
38 OpID_COp_KCChangeSettings,//20
39 OpID_COp_KCCountKeychains,//21
40 OpID_COp_KCGetIndKeychain,//22
41 OpID_COp_KCAddCallback,//23
42 OpID_COp_KCRemoveCallback,//24
43 OpID_COp_KCSetInteractionAllowed,//25
44 OpID_COp_KCIsInteractionAllowed,//26
45 OpID_COp_KCAddAppleSharePassword,//27
46 OpID_COp_KCFindAppleSharePassword,//28
47 OpID_COp_KCAddInternetPassword,//29
48 OpID_COp_KCAddInternetPasswordWithPath,//30
49 OpID_COp_KCFindInternetPassword,//31
50 OpID_COp_KCFindInternetPasswordWithPath,//32
51 OpID_COp_KCAddGenericPassword,//33
52 OpID_COp_KCFindGenericPassword,//34
53 OpID_COp_KCNewItem,//35
54 OpID_COp_KCSetAttribute,//36
55 OpID_COp_KCGetAttribute,//37
56 OpID_COp_KCSetData,//38
57 OpID_COp_KCGetData,//39
58 OpID_COp_KCGetDataNoUI,//40
59 OpID_COp_KCAddItem,//41
60 OpID_COp_KCAddItemNoUI,//42
61 OpID_COp_KCDeleteItem,//43
62 OpID_COp_KCDeleteItemNoUI,//44
63 OpID_COp_KCUpdateItem,//45
64 OpID_COp_KCReleaseItem,//46
65 OpID_COp_KCCopyItem,//47
66 OpID_COp_KCFindFirstItem,//48
67 OpID_COp_KCFindNextItem,//49
68 OpID_COp_KCReleaseSearch,//50
69 OpID_COp_KCFindX509Certificates,//51
70 OpID_COp_KCChooseCertificate,//52
71 OpID_COp_kcunlock,//53
72 OpID_COp_kccreatekeychain,//54
73 OpID_COp_kcgetkeychainname,//55
74 OpID_COp_kcaddapplesharepassword,//56
75 OpID_COp_kcfindapplesharepassword,//57
76 OpID_COp_kcaddinternetpassword,//58
77 OpID_COp_kcaddinternetpasswordwithpath,//59
78 OpID_COp_kcfindinternetpassword,//60
79 OpID_COp_kcfindinternetpasswordwithpath,//61
80 OpID_COp_kcaddgenericpassword,//62
81 OpID_COp_kcfindgenericpassword,//63
82 OpID_COp_KCLogin,//64
83 OpID_COp_KCLogout,//65
84 OpID_COp_KCChangeLoginPassword,//66
85 OpID_NumOperations
86 };
87 #define IS_VALID_OPERATIONID(aID) (aID >= 0 && aID < OpID_NumOperations)
88
89 typedef void * (*tClassCreatorFunc)(void *inClient);
90 typedef struct tOperationInfo{
91 const char * name;
92 tClassCreatorFunc func;
93 } tOperationInfo;
94 // ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
95 // ¥ COpRegister
96 // ÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑ
97 class COpRegister {
98 public:
99 static void * CreateOperation(
100 eKCOperationID inID,
101 void *inClient)
102 {
103 RegisterAll();
104 if(IS_VALID_OPERATIONID(inID)){
105 if(sOperationInfoTbl[inID].func)
106 return (sOperationInfoTbl[inID].func)(inClient);
107 }
108 return NULL;
109 }
110
111 static const char * GetOperationName(
112 eKCOperationID inID)
113 {
114 RegisterAll();
115 if(IS_VALID_OPERATIONID(inID))
116 return sOperationInfoTbl[inID].name;
117 else
118 return "INVALID OPERATION ID";
119 }
120
121 static void RegisterAll();
122 static void RegisterOne(
123 eKCOperationID inID,
124 const char * inName,
125 tClassCreatorFunc inFunc = NULL)
126 {
127 sOperationInfoTbl[inID].name = inName;
128 sOperationInfoTbl[inID].func = inFunc;
129 }
130 protected:
131 static bool sRegistered;
132 static tOperationInfo sOperationInfoTbl[OpID_NumOperations];
133 };
134 template <class T>
135 class TOpRegister{
136 public:
137 static T * Create(
138 void *inClient)
139 {
140 T *aOperation = new T;
141 if(aOperation) aOperation->SetClient(inClient);
142 return aOperation;
143 }
144 static void RegisterOne(
145 eKCOperationID inID,
146 const char * inName)
147 {
148 COpRegister::RegisterOne(inID, inName, (tClassCreatorFunc)Create);
149 }
150 };
151
152 // Relax notations so one can avoid typing long names
153 #define KC_CLASS(funcname) COp_## funcname
154 #define KC_OP_ID(funcname) OpID_COp_## funcname
155 #define Register(funcname) TOpRegister<KC_CLASS(funcname)>::RegisterOne(KC_OP_ID(funcname), (const char*)#funcname "")
156 #define OPERATION_ID(funcname) enum{ operation_ID = KC_OP_ID(funcname) };\
157 eKCOperationID GetID(){ return (eKCOperationID)operation_ID; };
158
159 #endif // __KC_OPERATION_ID__