diff options
author | Martin Willi <martin@strongswan.org> | 2008-09-02 11:00:13 +0000 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2008-09-02 11:00:13 +0000 |
commit | f7c17aa15c13b10f7b624ae8da5ea3d921b77535 (patch) | |
tree | e8db73c667aa1c9f0d827ed590aeb6393d6037e3 /src/libstrongswan/credentials/builder.h | |
parent | 4da0116d78b726ef4125577bed8e9974883fc7fd (diff) | |
download | strongswan-f7c17aa15c13b10f7b624ae8da5ea3d921b77535.tar.bz2 strongswan-f7c17aa15c13b10f7b624ae8da5ea3d921b77535.tar.xz |
refactored credential builder
allow enumeration of matching builders
try a second builder if the first one fails
builder clones resources internally on demand
caller frees added resources on failure and success
stricter handling of non-supported build parts
Diffstat (limited to 'src/libstrongswan/credentials/builder.h')
-rw-r--r-- | src/libstrongswan/credentials/builder.h | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/libstrongswan/credentials/builder.h b/src/libstrongswan/credentials/builder.h index 22c106b7a..8e0c513c6 100644 --- a/src/libstrongswan/credentials/builder.h +++ b/src/libstrongswan/credentials/builder.h @@ -40,6 +40,8 @@ typedef builder_t* (*builder_constructor_t)(int subtype); enum builder_part_t { /** path to a file containing an ASN1 blob, char* */ BUILD_FROM_FILE, + /** unix socket of a ssh/pgp agent, char* */ + BUILD_AGENT_SOCKET, /** DER encoded ASN1 blob, chunk_t */ BUILD_BLOB_ASN1_DER, /** PEM encoded ASN1 blob, null terminated char* */ @@ -94,8 +96,8 @@ struct builder_t { /** * Add a part to the construct. * - * Any added parts get owned by the builder/construct, so clone/refcount - * them if needed. + * Any added parts are cloned/refcounted by the builder implementation, a + * caller may need to free the passed ressources themself. * * @param part kind of part * @param ... part specific variable argument @@ -112,4 +114,10 @@ struct builder_t { void* (*build)(builder_t *this); }; +/** + * Helper macro to cancel a build in a builder + */ +#define builder_cancel(builder) { (builder)->add = (void*)nop; \ + (builder)->build = (void*)free; } + #endif /* BUILDER_H_ @}*/ |