rename
[mech_eap.orig] / util_attr.h
index 5407c10..247bad5 100644 (file)
 #define ATTR_TYPE_MAX               (ATTR_TYPE_LOCAL + 1U)
 
 #ifdef __cplusplus
+#include <string>
+
 struct gss_eap_attr_ctx;
 
-struct gss_eap_attr_provider
+struct gss_eap_attr_source
 {
 public:
-    gss_eap_attr_provider(const gss_eap_attr_ctx *ctx,
-                          gss_cred_id_t acceptorCred = GSS_C_NO_CREDENTIAL,
-                          gss_ctx_id_t acceptorCtx = GSS_C_NO_CONTEXT)
+    gss_eap_attr_source(void) {}
+    virtual ~gss_eap_attr_source(void) {}
+
+    bool initWithManager(const gss_eap_attr_ctx *manager)
+    {
+        m_manager = manager;
+        return true;
+    }
+
+    virtual bool initFromExistingContext(const gss_eap_attr_ctx *manager,
+                                         const gss_eap_attr_source *ctx)
     {
-        m_source = ctx;
+        return initWithManager(manager);
     }
 
-    gss_eap_attr_provider(const gss_eap_attr_provider &ctx) {}
-    virtual ~gss_eap_attr_provider(void) {}
+    virtual bool initFromGssContext(const gss_eap_attr_ctx *manager,
+                                    const gss_cred_id_t cred,
+                                    const gss_ctx_id_t ctx)
+    {
+        return initWithManager(manager);
+    }
 
     typedef bool
-    gss_eap_attr_enumeration_cb(const gss_eap_attr_provider *provider,
+    gss_eap_attr_enumeration_cb(const gss_eap_attr_source *provider,
                                 const gss_buffer_t attribute,
                                 void *data);
 
@@ -82,41 +96,35 @@ public:
     virtual void releaseAnyNameMapping(gss_buffer_t type_id,
                                        gss_any_t input) const {}
 
-    virtual void marshall(gss_buffer_t buffer) const {}
-    virtual bool unmarshall(const gss_eap_attr_ctx *ctx,
-                            const gss_buffer_t buffer) { return false; }
+    virtual void exportToBuffer(gss_buffer_t buffer) const {}
+    virtual bool initFromBuffer(const gss_eap_attr_ctx *manager,
+                                const gss_buffer_t buffer)
+    {
+        return initWithManager(manager);
+    }
 
     static bool init() { return true; }
     static void finalize() {}
 
-    static gss_eap_attr_provider *
-    createAttrContext(const gss_eap_attr_ctx *ctx,
-                           gss_cred_id_t acceptorCred,
-                           gss_ctx_id_t acceptorCtx) { return NULL; }
+    static gss_eap_attr_source *createAttrContext(void) { return NULL; }
 
 protected:
-    const gss_eap_attr_ctx *m_source;
+    const gss_eap_attr_ctx *m_manager;
 };
 
-typedef gss_eap_attr_provider * (*gss_eap_attr_create_cb)(
-    const gss_eap_attr_ctx *ctx,
-    gss_cred_id_t acceptorCred,
-    gss_ctx_id_t acceptorCtx);
+typedef gss_eap_attr_source *(*gss_eap_attr_create_factory)(void);
 
-struct gss_eap_attr_ctx : gss_eap_attr_provider
+struct gss_eap_attr_ctx : gss_eap_attr_source
 {
 public:
-    gss_eap_attr_ctx(const gss_eap_attr_ctx *ctx,
-                     gss_cred_id_t acceptorCred,
-                     gss_ctx_id_t acceptorCtx) :
-        gss_eap_attr_provider(ctx, acceptorCred, acceptorCtx) {}
-
-    gss_eap_attr_ctx(const gss_eap_attr_ctx &ctx);
-
+    gss_eap_attr_ctx(void);
     ~gss_eap_attr_ctx(void);
 
-    static gss_eap_attr_ctx *createAttrContext(gss_cred_id_t acceptorCred,
-                                                    gss_ctx_id_t acceptorCtx);
+    bool initFromExistingContext(const gss_eap_attr_ctx *manager,
+                                 const gss_eap_attr_source *ctx);
+    bool initFromGssContext(const gss_eap_attr_ctx *manager,
+                            const gss_cred_id_t cred,
+                            const gss_ctx_id_t ctx);
 
     bool getAttributeTypes(gss_eap_attr_enumeration_cb, void *data) const;
     bool getAttributeTypes(gss_buffer_set_t *attrs);
@@ -136,16 +144,16 @@ public:
     void releaseAnyNameMapping(gss_buffer_t type_id,
                                gss_any_t input) const;
 
-    void marshall(gss_buffer_t buffer) const;
-    bool unmarshall(const gss_eap_attr_ctx *ctx,
-                    const gss_buffer_t buffer);
+    void exportToBuffer(gss_buffer_t buffer) const;
+    bool initFromBuffer(const gss_eap_attr_ctx *ctx,
+                        const gss_buffer_t buffer);
     static bool init();
     static void finalize();
 
     static unsigned int
     attributePrefixToType(const gss_buffer_t prefix);
 
-    static gss_buffer_t
+    static const gss_buffer_t
     attributeTypeToPrefix(unsigned int type);
 
     static void
@@ -165,11 +173,18 @@ public:
                          const gss_buffer_t suffix,
                          gss_buffer_t attribute);
 
-    gss_eap_attr_provider *getProvider(unsigned int type) const;
-    gss_eap_attr_provider *getProvider(const gss_buffer_t prefix) const;
+    static std::string
+    composeAttributeName(const gss_buffer_t prefix,
+                         const gss_buffer_t suffix);
+    static std::string
+    composeAttributeName(unsigned int type,
+                         const gss_buffer_t suffix);
+
+    gss_eap_attr_source *getProvider(unsigned int type) const;
+    gss_eap_attr_source *getProvider(const gss_buffer_t prefix) const;
 
 private:
-    gss_eap_attr_provider *m_providers[ATTR_TYPE_MAX];
+    gss_eap_attr_source *m_providers[ATTR_TYPE_MAX];
 };
 
 #include "util_radius.h"