Example #1
0
static struct native_enum * __new_enumeration (
    int mm_add,
    CMPIArray * array,
    CMPIStatus * rc )
{
    static CMPIEnumerationFT eft = {
        NATIVE_FT_VERSION,
        __eft_release,
        __eft_clone,
        __eft_getNext,
        __eft_hasNext,
        __eft_toArray
    };
    static CMPIEnumeration e = {
        "CMPIEnumeration",
        &eft
    };

    struct native_enum * enumeration =
        (struct native_enum *)
    tool_mm_alloc ( mm_add, sizeof ( struct native_enum ) );

    enumeration->enumeration = e;
    enumeration->mem_state   = mm_add;
    enumeration->data =
        ( mm_add == TOOL_MM_NO_ADD )?
        CMClone ( array, rc ): array;

    CMSetStatus ( rc, CMPI_RC_OK );
    return enumeration;
}
Example #2
0
static CMPIEnumeration * __eft_clone (
    CONST CMPIEnumeration * enumeration,
    CMPIStatus * rc )
{
    CMPIStatus tmp;
    struct native_enum * e = (struct native_enum *) enumeration;
    CMPIArray * data;

    if (!checkArgs(enumeration, rc))
    {
        return 0;
    }

    data = CMClone ( e->data, &tmp );

    if (tmp.rc != CMPI_RC_OK)
    {

        CMSetStatus ( rc, CMPI_RC_ERR_FAILED );
        return NULL;
    }

    return
        (CMPIEnumeration *) __new_enumeration (
        TOOL_MM_NO_ADD,
        data,
        rc );
}
Example #3
0
static NativeSubCond *__new_subcond(int mode, CMPIValuePtr ptr, CMPIStatus * rc)
{
   static CMPISubCondFT eft = {
      NATIVE_FT_VERSION,
      __eft_release,
      __eft_clone,
      __eft_getCount,
      __eft_getPredicateAt,
      __eft_getPredicate
   };
   
   static CMPISubCond c = {
      "CMPISubCond",
      &eft
   };
   int state;


   NativeSubCond cond,*tCond;
   memset(&cond, 0, sizeof(cond));
   
   cond.sc = c;
   cond.cond=ptr;
   
   tCond=memAddEncObj(mode, &cond, sizeof(cond),&state);
   tCond->mem_state=state;
   
   if (rc) CMSetStatus(rc, CMPI_RC_OK);
   return tCond;
}
Example #4
0
static CMPIArray * __eft_toArray ( CMPIEnumeration * enumeration,
				   CMPIStatus * rc )
{
	struct native_enum * e = (struct native_enum *) enumeration;
	CMSetStatus ( rc, CMPI_RC_OK );
	return e->data;
}
Example #5
0
static NativeResult *
__new_empty_result(int mode, CMPIStatus *rc)
{
  static CMPIResultFT rft = {
    NATIVE_FT_VERSION,
    __rft_release,
    __rft_clone,
    __rft_returnData,
    __rft_returnInstance,
    __rft_returnObjectPath,
    __rft_returnDone
  };
  static CMPIResult r = {
    "CMPIResult",
    &rft
  };
  int             state;

  NativeResult    result,
                 *tRslt;
  memset(&result, 0, sizeof(NativeResult));
  result.result = r;

  tRslt = memAddEncObj(mode, &result, sizeof(result), &state);
  tRslt->mem_state = state;

  if (rc)
    CMSetStatus(rc, CMPI_RC_OK);

  return tRslt;
}
Example #6
0
static struct native_selectexp * __new_exp ( 
    int mm_add,
    CMPIUint64 id,
    CMPIStatus * rc )
{
    static CMPISelectExpFT eft = {
        NATIVE_FT_VERSION,
        __eft_release,
        __eft_clone,
        __eft_evaluate,
        __eft_getString,
        __eft_getDOC,
        __eft_getCOD,
        __eft_evaluateUsingAccessor
    };
    static CMPISelectExp e = {
        "CMPISelectExp",
        &eft
    };


    struct native_selectexp * exp =
        (struct native_selectexp *)
        tool_mm_alloc ( mm_add, sizeof ( struct native_selectexp ) );

    exp->exp         = e;
    exp->mem_state   = mm_add;
    exp->id          = id;

    CMSetStatus ( rc, CMPI_RC_OK );
    return exp;
}
Example #7
0
static NativePredicate *
__new_predicate(int mode, QLOperation * op, CMPIStatus *rc)
{
  static CMPIPredicateFT eft = {
    NATIVE_FT_VERSION,
    __eft_release,
    __eft_clone,
    __eft_getData,
    __eft_evaluate
  };

  static CMPIPredicate p = {
    "CMPIPredicate",
    &eft
  };
  int             state;

  NativePredicate pred,
                 *tPred;
  memset(&pred, 0, sizeof(pred));

  pred.pred = p;
  pred.op = op;

  tPred = memAddEncObj(mode, &pred, sizeof(pred), &state);
  tPred->mem_state = state;

  if (rc)
    CMSetStatus(rc, CMPI_RC_OK);
  return tPred;
}
Example #8
0
static struct native_enum * __new_enumeration ( CMPIArray * array,
						CMPIStatus * rc )
{
	static CMPIEnumerationFT eft = {
		NATIVE_FT_VERSION,
		__eft_release,
		__eft_clone,
		__eft_getNext,
		__eft_hasNext,
		__eft_toArray
	};
	static const CMPIEnumeration e = {
		"CMPIEnumeration",
		&eft
	};

	struct native_enum * enumeration = (struct native_enum *)
		calloc ( 1, sizeof ( struct native_enum ) );

	enumeration->enumeration = e;
	enumeration->data = array; 	/* CMClone ( array, rc ) ? */

	CMSetStatus ( rc, CMPI_RC_OK );
	return enumeration;
}
Example #9
0
static NativeSelectExp *
__new_exp(int mode, const char *queryString,
          const char *language, const char *sns, CMPIArray **projection,
          CMPIStatus *rc)
{
  int             state,
                  irc;
  NativeSelectExp exp,
                 *tExp;

  memset(&exp, 0, sizeof(exp));
  exp.exp = eFt;

  /*
   * fprintf(stderr,"*** new select expression: %s %s\n",queryString,
   * language);
   */
  exp.qs =
      parseQuery(mode, (char *) queryString, (char *) language,
                 (char *) sns, &irc);
  if (irc) {
    if (rc)
      CMSetStatus(rc, CMPI_RC_ERR_INVALID_QUERY);
    return NULL;
  }

  exp.queryString = strdup(queryString);
  exp.language = strdup(language);
  if (sns)
    exp.sns = strdup(sns);

  if (projection) {
    char          **list = exp.qs->spNames;
    int             i;
    CMPIArray      *ar =
        *projection = TrackedCMPIArray(exp.qs->spNext, CMPI_string, NULL);
    for (i = 0; *list; list++, i++)
      CMSetArrayElementAt(ar, i, (CMPIValue *) * list, CMPI_chars);
  }

  tExp = memAddEncObj(mode, &exp, sizeof(exp), &state);
  tExp->mem_state = state;

  if (rc)
    CMSetStatus(rc, CMPI_RC_OK);
  return tExp;
}
Example #10
0
   static CMPIUint64 dtGetBinaryFormat(const CMPIDateTime* eDt, CMPIStatus* rc) {
      CIMDateTime* dt=(CIMDateTime*)eDt->hdl;
      if (!dt) {
		if (rc) CMSetStatus(rc, CMPI_RC_ERR_INVALID_PARAMETER);
	    return 0;
      }
      CMPIUint64 days,hours,mins,secs,usecs,utc,lTime;
      struct tm tm,tmt;
      CString tStr=dt->toString().getCString();
      char cStr[26];
      memset( cStr, 0, 26);
      memcpy (cStr, (const char*)tStr, 25);
      if (dt->isInterval()) {
         cStr[21]=0;
         usecs=atoi(cStr+15);
         cStr[15]=0;
         secs=atoi(cStr+12);
         cStr[12]=0;
         mins=atoi(cStr+10);
         cStr[10]=0;
         hours=atoi(cStr+8);
         cStr[8]=0;
         days=atoi(cStr);
         lTime=(days*PEGASUS_UINT64_LITERAL(86400000000))+
               (hours*PEGASUS_UINT64_LITERAL(3600000000))+
               (mins*60000000)+(secs*1000000)+usecs;
      }

      else {
         time_t tt=time(NULL);
   #ifdef PEGASUS_PLATFORM_WIN32_IX86_MSVC
         tmt=*localtime(&tt);
   #else
         localtime_r(&tt,&tmt);
   #endif
         memset(&tm,0,sizeof(tm));
         tm.tm_isdst=tmt.tm_isdst;
         utc=atoi(cStr+21);
         cStr[21]=0;
         usecs=atoi(cStr+15);
         cStr[15]=0;
         tm.tm_sec=atoi(cStr+12);
         cStr[12]=0;
         tm.tm_min=atoi(cStr+10);
         cStr[10]=0;
         tm.tm_hour=atoi(cStr+8);
         cStr[8]=0;
         tm.tm_mday=atoi(cStr+6);
         cStr[6]=0;
         tm.tm_mon=(atoi(cStr+4)-1);
         cStr[4]=0;
         tm.tm_year=(atoi(cStr)-1900);
         lTime=mktime(&tm);
         lTime*=1000000;
         lTime+=usecs;
      }

      return lTime;
   }
Example #11
0
static CMPIBoolean
__eft_evaluate(const CMPIPredicate *pred,
               CMPIAccessor * acc, void *v, CMPIStatus *rc)
{
  if (rc)
    CMSetStatus(rc, CMPI_RC_ERR_NOT_SUPPORTED);
  return 0;
}
Example #12
0
CMPIData KFindProperty(
    const CMPIInstance* ci, 
    const char* name,
    CMPIStatus* status)
{
    CMPICount count;
    CMPICount i;
    CMPIData cd;

    count = CMGetPropertyCount(ci, NULL);

    for (i = 0; i < count; i++)
    {
        CMPIString* pn = NULL;
        CMPIStatus st;

        cd = CMGetPropertyAt(ci, i, &pn, &st);

        if (!KOkay(st) || !pn)
        {
            memset(&cd, 0, sizeof(cd));

            if (status)
                CMSetStatus(status, CMPI_RC_ERR_FAILED);

            return cd;
        }

        if (strcasecmp(KChars(pn), name) == 0)
        {
            if (status)
                CMSetStatus(status, CMPI_RC_OK);

            return cd;
        }
    }

    /* Not found! */

    memset(&cd, 0, sizeof(cd));

    if (status)
        CMSetStatus(status, CMPI_RC_ERR_NOT_FOUND);

    return cd;
}
Example #13
0
static CMPICount
getQualifierCount(CMPIConstClass * cc, CMPIStatus *rc)
{
  ClClass        *cls = (ClClass *) cc->hdl;
  if (rc)
    CMSetStatus(rc, CMPI_RC_OK);
  return (CMPICount) ClClassGetQualifierCount(cls);
}
Example #14
0
 static CMPIData mbInvokeMethod(const CMPIBroker *mb, const CMPIContext *ctx,
                const CMPIObjectPath *cop, const char *method, const CMPIArgs *in, CMPIArgs *out,
       CMPIStatus *rc) {
    CMPIData data={0,CMPI_nullValue,{0}};
    mb=CM_BROKER;
    if (rc) CMSetStatus(rc,CMPI_RC_ERR_NOT_SUPPORTED);
    return data;
 }
Example #15
0
File: args.c Project: mchasal/SFCB
static unsigned int
__aft_getArgCount(const CMPIArgs * args, CMPIStatus *rc)
{
  ClArgs         *ca = (ClArgs *) args->hdl;
  if (rc)
    CMSetStatus(rc, CMPI_RC_OK);
  return (CMPICount) ClArgsGetArgCount(ca);
}
    CMPIPredicate* sbcGetPredicateAt(const CMPISubCond* eSbc, 
    unsigned int index, CMPIStatus* rc)
    {
        PEG_METHOD_ENTER(
            TRC_CMPIPROVIDERINTERFACE,
            "CMPI_SubCond:sbcGetPredicateAt()");
        const CMPI_SubCond *sbc = (CMPI_SubCond*)eSbc->hdl;
        if( !sbc )
        {
            PEG_TRACE_CSTRING(
                TRC_CMPIPROVIDERINTERFACE,
                Tracer::LEVEL1,
                "Invalid handle in CMPI_SubCond:sbcGetPredicateAt");
            CMSetStatus(rc, CMPI_RC_ERR_INVALID_HANDLE);
            PEG_METHOD_EXIT();
            return 0;
        }
        CMPI_TableauRow* row = (CMPI_TableauRow* )sbc->priv;

        if( row )
        {
            if( index<=row->size() )
            {
                const CMPI_term_el *term=(row->getData())+index;

                CMPIPredicate *prd=(CMPIPredicate*)new CMPI_Predicate(term);
                /**
                   CMPI_Object puts in the hdl the pointer to the 
                   CMPI_Predicate The sbcRelease will use that pointer to 
                   de-allocate the CMPI_Predicate
                   structure.  
                 */
                CMPI_Object *obj = new CMPI_Object(prd);

                CMSetStatus(rc,CMPI_RC_OK);
                CMPIPredicate* cmpiPredicate = 
                    reinterpret_cast<CMPIPredicate*>(obj);
                PEG_METHOD_EXIT();
                return cmpiPredicate;
            }
        }
        CMSetStatus(rc, CMPI_RC_ERR_NO_SUCH_PROPERTY);
        PEG_METHOD_EXIT();
        return NULL; 
    }
Example #17
0
    static CMPIErrorType errGetErrorType(const CMPIError* eErr, CMPIStatus* rc)
    {
        PEG_METHOD_ENTER(
            TRC_CMPIPROVIDERINTERFACE,
            "CMPI_Error:errGetErrorType()");
        CIMError* cer=(CIMError*)eErr->hdl;
        if (!cer)
        {
            PEG_TRACE_CSTRING(
                TRC_CMPIPROVIDERINTERFACE,
                Tracer::LEVEL1,
                "Received invalid Handle - cer...");
            CMSetStatus(rc, CMPI_RC_ERR_INVALID_PARAMETER);
            PEG_METHOD_EXIT();
            return UnknownErrorType;
        }

        CMPIBoolean notNull;
        CIMError::ErrorTypeEnum pgErrorType;

        try
        {
            notNull = cer->getErrorType(pgErrorType);
            if (!notNull)
            {
                PEG_TRACE_CSTRING(
                    TRC_CMPIPROVIDERINTERFACE,
                    Tracer::LEVEL1,
                    "Received invalid Parameter...");
                CMSetStatus(rc, CMPI_RC_ERR_INVALID_PARAMETER);
                PEG_METHOD_EXIT();
                return UnknownErrorType;
            }
        }
        catch (...)
        {
            CMSetStatus(rc, CMPI_RC_ERR_FAILED);
            PEG_METHOD_EXIT();
            return UnknownErrorType;
        }

        CMSetStatus(rc,CMPI_RC_OK);
        PEG_METHOD_EXIT();
        return(CMPIErrorType)pgErrorType;
    }
Example #18
0
static CMPIContext * __cft_clone ( CONST CMPIContext * ctx, CMPIStatus * rc )
{
    if (!checkArgs(ctx, rc))
    {
        return 0;
    }
    CMSetStatus ( rc, CMPI_RC_ERR_NOT_SUPPORTED );
    return NULL;
}
Example #19
0
static CMPIString *
__dtft_getStringFormat(const CMPIDateTime *dt, CMPIStatus *rc)
{
  struct native_datetime *ndt = (struct native_datetime *) dt;

  if (rc)
    CMSetStatus(rc, CMPI_RC_OK);
  return sfcb_native_new_CMPIString(ndt->cimDt, rc, 0);
}
Example #20
0
void
dateTime2chars(CMPIDateTime *dt, CMPIStatus *rc, char *str_time)
{
  struct native_datetime *ndt = (struct native_datetime *) dt;

  strcpy(str_time, ndt->cimDt);
  if (rc)
    CMSetStatus(rc, CMPI_RC_OK);
}
Example #21
0
/*
 * ! \param dt the native CMPIDateTime to be extracted. \param rc return
 * code pointer
 * 
 * \return an amount of microseconds. 
 */
static CMPIUint64
__dtft_getBinaryFormat(const CMPIDateTime *dt, CMPIStatus *rc)
{
  struct native_datetime *ndt = (struct native_datetime *) dt;

  if (rc)
    CMSetStatus(rc, CMPI_RC_OK);
  return chars2bin(ndt->cimDt, rc);
}
Example #22
0
static void
bin2chars(CMPIUint64 msecs, CMPIBoolean interval, CMPIStatus *rc,
          char *str_time)
{
/** /brief bin2chars(): Converts microseconds since epoch to a string time.
 *
 *  Uses the current timezone as the basis for the conversion, but will determine
 *  if DST was in effect at the time in the input.
*/
  time_t          secs = msecs / 1000000ULL;
  unsigned long   usecs = msecs % 1000000ULL;

  if (interval) {

    unsigned long long useconds,
                    seconds,
                    mins,
                    hrs,
                    days;
    /* ddddddddhhmmss.mmmmmm:000, at most 8 characters for day */
    const unsigned long long day_limit = 99999999;
    seconds = msecs / 1000000ULL;
    useconds = msecs % 1000000ULL;

    mins = seconds / 60ULL;
    seconds %= 60ULL;
    hrs = mins / 60ULL;
    mins %= 60ULL;
    /* Modify to avoid datetime string overflow when the time duration overflow */
    days = ((hrs / 24ULL) > day_limit) ? day_limit : (hrs / 24ULL);
    hrs %= 24ULL;

    sprintf(str_time, "%8.8llu%2.2llu%2.2llu%2.2llu.%6.6llu:000",
            days, hrs, mins, seconds, useconds);
  }

  else {
    struct tm       tm_time;
    char            us_utc_time[11];

    if (localtime_r(&secs, &tm_time) == NULL) {

      if (rc)
        CMSetStatus(rc, CMPI_RC_ERR_FAILED);
      return;
    }

    tzset();

    snprintf(us_utc_time, 11, "%6.6ld%+4.3ld",
             usecs, (tm_time.tm_isdst != 0) * 60 - timezone / 60);

    strftime(str_time, 26, "%Y%m%d%H%M%S.", &tm_time);

    strcat(str_time, us_utc_time);
  }
}
Example #23
0
static CMPIBoolean
__dtft_isInterval(const CMPIDateTime *dt, CMPIStatus *rc)
{
  struct native_datetime *ndt = (struct native_datetime *) dt;

  if (rc)
    CMSetStatus(rc, CMPI_RC_OK);
  return ndt->cimDt[21] == ':' ? 1 : 0;
}
Example #24
0
CMPIData
getPropertyQualsAt(CMPIConstClass * cc, CMPICount i, CMPIString **name,
                   unsigned long *quals, CMPIString **refName,
                   CMPIStatus *rc)
{
  ClClass        *cls = (ClClass *) cc->hdl;
  char           *n;
  char           *rName = NULL;
  CMPIData        rv = { 0, CMPI_notFound, {0} };
  if (ClClassGetPropertyAt(cls, i, &rv, name ? &n : NULL, quals, &rName)) {
    if (rc)
      CMSetStatus(rc, CMPI_RC_ERR_NOT_FOUND);
    return rv;
  }
  if (rv.type == CMPI_chars) {
    rv.value.string = sfcb_native_new_CMPIString(rv.value.chars, NULL, 0);
    rv.type = CMPI_string;
  } else if (rv.type == CMPI_ref) {
    if ((rv.state & CMPI_nullValue) == 0)
      rv.value.ref = getObjectPath((char *)
                                   ClObjectGetClString(&cls->hdr,
                                                       (ClString *) &
                                                       rv.value.chars),
                                   NULL);
  }
  if (rv.type & CMPI_ARRAY && rv.value.array) {
    rv.value.array =
        native_make_CMPIArray((CMPIData *) rv.value.array, NULL,
                              &cls->hdr);
  }
  if (name) {
    *name = sfcb_native_new_CMPIString(n, NULL, 0);
  }
  if (refName && rName) {
    *refName = sfcb_native_new_CMPIString(rName, NULL, 0);
  } else {
    if (refName) {
      *refName = NULL;
    }
  }
  if (rc)
    CMSetStatus(rc, CMPI_RC_OK);
  return rv;
}
Example #25
0
/**
 * cmciRelease
**/
CMPIStatus 
cmciRelease(CMCIClient* cmciClient)
{
	CMPIStatus rc;

	cmciClient->ft->release (cmciClient);

	CMSetStatus(&rc, CMPI_RC_OK);
	return rc;
}
Example #26
0
static CMPICount __eft_getCount(const CMPISubCond* cond, CMPIStatus* rc)
{
   NativeSubCond *c = (NativeSubCond *) cond;
   CMPIArray *conds=(CMPIArray*)c->cond.ptr;
   CMPICount count=0;
   
   if (conds) count=CMGetArrayCount(conds,NULL); 
   if (rc) CMSetStatus(rc, CMPI_RC_OK);
   return count;
}
Example #27
0
 PEGASUS_STATIC CMPIType arrayGetType(
     const CMPIArray* eArray,
     CMPIStatus* rc)
 {
     CMPI_Array *arr = (CMPI_Array*)eArray->hdl;
     if (!arr)
     {
         CMSetStatus(rc, CMPI_RC_ERR_INVALID_HANDLE);
         return 0;
     }
     CMPIData *dta = (CMPIData*)arr->hdl;
     if (!dta)
     {
         CMSetStatus(rc, CMPI_RC_ERR_INVALID_HANDLE);
         return CMPI_null;
     }
     CMSetStatus(rc,CMPI_RC_OK);
     return dta->type;
 }
Example #28
0
 PEGASUS_STATIC CMPICount arrayGetSize(
     const CMPIArray* eArray,
     CMPIStatus* rc)
 {
     CMPI_Array *arr = (CMPI_Array*)eArray->hdl;
     if (!arr)
     {
         CMSetStatus(rc, CMPI_RC_ERR_INVALID_HANDLE);
         return 0;
     }
     CMPIData *dta = (CMPIData*)arr->hdl;
     if (!dta)
     {
         CMSetStatus(rc, CMPI_RC_ERR_INVALID_HANDLE);
         return 0;
     }
     CMSetStatus(rc,CMPI_RC_OK);
     return dta->value.uint32;
 }
Example #29
0
static CMPIDateTime* dtClone(const CMPIDateTime* eDt, CMPIStatus* rc) 
{
	OpenWBEM::CIMDateTime * dt=(OpenWBEM::CIMDateTime*)eDt->hdl;
	//OpenWBEM::CIMDateTime * cDt=new OpenWBEM::CIMDateTime(dt->toString());
	OpenWBEM::CIMDateTime * cDt = new OpenWBEM::CIMDateTime(*dt);

	CMPIDateTime* neDt=(CMPIDateTime*)new CMPI_Object(cDt,CMPI_DateTime_Ftab);
	CMSetStatus(rc,CMPI_RC_OK);
	return neDt;
}
Example #30
0
    static CMPIBoolean enumHasNext(
        const CMPIEnumeration* eEnumObj,
        CMPIStatus* rc)
    {
        const CMPIEnumeration* eEnum = (CMPIEnumeration*)eEnumObj->hdl;

        if (!eEnum || !eEnum->hdl)
        {
            PEG_TRACE_CSTRING(
                TRC_CMPIPROVIDERINTERFACE,
                Tracer::LEVEL1,
                "Received invalid Handle - eEnum || eEnum->hdl...");
            CMSetStatus(rc, CMPI_RC_ERR_INVALID_HANDLE);
            return false;
        }
        CMSetStatus(rc, CMPI_RC_OK);
        if ((void*)eEnum->ft == (void*)CMPI_ObjEnumeration_Ftab)
        {
            CMPI_ObjEnumeration* ie = (CMPI_ObjEnumeration*)eEnum;
            if (ie->cursor<ie->max)
            {
                return true;
            }
        }
        else if ((void*)eEnum->ft == (void*)CMPI_InstEnumeration_Ftab)
        {
            CMPI_InstEnumeration* ie = (CMPI_InstEnumeration*)eEnum;
            if (ie->cursor<ie->max)
            {
                return true;
            }
        }
        else
        {
            CMPI_OpEnumeration* oe = (CMPI_OpEnumeration*)eEnum;
            if (oe->cursor<oe->max)
            {
                return true;
            }
        }
        return false;
    }