(file) Return to provreg.h CVS log (file) (dir) Up to [OMI] / omi / provreg

File: [OMI] / omi / provreg / provreg.h (download)
Revision: 1.1.1.1 (vendor branch), Wed May 30 21:47:49 2012 UTC (12 years, 1 month ago) by mike
Branch: TOG
CVS Tags: OMI_1_0_2_Branch, OMI_1_0_2, OMI_1_0_1_PRE, OMI_1_0_1, OMI_1_0_0
Changes since 1.1: +0 -0 lines
Initial Import

/*
**==============================================================================
**
** Open Management Infrastructure (OMI)
**
** Copyright (c) Microsoft Corporation
** 
** Licensed under the Apache License, Version 2.0 (the "License"); you may not 
** use this file except in compliance with the License. You may obtain a copy 
** of the License at 
**
**     http://www.apache.org/licenses/LICENSE-2.0 
**
** THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
** KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED 
** WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, 
** MERCHANTABLITY OR NON-INFRINGEMENT. 
**
** See the Apache 2 License for the specific language governing permissions 
** and limitations under the License.
**
**==============================================================================
*/

#ifndef _omi_provreg_h
#define _omi_provreg_h

#include <common.h>
#include <base/stringarray.h>
#include <base/batch.h>

BEGIN_EXTERNC

typedef enum _ProvInterface
{
    PROV_INTERFACE_STATIK = 1
}
ProvInterface;

typedef enum _ProvHosting
{
    PROV_HOSTING_INPROC = 0,
    PROV_HOSTING_REQUESTOR = 1,
    PROV_HOSTING_USER = 2
}
ProvHosting;

#define  PROV_REG_HOSTING_INPROC          "@inproc@"
#define  PROV_REG_HOSTING_REQUESTOR       "@requestor@"

typedef struct _ProvRegPosition
{
    struct _ProvRegClassInheritanceNode* start;
    struct _ProvRegClassInheritanceNode* current;
    MI_Boolean deep;
}
ProvRegPosition;

typedef struct _ProvRegAssocPosition
{
    struct _ProvRegClassInheritanceNode*    assocClass;
    struct _ProvRegClassInheritanceNode*    resultClass;
    struct _ProvRegClassInheritanceNode*    currentLeft;
    struct _ProvRegAssocBackLinkNode*       currentAssoc;
    struct _ProvRegClassInheritanceNode*    currentRight;
}
ProvRegAssocPosition;

typedef struct _ProvRegEntry
{
    /* Pointer to next entry */
    struct _ProvRegEntry* next;

    /* Provider interface type */
    ProvInterface provInterface;

    /* Hosting type for provider execution */
    ProvHosting hosting;

    /* User name for 'USER' mode (when user specified at registration time) */
    const char*     user;

    /* Namespace this provider serves */
    const MI_Char* nameSpace;

    /* Class this provider supplies */
    const MI_Char* className;

    /* The name library of the library containing provider */
    const char* libraryName;
}
ProvRegEntry;

typedef struct _ProvReg
{
    Batch batch;
    char buffer[1024];
    ProvRegEntry* head;
    ProvRegEntry* tail;
    struct _ProvRegNamespaceNode* namespaces;
}
ProvReg;


MI_Result ProvReg_Init2(
    ProvReg* self);

void ProvReg_Destroy(
    ProvReg* self);

const ProvRegEntry* ProvReg_FindProviderForClass(
    ProvReg* self,
    const MI_Char* nameSpace,
    const MI_Char* className);


/* returns ok or not-found; baseClass will be null if no base class exist */
MI_EXPORT MI_Result ProvReg_GetDirectBaseClass(
    ProvReg* self,
    const MI_Char* nameSpace,
    const MI_Char* className,
    const MI_Char** baseClass);

/* enumerates classes derived classes:
 - if deep == false and className == null, returns all root classes
 - if deep == true and className == null, returns all classes
 - if deep == false and className provided, returns all classes directly derived from given
 - if deep == true and className provided, returns all classes derived from given
*/
MI_EXPORT MI_Result ProvReg_BeginClasses(
    ProvReg* self,
    const MI_Char* nameSpace,
    const MI_Char* className,
    MI_Boolean deep,
    ProvRegPosition* pos);

MI_EXPORT MI_Result ProvReg_NextClass(
    ProvRegPosition* pos,
    const MI_Char** className,
    MI_Boolean* done);

MI_EXPORT MI_Result ProvReg_EndClasses(
    ProvRegPosition* pos);


/* returns enumerator to all registered association classes by given instance 
 * class and (optionally) assoc/result classes 
 */
MI_EXPORT MI_Result ProvReg_BeginAssocClasses(
    ProvReg* self,
    const MI_Char* nameSpace,
    const MI_Char* className,
    const MI_Char* assocClassName,  /* can be NULL */
    const MI_Char* resultClassName, /* can be NULL */
    ProvRegAssocPosition* pos);

MI_EXPORT MI_Result ProvReg_NextAssocClass(
    ProvRegAssocPosition* pos,
    const MI_Char** className,
    MI_Boolean* done);

MI_EXPORT MI_Result ProvReg_EndAssocClasses(
    ProvRegAssocPosition* pos);

void ProvReg_Dump(
    ProvReg* self,
    FILE* os);

END_EXTERNC

#endif /* _omi_provreg_h */

ViewCVS 0.9.2