sfcc 0.1.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.rdoc +24 -0
- data/README.rdoc +16 -0
- data/ext/sfcc/cim_class.c +147 -58
- data/ext/sfcc/cim_class.h +1 -1
- data/ext/sfcc/cim_client.c +187 -198
- data/ext/sfcc/cim_client.h +1 -1
- data/ext/sfcc/cim_enumeration.c +109 -21
- data/ext/sfcc/cim_enumeration.h +1 -1
- data/ext/sfcc/cim_instance.c +70 -77
- data/ext/sfcc/cim_instance.h +1 -1
- data/ext/sfcc/cim_object_path.c +141 -122
- data/ext/sfcc/cim_object_path.h +1 -1
- data/ext/sfcc/cim_string.c +9 -13
- data/ext/sfcc/cim_string.h +1 -1
- data/ext/sfcc/extconf.rb +8 -4
- data/ext/sfcc/sfcc.c +163 -105
- data/ext/sfcc/sfcc.h +15 -40
- data/lib/sfcc.rb +75 -12
- data/lib/sfcc/version.rb +1 -1
- metadata +68 -95
    
        data/CHANGELOG.rdoc
    CHANGED
    
    | @@ -1,3 +1,27 @@ | |
| 1 | 
            +
            == 0.4.0
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            * support https access
         | 
| 4 | 
            +
            * extend Client.connect API for https data
         | 
| 5 | 
            +
            * allow mix of uri and explicit paraters in Client.connect
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            == 0.3.1
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            * simplify properties access for Instance and ObjectPath
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            == 0.3.0
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            * use sfcc 'new' api
         | 
| 14 | 
            +
            * link against libcimcclient
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            == 0.2.0
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            * fix Client.connect for URI
         | 
| 19 | 
            +
            * transparently convert Ruby values to string whereever needed
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            == 0.1.3
         | 
| 22 | 
            +
             | 
| 23 | 
            +
            * fix finding libcmpisfcc for sblim-sfcc-2.2.3
         | 
| 24 | 
            +
             | 
| 1 25 | 
             
            == 0.1.2
         | 
| 2 26 |  | 
| 3 27 | 
             
            * build with ruby 1.9
         | 
    
        data/README.rdoc
    CHANGED
    
    | @@ -10,6 +10,22 @@ ruby-sfcc provides the SBLIM client API ( http://sblim.wiki.sourceforge.net/Sfcc | |
| 10 10 | 
             
            You can use it to connect to any CIMOM talking CIM-XML, but it can take advantage of
         | 
| 11 11 | 
             
            sfcb CIMOM by connecting using a native interface.
         | 
| 12 12 |  | 
| 13 | 
            +
            == Requirements
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            === Ruby interpreters
         | 
| 16 | 
            +
             | 
| 17 | 
            +
            ruby-sfcc has been built and the testsuite ran against:
         | 
| 18 | 
            +
              
         | 
| 19 | 
            +
              * ruby 1.8.7
         | 
| 20 | 
            +
              * ruby 1.9.2
         | 
| 21 | 
            +
              * rubinius HEAD (what will be 1.1 soon)
         | 
| 22 | 
            +
              
         | 
| 23 | 
            +
            === sblim
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            ruby-sfcc has been built and the testsuite ran against:
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            * sblim-sfcc 2.2.1
         | 
| 28 | 
            +
             | 
| 13 29 | 
             
            == Quick Start
         | 
| 14 30 |  | 
| 15 31 | 
             
            You can create a gem by running rake gem.
         | 
    
        data/ext/sfcc/cim_class.c
    CHANGED
    
    | @@ -2,9 +2,10 @@ | |
| 2 2 | 
             
            #include "cim_class.h"
         | 
| 3 3 |  | 
| 4 4 | 
             
            static void
         | 
| 5 | 
            -
            dealloc( | 
| 5 | 
            +
            dealloc(CIMCClass *c)
         | 
| 6 6 | 
             
            {
         | 
| 7 | 
            -
               | 
| 7 | 
            +
            /*  fprintf(stderr, "Sfcc_dealloc_cim_class %p\n", c); */
         | 
| 8 | 
            +
              c->ft->release(c);
         | 
| 8 9 | 
             
            }
         | 
| 9 10 |  | 
| 10 11 | 
             
            /**
         | 
| @@ -15,13 +16,96 @@ dealloc(CMPIConstClass *cimclass) | |
| 15 16 | 
             
             */
         | 
| 16 17 | 
             
            static VALUE class_name(VALUE self)
         | 
| 17 18 | 
             
            {
         | 
| 18 | 
            -
               | 
| 19 | 
            -
               | 
| 20 | 
            -
              Data_Get_Struct(self,  | 
| 21 | 
            -
              classname = cimclass->ft-> | 
| 22 | 
            -
              return rb_str_new2(classname | 
| 19 | 
            +
              CIMCClass *cimclass;
         | 
| 20 | 
            +
              const char *classname;
         | 
| 21 | 
            +
              Data_Get_Struct(self, CIMCClass, cimclass);
         | 
| 22 | 
            +
              classname = cimclass->ft->getCharClassName(cimclass);
         | 
| 23 | 
            +
              return rb_str_new2(classname);
         | 
| 23 24 | 
             
            }
         | 
| 24 25 |  | 
| 26 | 
            +
            /**
         | 
| 27 | 
            +
             * call-seq:
         | 
| 28 | 
            +
             *   superclass_name()
         | 
| 29 | 
            +
             *
         | 
| 30 | 
            +
             * gets the superclass name
         | 
| 31 | 
            +
             */
         | 
| 32 | 
            +
            static VALUE superclass_name(VALUE self)
         | 
| 33 | 
            +
            {
         | 
| 34 | 
            +
              CIMCClass *cimclass;
         | 
| 35 | 
            +
              const char *classname;
         | 
| 36 | 
            +
              Data_Get_Struct(self, CIMCClass, cimclass);
         | 
| 37 | 
            +
              classname = cimclass->ft->getCharSuperClassName(cimclass);
         | 
| 38 | 
            +
              return rb_str_new2(classname);
         | 
| 39 | 
            +
            }
         | 
| 40 | 
            +
             | 
| 41 | 
            +
             | 
| 42 | 
            +
            /**
         | 
| 43 | 
            +
             * call-seq:
         | 
| 44 | 
            +
             *   keys()
         | 
| 45 | 
            +
             *
         | 
| 46 | 
            +
             * gets the list of keys
         | 
| 47 | 
            +
             */
         | 
| 48 | 
            +
            static VALUE keys(VALUE self)
         | 
| 49 | 
            +
            {
         | 
| 50 | 
            +
              VALUE ret;
         | 
| 51 | 
            +
              CIMCClass *cimclass;
         | 
| 52 | 
            +
              CIMCArray *keylist;
         | 
| 53 | 
            +
              Data_Get_Struct(self, CIMCClass, cimclass);
         | 
| 54 | 
            +
              keylist = cimclass->ft->getKeyList(cimclass);
         | 
| 55 | 
            +
              ret = sfcc_cimcarray_to_rubyarray(keylist);
         | 
| 56 | 
            +
              keylist->ft->release(keylist);
         | 
| 57 | 
            +
              return ret;
         | 
| 58 | 
            +
            }
         | 
| 59 | 
            +
             | 
| 60 | 
            +
             | 
| 61 | 
            +
            /**
         | 
| 62 | 
            +
             * call-seq:
         | 
| 63 | 
            +
             *   association?
         | 
| 64 | 
            +
             *
         | 
| 65 | 
            +
             * returns True if the class is an association
         | 
| 66 | 
            +
             */
         | 
| 67 | 
            +
            static VALUE is_association(VALUE self)
         | 
| 68 | 
            +
            {
         | 
| 69 | 
            +
              CIMCClass *cimclass;
         | 
| 70 | 
            +
              CIMCBoolean is;
         | 
| 71 | 
            +
              Data_Get_Struct(self, CIMCClass, cimclass);
         | 
| 72 | 
            +
              is = cimclass->ft->isAssociation(cimclass);
         | 
| 73 | 
            +
              return is ? Qtrue : Qfalse;
         | 
| 74 | 
            +
            }
         | 
| 75 | 
            +
             | 
| 76 | 
            +
             | 
| 77 | 
            +
            /**
         | 
| 78 | 
            +
             * call-seq:
         | 
| 79 | 
            +
             *   abstract?
         | 
| 80 | 
            +
             *
         | 
| 81 | 
            +
             * returns True if the class is abstract
         | 
| 82 | 
            +
             */
         | 
| 83 | 
            +
            static VALUE is_abstract(VALUE self)
         | 
| 84 | 
            +
            {
         | 
| 85 | 
            +
              CIMCClass *cimclass;
         | 
| 86 | 
            +
              CIMCBoolean is;
         | 
| 87 | 
            +
              Data_Get_Struct(self, CIMCClass, cimclass);
         | 
| 88 | 
            +
              is = cimclass->ft->isAbstract(cimclass);
         | 
| 89 | 
            +
              return is ? Qtrue : Qfalse;
         | 
| 90 | 
            +
            }
         | 
| 91 | 
            +
             | 
| 92 | 
            +
             | 
| 93 | 
            +
            /**
         | 
| 94 | 
            +
             * call-seq:
         | 
| 95 | 
            +
             *   indication?
         | 
| 96 | 
            +
             *
         | 
| 97 | 
            +
             * returns True if the class is an indication
         | 
| 98 | 
            +
             */
         | 
| 99 | 
            +
            static VALUE is_indication(VALUE self)
         | 
| 100 | 
            +
            {
         | 
| 101 | 
            +
              CIMCClass *cimclass;
         | 
| 102 | 
            +
              CIMCBoolean is;
         | 
| 103 | 
            +
              Data_Get_Struct(self, CIMCClass, cimclass);
         | 
| 104 | 
            +
              is = cimclass->ft->isIndication(cimclass);
         | 
| 105 | 
            +
              return is ? Qtrue : Qfalse;
         | 
| 106 | 
            +
            }
         | 
| 107 | 
            +
             | 
| 108 | 
            +
             | 
| 25 109 | 
             
            /**
         | 
| 26 110 | 
             
             * call-seq:
         | 
| 27 111 | 
             
             *   property(name)
         | 
| @@ -30,16 +114,16 @@ static VALUE class_name(VALUE self) | |
| 30 114 | 
             
             */
         | 
| 31 115 | 
             
            static VALUE property(VALUE self, VALUE name)
         | 
| 32 116 | 
             
            {
         | 
| 33 | 
            -
               | 
| 34 | 
            -
               | 
| 35 | 
            -
               | 
| 36 | 
            -
              memset(&status, 0, sizeof( | 
| 37 | 
            -
              Data_Get_Struct(self,  | 
| 38 | 
            -
              data = ptr->ft->getProperty(ptr,  | 
| 117 | 
            +
              CIMCClass *ptr;
         | 
| 118 | 
            +
              CIMCStatus status;
         | 
| 119 | 
            +
              CIMCData data;
         | 
| 120 | 
            +
              memset(&status, 0, sizeof(CIMCStatus));
         | 
| 121 | 
            +
              Data_Get_Struct(self, CIMCClass, ptr);
         | 
| 122 | 
            +
              data = ptr->ft->getProperty(ptr, to_charptr(name), &status);
         | 
| 39 123 | 
             
              if ( !status.rc )
         | 
| 40 124 | 
             
                return sfcc_cimdata_to_value(data);
         | 
| 41 125 |  | 
| 42 | 
            -
              sfcc_rb_raise_if_error(status, "Can't retrieve property '%s'",  | 
| 126 | 
            +
              sfcc_rb_raise_if_error(status, "Can't retrieve property '%s'", to_charptr(name));
         | 
| 43 127 | 
             
              return Qnil;
         | 
| 44 128 | 
             
            }
         | 
| 45 129 |  | 
| @@ -55,13 +139,13 @@ static VALUE property(VALUE self, VALUE name) | |
| 55 139 | 
             
             */
         | 
| 56 140 | 
             
            static VALUE each_property(VALUE self)
         | 
| 57 141 | 
             
            {
         | 
| 58 | 
            -
               | 
| 59 | 
            -
               | 
| 142 | 
            +
              CIMCClass *ptr;
         | 
| 143 | 
            +
              CIMCStatus status;
         | 
| 60 144 | 
             
              int k=0;
         | 
| 61 145 | 
             
              int num_props=0;
         | 
| 62 | 
            -
               | 
| 63 | 
            -
               | 
| 64 | 
            -
              Data_Get_Struct(self,  | 
| 146 | 
            +
              CIMCString *property_name;
         | 
| 147 | 
            +
              CIMCData data;
         | 
| 148 | 
            +
              Data_Get_Struct(self, CIMCClass, ptr);
         | 
| 65 149 |  | 
| 66 150 | 
             
              num_props = ptr->ft->getPropertyCount(ptr, &status);
         | 
| 67 151 | 
             
              if (!status.rc) {
         | 
| @@ -72,7 +156,7 @@ static VALUE each_property(VALUE self) | |
| 72 156 | 
             
                  }
         | 
| 73 157 | 
             
                  else {
         | 
| 74 158 | 
             
                    sfcc_rb_raise_if_error(status, "Can't retrieve property #%d", k);
         | 
| 75 | 
            -
                  } | 
| 159 | 
            +
                  }
         | 
| 76 160 | 
             
                  if (property_name) CMRelease(property_name);
         | 
| 77 161 | 
             
                }
         | 
| 78 162 | 
             
              }
         | 
| @@ -90,8 +174,9 @@ static VALUE each_property(VALUE self) | |
| 90 174 | 
             
             */
         | 
| 91 175 | 
             
            static VALUE property_count(VALUE self)
         | 
| 92 176 | 
             
            {
         | 
| 93 | 
            -
               | 
| 94 | 
            -
              Data_Get_Struct(self,  | 
| 177 | 
            +
              CIMCClass *ptr;
         | 
| 178 | 
            +
              Data_Get_Struct(self, CIMCClass, ptr);
         | 
| 179 | 
            +
              Data_Get_Struct(self, CIMCClass, ptr);
         | 
| 95 180 | 
             
              return UINT2NUM(ptr->ft->getPropertyCount(ptr, NULL));
         | 
| 96 181 | 
             
            }
         | 
| 97 182 |  | 
| @@ -103,16 +188,16 @@ static VALUE property_count(VALUE self) | |
| 103 188 | 
             
             */
         | 
| 104 189 | 
             
            static VALUE qualifier(VALUE self, VALUE name)
         | 
| 105 190 | 
             
            {
         | 
| 106 | 
            -
               | 
| 107 | 
            -
               | 
| 108 | 
            -
               | 
| 109 | 
            -
              memset(&status, 0, sizeof( | 
| 110 | 
            -
              Data_Get_Struct(self,  | 
| 111 | 
            -
              data = ptr->ft->getQualifier(ptr,  | 
| 191 | 
            +
              CIMCClass *ptr;
         | 
| 192 | 
            +
              CIMCStatus status;
         | 
| 193 | 
            +
              CIMCData data;
         | 
| 194 | 
            +
              memset(&status, 0, sizeof(CIMCStatus));
         | 
| 195 | 
            +
              Data_Get_Struct(self, CIMCClass, ptr);
         | 
| 196 | 
            +
              data = ptr->ft->getQualifier(ptr, to_charptr(name), &status);
         | 
| 112 197 | 
             
              if ( !status.rc )
         | 
| 113 198 | 
             
                return sfcc_cimdata_to_value(data);
         | 
| 114 199 |  | 
| 115 | 
            -
              sfcc_rb_raise_if_error(status, "Can't retrieve qualifier '%s'",  | 
| 200 | 
            +
              sfcc_rb_raise_if_error(status, "Can't retrieve qualifier '%s'", to_charptr(name));
         | 
| 116 201 | 
             
              return Qnil;
         | 
| 117 202 | 
             
            }
         | 
| 118 203 |  | 
| @@ -128,13 +213,13 @@ static VALUE qualifier(VALUE self, VALUE name) | |
| 128 213 | 
             
             */
         | 
| 129 214 | 
             
            static VALUE each_qualifier(VALUE self)
         | 
| 130 215 | 
             
            {
         | 
| 131 | 
            -
               | 
| 132 | 
            -
               | 
| 216 | 
            +
              CIMCClass *ptr;
         | 
| 217 | 
            +
              CIMCStatus status;
         | 
| 133 218 | 
             
              int k=0;
         | 
| 134 219 | 
             
              int num_props=0;
         | 
| 135 | 
            -
               | 
| 136 | 
            -
               | 
| 137 | 
            -
              Data_Get_Struct(self,  | 
| 220 | 
            +
              CIMCString *qualifier_name;
         | 
| 221 | 
            +
              CIMCData data;
         | 
| 222 | 
            +
              Data_Get_Struct(self, CIMCClass, ptr);
         | 
| 138 223 |  | 
| 139 224 | 
             
              num_props = ptr->ft->getQualifierCount(ptr, &status);
         | 
| 140 225 | 
             
              if (!status.rc) {
         | 
| @@ -145,7 +230,7 @@ static VALUE each_qualifier(VALUE self) | |
| 145 230 | 
             
                  }
         | 
| 146 231 | 
             
                  else {
         | 
| 147 232 | 
             
                    sfcc_rb_raise_if_error(status, "Can't retrieve qualifier #%d", k);
         | 
| 148 | 
            -
                  } | 
| 233 | 
            +
                  }
         | 
| 149 234 | 
             
                  if (qualifier_name) CMRelease(qualifier_name);
         | 
| 150 235 | 
             
                }
         | 
| 151 236 | 
             
              }
         | 
| @@ -163,8 +248,8 @@ static VALUE each_qualifier(VALUE self) | |
| 163 248 | 
             
             */
         | 
| 164 249 | 
             
            static VALUE qualifier_count(VALUE self)
         | 
| 165 250 | 
             
            {
         | 
| 166 | 
            -
               | 
| 167 | 
            -
              Data_Get_Struct(self,  | 
| 251 | 
            +
              CIMCClass *ptr;
         | 
| 252 | 
            +
              Data_Get_Struct(self, CIMCClass, ptr);
         | 
| 168 253 | 
             
              return UINT2NUM(ptr->ft->getQualifierCount(ptr, NULL));
         | 
| 169 254 | 
             
            }
         | 
| 170 255 |  | 
| @@ -176,17 +261,17 @@ static VALUE qualifier_count(VALUE self) | |
| 176 261 | 
             
             */
         | 
| 177 262 | 
             
            static VALUE property_qualifier(VALUE self, VALUE property_name, VALUE qualifier_name)
         | 
| 178 263 | 
             
            {
         | 
| 179 | 
            -
               | 
| 180 | 
            -
               | 
| 181 | 
            -
               | 
| 182 | 
            -
              memset(&status, 0, sizeof( | 
| 183 | 
            -
              Data_Get_Struct(self,  | 
| 184 | 
            -
              data = ptr->ft-> | 
| 185 | 
            -
                                                     | 
| 264 | 
            +
              CIMCClass *ptr;
         | 
| 265 | 
            +
              CIMCStatus status;
         | 
| 266 | 
            +
              CIMCData data;
         | 
| 267 | 
            +
              memset(&status, 0, sizeof(CIMCStatus));
         | 
| 268 | 
            +
              Data_Get_Struct(self, CIMCClass, ptr);
         | 
| 269 | 
            +
              data = ptr->ft->getPropQualifier(ptr, to_charptr(property_name),
         | 
| 270 | 
            +
                                                    to_charptr(qualifier_name), &status);
         | 
| 186 271 | 
             
              if ( !status.rc )
         | 
| 187 272 | 
             
                return sfcc_cimdata_to_value(data);
         | 
| 188 273 |  | 
| 189 | 
            -
              sfcc_rb_raise_if_error(status, "Can't retrieve property_qualifier '%s'",  | 
| 274 | 
            +
              sfcc_rb_raise_if_error(status, "Can't retrieve property_qualifier '%s'", to_charptr(qualifier_name));
         | 
| 190 275 | 
             
              return Qnil;
         | 
| 191 276 | 
             
            }
         | 
| 192 277 |  | 
| @@ -202,24 +287,24 @@ static VALUE property_qualifier(VALUE self, VALUE property_name, VALUE qualifier | |
| 202 287 | 
             
             */
         | 
| 203 288 | 
             
            static VALUE each_property_qualifier(VALUE self, VALUE property_name)
         | 
| 204 289 | 
             
            {
         | 
| 205 | 
            -
               | 
| 206 | 
            -
               | 
| 290 | 
            +
              CIMCClass *ptr;
         | 
| 291 | 
            +
              CIMCStatus status;
         | 
| 207 292 | 
             
              int k=0;
         | 
| 208 293 | 
             
              int num_props=0;
         | 
| 209 | 
            -
               | 
| 210 | 
            -
               | 
| 211 | 
            -
              Data_Get_Struct(self,  | 
| 294 | 
            +
              CIMCString *property_qualifier_name;
         | 
| 295 | 
            +
              CIMCData data;
         | 
| 296 | 
            +
              Data_Get_Struct(self, CIMCClass, ptr);
         | 
| 212 297 |  | 
| 213 | 
            -
              num_props = ptr->ft-> | 
| 298 | 
            +
              num_props = ptr->ft->getPropQualifierCount(ptr, to_charptr(property_name), &status);
         | 
| 214 299 | 
             
              if (!status.rc) {
         | 
| 215 300 | 
             
                for (; k < num_props; ++k) {
         | 
| 216 | 
            -
                  data = ptr->ft-> | 
| 301 | 
            +
                  data = ptr->ft->getPropQualifierAt(ptr, to_charptr(property_name), k, &property_qualifier_name, &status);
         | 
| 217 302 | 
             
                  if (!status.rc) {
         | 
| 218 303 | 
             
                    rb_yield_values(2, (property_qualifier_name ? rb_str_intern(rb_str_new2(property_qualifier_name->ft->getCharPtr(property_qualifier_name, NULL))) : Qnil), sfcc_cimdata_to_value(data));
         | 
| 219 304 | 
             
                  }
         | 
| 220 305 | 
             
                  else {
         | 
| 221 306 | 
             
                    sfcc_rb_raise_if_error(status, "Can't retrieve property qualifier #%d", k);
         | 
| 222 | 
            -
                  } | 
| 307 | 
            +
                  }
         | 
| 223 308 | 
             
                  if (property_qualifier_name) CMRelease(property_qualifier_name);
         | 
| 224 309 | 
             
                }
         | 
| 225 310 | 
             
              }
         | 
| @@ -237,15 +322,14 @@ static VALUE each_property_qualifier(VALUE self, VALUE property_name) | |
| 237 322 | 
             
             */
         | 
| 238 323 | 
             
            static VALUE property_qualifier_count(VALUE self, VALUE property_name)
         | 
| 239 324 | 
             
            {
         | 
| 240 | 
            -
               | 
| 241 | 
            -
              Data_Get_Struct(self,  | 
| 242 | 
            -
              return UINT2NUM(ptr->ft-> | 
| 325 | 
            +
              CIMCClass *ptr;
         | 
| 326 | 
            +
              Data_Get_Struct(self, CIMCClass, ptr);
         | 
| 327 | 
            +
              return UINT2NUM(ptr->ft->getPropQualifierCount(ptr, to_charptr(property_name), NULL));
         | 
| 243 328 | 
             
            }
         | 
| 244 329 |  | 
| 245 330 | 
             
            VALUE
         | 
| 246 | 
            -
            Sfcc_wrap_cim_class( | 
| 331 | 
            +
            Sfcc_wrap_cim_class(CIMCClass *cimclass)
         | 
| 247 332 | 
             
            {
         | 
| 248 | 
            -
              SFCC_INC_REFCOUNT(cimclass);
         | 
| 249 333 | 
             
              return Data_Wrap_Struct(cSfccCimClass, NULL, dealloc, cimclass);
         | 
| 250 334 | 
             
            }
         | 
| 251 335 |  | 
| @@ -271,4 +355,9 @@ void init_cim_class() | |
| 271 355 | 
             
              rb_define_method(klass, "property_qualifier", property_qualifier, 2);
         | 
| 272 356 | 
             
              rb_define_method(klass, "each_property_qualifier", each_property_qualifier, 1);
         | 
| 273 357 | 
             
              rb_define_method(klass, "property_qualifier_count", property_qualifier_count, 1);
         | 
| 358 | 
            +
              rb_define_method(klass, "superclass_name", superclass_name, 0);
         | 
| 359 | 
            +
              rb_define_method(klass, "keys", keys, 0);
         | 
| 360 | 
            +
              rb_define_method(klass, "association?", is_association, 0);
         | 
| 361 | 
            +
              rb_define_method(klass, "abstract?", is_abstract, 0);
         | 
| 362 | 
            +
              rb_define_method(klass, "indication?", is_indication, 0);
         | 
| 274 363 | 
             
            }
         | 
    
        data/ext/sfcc/cim_class.h
    CHANGED
    
    
    
        data/ext/sfcc/cim_client.c
    CHANGED
    
    | @@ -5,9 +5,10 @@ | |
| 5 5 | 
             
            #include "cim_instance.h"
         | 
| 6 6 |  | 
| 7 7 | 
             
            static void
         | 
| 8 | 
            -
            dealloc( | 
| 8 | 
            +
            dealloc(CIMCClient *c)
         | 
| 9 9 | 
             
            {
         | 
| 10 | 
            -
               | 
| 10 | 
            +
            /*  fprintf(stderr, "Sfcc_dealloc_cim_client %p\n", c); */
         | 
| 11 | 
            +
              c->ft->release(c);
         | 
| 11 12 | 
             
            }
         | 
| 12 13 |  | 
| 13 14 | 
             
            /**
         | 
| @@ -32,28 +33,25 @@ static VALUE get_class(int argc, VALUE *argv, VALUE self) | |
| 32 33 | 
             
              VALUE flags;
         | 
| 33 34 | 
             
              VALUE properties;
         | 
| 34 35 |  | 
| 35 | 
            -
               | 
| 36 | 
            -
               | 
| 37 | 
            -
               | 
| 38 | 
            -
               | 
| 39 | 
            -
              CMPIConstClass *cimclassnew = NULL;
         | 
| 36 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 37 | 
            +
              CIMCObjectPath *op = NULL;
         | 
| 38 | 
            +
              CIMCClient *client = NULL;
         | 
| 39 | 
            +
              CIMCClass *cimclass = NULL;
         | 
| 40 40 | 
             
              char **props;
         | 
| 41 41 |  | 
| 42 42 | 
             
              rb_scan_args(argc, argv, "12", &object_path, &flags, &properties);
         | 
| 43 43 |  | 
| 44 44 | 
             
              if (NIL_P(flags)) flags = INT2NUM(0);
         | 
| 45 45 |  | 
| 46 | 
            -
              Data_Get_Struct(self,  | 
| 47 | 
            -
              Data_Get_Struct(object_path,  | 
| 46 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 47 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 48 48 |  | 
| 49 49 | 
             
              props = sfcc_value_array_to_string_array(properties);
         | 
| 50 50 | 
             
              cimclass = client->ft->getClass(client, op, NUM2INT(flags), props, &status);
         | 
| 51 51 | 
             
              free(props);
         | 
| 52 52 |  | 
| 53 53 | 
             
              if (!status.rc) {
         | 
| 54 | 
            -
                   | 
| 55 | 
            -
                  cimclass->ft->release(cimclass);
         | 
| 56 | 
            -
                  return Sfcc_wrap_cim_class(cimclassnew);
         | 
| 54 | 
            +
                  return Sfcc_wrap_cim_class(cimclass);
         | 
| 57 55 | 
             
              }
         | 
| 58 56 | 
             
              sfcc_rb_raise_if_error(status, "Can't get class at %s", CMGetCharsPtr(CMObjectPathToString(op, NULL), NULL));
         | 
| 59 57 | 
             
              return Qnil;
         | 
| @@ -73,22 +71,20 @@ static VALUE class_names(int argc, VALUE *argv, VALUE self) | |
| 73 71 | 
             
              VALUE object_path;
         | 
| 74 72 | 
             
              VALUE flags;
         | 
| 75 73 |  | 
| 76 | 
            -
               | 
| 77 | 
            -
               | 
| 78 | 
            -
               | 
| 79 | 
            -
               | 
| 74 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 75 | 
            +
              CIMCObjectPath *op;
         | 
| 76 | 
            +
              CIMCClient *client;
         | 
| 77 | 
            +
              CIMCEnumeration *enm;
         | 
| 80 78 |  | 
| 81 79 | 
             
              rb_scan_args(argc, argv, "11", &object_path, &flags);
         | 
| 82 80 | 
             
              if (NIL_P(flags)) flags = INT2NUM(0);
         | 
| 83 81 |  | 
| 84 | 
            -
              Data_Get_Struct(self,  | 
| 85 | 
            -
              Data_Get_Struct(object_path,  | 
| 82 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 83 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 86 84 |  | 
| 87 | 
            -
               | 
| 85 | 
            +
              enm = client->ft->enumClassNames(client, op, NUM2INT(flags), &status);
         | 
| 88 86 | 
             
              if (enm && !status.rc ) {
         | 
| 89 | 
            -
                 | 
| 90 | 
            -
                enm->ft->release(enm);
         | 
| 91 | 
            -
                return rbenm;
         | 
| 87 | 
            +
                return Sfcc_wrap_cim_enumeration(enm);
         | 
| 92 88 | 
             
              }
         | 
| 93 89 |  | 
| 94 90 | 
             
              sfcc_rb_raise_if_error(status, "Can't get class names");
         | 
| @@ -110,25 +106,23 @@ static VALUE classes(int argc, VALUE *argv, VALUE self) | |
| 110 106 | 
             
              VALUE object_path;
         | 
| 111 107 | 
             
              VALUE flags;
         | 
| 112 108 |  | 
| 113 | 
            -
               | 
| 114 | 
            -
               | 
| 115 | 
            -
               | 
| 116 | 
            -
               | 
| 109 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 110 | 
            +
              CIMCObjectPath *op;
         | 
| 111 | 
            +
              CIMCClient *client;
         | 
| 112 | 
            +
              CIMCEnumeration *enm;
         | 
| 117 113 |  | 
| 118 114 | 
             
              rb_scan_args(argc, argv, "11", &object_path, &flags);
         | 
| 119 115 | 
             
              if (NIL_P(flags)) flags = INT2NUM(0);
         | 
| 120 116 |  | 
| 121 | 
            -
              Data_Get_Struct(self,  | 
| 122 | 
            -
              Data_Get_Struct(object_path,  | 
| 117 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 118 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 123 119 |  | 
| 124 | 
            -
               | 
| 120 | 
            +
              enm = client->ft->enumClasses(client, op, NUM2INT(flags), &status);
         | 
| 125 121 | 
             
              if (enm && !status.rc ) {
         | 
| 126 | 
            -
                 | 
| 127 | 
            -
                enm->ft->release(enm);
         | 
| 128 | 
            -
                return rbenm;
         | 
| 122 | 
            +
                return Sfcc_wrap_cim_enumeration(enm);
         | 
| 129 123 | 
             
              }
         | 
| 130 124 |  | 
| 131 | 
            -
              sfcc_rb_raise_if_error(status, "Can't get classes");
         | 
| 125 | 
            +
              sfcc_rb_raise_if_error(status, "Can't get classes, try increasing maxMsgLen in sfcb.cfg ?");
         | 
| 132 126 | 
             
              return Qnil;
         | 
| 133 127 | 
             
            }
         | 
| 134 128 |  | 
| @@ -155,17 +149,17 @@ static VALUE get_instance(int argc, VALUE *argv, VALUE self) | |
| 155 149 | 
             
              VALUE flags;
         | 
| 156 150 | 
             
              VALUE properties;
         | 
| 157 151 |  | 
| 158 | 
            -
               | 
| 159 | 
            -
               | 
| 160 | 
            -
               | 
| 161 | 
            -
               | 
| 152 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 153 | 
            +
              CIMCObjectPath *op;
         | 
| 154 | 
            +
              CIMCClient *client;
         | 
| 155 | 
            +
              CIMCInstance *ciminstance;
         | 
| 162 156 | 
             
              char **props;
         | 
| 163 157 |  | 
| 164 158 | 
             
              rb_scan_args(argc, argv, "12", &object_path, &flags, &properties);
         | 
| 165 159 | 
             
              if (NIL_P(flags)) flags = INT2NUM(0);
         | 
| 166 160 |  | 
| 167 | 
            -
              Data_Get_Struct(self,  | 
| 168 | 
            -
              Data_Get_Struct(object_path,  | 
| 161 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 162 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 169 163 |  | 
| 170 164 | 
             
              props = sfcc_value_array_to_string_array(properties);
         | 
| 171 165 |  | 
| @@ -173,7 +167,7 @@ static VALUE get_instance(int argc, VALUE *argv, VALUE self) | |
| 173 167 | 
             
              free(props);
         | 
| 174 168 |  | 
| 175 169 | 
             
              if (!status.rc)
         | 
| 176 | 
            -
                return Sfcc_wrap_cim_instance(ciminstance | 
| 170 | 
            +
                return Sfcc_wrap_cim_instance(ciminstance);
         | 
| 177 171 |  | 
| 178 172 | 
             
              sfcc_rb_raise_if_error(status, "Can't get instance");
         | 
| 179 173 | 
             
              return Qnil;
         | 
| @@ -193,19 +187,20 @@ static VALUE get_instance(int argc, VALUE *argv, VALUE self) | |
| 193 187 | 
             
             */
         | 
| 194 188 | 
             
            static VALUE create_instance(VALUE self, VALUE object_path, VALUE instance)
         | 
| 195 189 | 
             
            {
         | 
| 196 | 
            -
               | 
| 197 | 
            -
               | 
| 198 | 
            -
               | 
| 199 | 
            -
               | 
| 200 | 
            -
               | 
| 190 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 191 | 
            +
              CIMCClient *client;
         | 
| 192 | 
            +
              CIMCObjectPath *op;
         | 
| 193 | 
            +
              CIMCObjectPath *new_op;
         | 
| 194 | 
            +
              CIMCInstance *inst;
         | 
| 201 195 |  | 
| 202 | 
            -
              Data_Get_Struct(self,  | 
| 203 | 
            -
              Data_Get_Struct(object_path,  | 
| 204 | 
            -
              Data_Get_Struct(instance,  | 
| 205 | 
            -
             | 
| 196 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 197 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 198 | 
            +
              Data_Get_Struct(instance, CIMCInstance, inst);
         | 
| 199 | 
            +
             | 
| 200 | 
            +
              new_op = client->ft->createInstance(client, op, inst, &status);
         | 
| 206 201 |  | 
| 207 202 | 
             
              if (!status.rc)
         | 
| 208 | 
            -
                return Sfcc_wrap_cim_object_path(new_op | 
| 203 | 
            +
                return Sfcc_wrap_cim_object_path(new_op);
         | 
| 209 204 |  | 
| 210 205 | 
             
              sfcc_rb_raise_if_error(status, "Can't create instance");
         | 
| 211 206 | 
             
              return Qnil;
         | 
| @@ -233,18 +228,18 @@ static VALUE set_instance(int argc, VALUE *argv, VALUE self) | |
| 233 228 | 
             
              VALUE flags;
         | 
| 234 229 | 
             
              VALUE properties;
         | 
| 235 230 |  | 
| 236 | 
            -
               | 
| 237 | 
            -
               | 
| 238 | 
            -
               | 
| 239 | 
            -
               | 
| 231 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 232 | 
            +
              CIMCObjectPath *op;
         | 
| 233 | 
            +
              CIMCInstance *inst;
         | 
| 234 | 
            +
              CIMCClient *client;
         | 
| 240 235 | 
             
              char **props;
         | 
| 241 236 |  | 
| 242 237 | 
             
              rb_scan_args(argc, argv, "22", &object_path, &instance, &flags, &properties);
         | 
| 243 238 | 
             
              if (NIL_P(flags)) flags = INT2NUM(0);
         | 
| 244 239 |  | 
| 245 | 
            -
              Data_Get_Struct(self,  | 
| 246 | 
            -
              Data_Get_Struct(object_path,  | 
| 247 | 
            -
              Data_Get_Struct(instance,  | 
| 240 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 241 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 242 | 
            +
              Data_Get_Struct(instance, CIMCInstance, inst);
         | 
| 248 243 |  | 
| 249 244 | 
             
              props = sfcc_value_array_to_string_array(properties);
         | 
| 250 245 |  | 
| @@ -264,12 +259,12 @@ static VALUE set_instance(int argc, VALUE *argv, VALUE self) | |
| 264 259 | 
             
             */
         | 
| 265 260 | 
             
            static VALUE delete_instance(VALUE self, VALUE object_path)
         | 
| 266 261 | 
             
            {
         | 
| 267 | 
            -
               | 
| 268 | 
            -
               | 
| 269 | 
            -
               | 
| 262 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 263 | 
            +
              CIMCObjectPath *op;
         | 
| 264 | 
            +
              CIMCClient *client;
         | 
| 270 265 |  | 
| 271 | 
            -
              Data_Get_Struct(self,  | 
| 272 | 
            -
              Data_Get_Struct(object_path,  | 
| 266 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 267 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 273 268 |  | 
| 274 269 | 
             
              status = client->ft->deleteInstance(client, op);
         | 
| 275 270 | 
             
              sfcc_rb_raise_if_error(status, "Can't delete instance '%s'", CMGetCharsPtr(CMObjectPathToString(op, NULL), NULL));
         | 
| @@ -296,23 +291,21 @@ static VALUE query(VALUE self, | |
| 296 291 | 
             
                               VALUE query,
         | 
| 297 292 | 
             
                               VALUE lang)
         | 
| 298 293 | 
             
            {
         | 
| 299 | 
            -
               | 
| 300 | 
            -
               | 
| 301 | 
            -
               | 
| 302 | 
            -
             | 
| 303 | 
            -
             | 
| 304 | 
            -
              Data_Get_Struct( | 
| 305 | 
            -
               | 
| 306 | 
            -
             | 
| 307 | 
            -
               | 
| 308 | 
            -
             | 
| 309 | 
            -
             | 
| 310 | 
            -
             | 
| 311 | 
            -
             | 
| 294 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 295 | 
            +
              CIMCObjectPath *op;
         | 
| 296 | 
            +
              CIMCClient *client;
         | 
| 297 | 
            +
              CIMCEnumeration *enm;
         | 
| 298 | 
            +
             | 
| 299 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 300 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 301 | 
            +
             | 
| 302 | 
            +
              enm = client->ft->execQuery(client,
         | 
| 303 | 
            +
                                          op,
         | 
| 304 | 
            +
                                          to_charptr(query),
         | 
| 305 | 
            +
                                          to_charptr(lang),
         | 
| 306 | 
            +
                                          &status);
         | 
| 312 307 | 
             
              if (enm && !status.rc ) {
         | 
| 313 | 
            -
                 | 
| 314 | 
            -
                enm->ft->release(enm);
         | 
| 315 | 
            -
                return rbenm;
         | 
| 308 | 
            +
                return Sfcc_wrap_cim_enumeration(enm);
         | 
| 316 309 | 
             
              }
         | 
| 317 310 |  | 
| 318 311 | 
             
              sfcc_rb_raise_if_error(status, "Can't get instances from query");
         | 
| @@ -327,20 +320,18 @@ static VALUE query(VALUE self, | |
| 327 320 | 
             
             */
         | 
| 328 321 | 
             
            static VALUE instance_names(VALUE self, VALUE object_path)
         | 
| 329 322 | 
             
            {
         | 
| 330 | 
            -
               | 
| 331 | 
            -
               | 
| 332 | 
            -
               | 
| 333 | 
            -
               | 
| 323 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 324 | 
            +
              CIMCObjectPath *op;
         | 
| 325 | 
            +
              CIMCClient *client;
         | 
| 326 | 
            +
              CIMCEnumeration *enm;
         | 
| 334 327 |  | 
| 335 | 
            -
              Data_Get_Struct(self,  | 
| 336 | 
            -
              Data_Get_Struct(object_path,  | 
| 328 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 329 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 337 330 |  | 
| 338 | 
            -
               | 
| 331 | 
            +
              enm = client->ft->enumInstanceNames(client, op, &status);
         | 
| 339 332 |  | 
| 340 333 | 
             
              if (enm && !status.rc ) {
         | 
| 341 | 
            -
                 | 
| 342 | 
            -
                enm->ft->release(enm);
         | 
| 343 | 
            -
                return rbenm;
         | 
| 334 | 
            +
                return Sfcc_wrap_cim_enumeration(enm);
         | 
| 344 335 | 
             
              }
         | 
| 345 336 | 
             
              sfcc_rb_raise_if_error(status, "Can't get instance names");
         | 
| 346 337 | 
             
              return Qnil;
         | 
| @@ -362,7 +353,7 @@ static VALUE instance_names(VALUE self, VALUE object_path) | |
| 362 353 | 
             
             * Property names.
         | 
| 363 354 | 
             
             * Each returned Object MUST NOT include elements for any Properties
         | 
| 364 355 | 
             
             * missing from this list
         | 
| 365 | 
            -
             * | 
| 356 | 
            +
             *
         | 
| 366 357 | 
             
             */
         | 
| 367 358 | 
             
            static VALUE instances(int argc, VALUE *argv, VALUE self)
         | 
| 368 359 | 
             
            {
         | 
| @@ -370,28 +361,26 @@ static VALUE instances(int argc, VALUE *argv, VALUE self) | |
| 370 361 | 
             
              VALUE flags;
         | 
| 371 362 | 
             
              VALUE properties;
         | 
| 372 363 |  | 
| 373 | 
            -
               | 
| 374 | 
            -
               | 
| 375 | 
            -
               | 
| 364 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 365 | 
            +
              CIMCObjectPath *op;
         | 
| 366 | 
            +
              CIMCClient *client;
         | 
| 367 | 
            +
              CIMCEnumeration *enm;
         | 
| 376 368 | 
             
              char **props;
         | 
| 377 | 
            -
              VALUE rbenm = Qnil;
         | 
| 378 369 |  | 
| 379 370 | 
             
              rb_scan_args(argc, argv, "12", &object_path, &flags, &properties);
         | 
| 380 371 | 
             
              if (NIL_P(flags)) flags = INT2NUM(0);
         | 
| 381 372 |  | 
| 382 | 
            -
              Data_Get_Struct(self,  | 
| 383 | 
            -
              Data_Get_Struct(object_path,  | 
| 373 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 374 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 384 375 |  | 
| 385 376 | 
             
              props = sfcc_value_array_to_string_array(properties);
         | 
| 386 377 |  | 
| 387 | 
            -
               | 
| 378 | 
            +
              enm = client->ft->enumInstances(client, op, NUM2INT(flags), props, &status);
         | 
| 388 379 |  | 
| 389 380 | 
             
              free(props);
         | 
| 390 381 |  | 
| 391 382 | 
             
              if (enm && !status.rc ) {
         | 
| 392 | 
            -
                 | 
| 393 | 
            -
                enm->ft->release(enm);
         | 
| 394 | 
            -
                return rbenm;
         | 
| 383 | 
            +
                return Sfcc_wrap_cim_enumeration(enm);
         | 
| 395 384 | 
             
              }
         | 
| 396 385 |  | 
| 397 386 | 
             
              sfcc_rb_raise_if_error(status, "Can't get instances");
         | 
| @@ -405,7 +394,7 @@ static VALUE instances(int argc, VALUE *argv, VALUE self) | |
| 405 394 | 
             
             *              properties=nil)
         | 
| 406 395 | 
             
             *
         | 
| 407 396 | 
             
             * Enumerate instances associated with the Instance defined by the +object_path+
         | 
| 408 | 
            -
             * | 
| 397 | 
            +
             *
         | 
| 409 398 | 
             
             * +object_path+ Source ObjectPath containing nameSpace, classname
         | 
| 410 399 | 
             
             * and key components.
         | 
| 411 400 | 
             
             *
         | 
| @@ -452,35 +441,32 @@ static VALUE associators(int argc, VALUE *argv, VALUE self) | |
| 452 441 | 
             
              VALUE flags;
         | 
| 453 442 | 
             
              VALUE properties;
         | 
| 454 443 |  | 
| 455 | 
            -
               | 
| 456 | 
            -
               | 
| 457 | 
            -
               | 
| 444 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 445 | 
            +
              CIMCObjectPath *op;
         | 
| 446 | 
            +
              CIMCClient *client;
         | 
| 458 447 | 
             
              char **props;
         | 
| 459 | 
            -
               | 
| 460 | 
            -
              VALUE rbenm = Qnil;
         | 
| 448 | 
            +
              CIMCEnumeration *enm;
         | 
| 461 449 |  | 
| 462 450 | 
             
              rb_scan_args(argc, argv, "16", &object_path,
         | 
| 463 451 | 
             
                           &assoc_class, &result_class,
         | 
| 464 452 | 
             
                           &role, &result_role, &flags, &properties);
         | 
| 465 453 |  | 
| 466 454 | 
             
              if (NIL_P(flags)) flags = INT2NUM(0);
         | 
| 467 | 
            -
              Data_Get_Struct(self,  | 
| 468 | 
            -
              Data_Get_Struct(object_path,  | 
| 455 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 456 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 469 457 |  | 
| 470 458 | 
             
              props = sfcc_value_array_to_string_array(properties);
         | 
| 471 459 |  | 
| 472 460 | 
             
              enm = client->ft->associators(client,
         | 
| 473 461 | 
             
                                            op,
         | 
| 474 | 
            -
                                             | 
| 475 | 
            -
                                             | 
| 476 | 
            -
                                             | 
| 477 | 
            -
                                             | 
| 462 | 
            +
                                            to_charptr(assoc_class),
         | 
| 463 | 
            +
                                            to_charptr(result_class),
         | 
| 464 | 
            +
                                            to_charptr(role),
         | 
| 465 | 
            +
                                            to_charptr(result_role),
         | 
| 478 466 | 
             
                                            NUM2INT(flags), props, &status);
         | 
| 479 467 | 
             
              free(props);
         | 
| 480 468 | 
             
              if (enm && !status.rc ) {
         | 
| 481 | 
            -
                 | 
| 482 | 
            -
                enm->ft->release(enm);
         | 
| 483 | 
            -
                return rbenm;
         | 
| 469 | 
            +
                return Sfcc_wrap_cim_enumeration(enm);
         | 
| 484 470 | 
             
              }
         | 
| 485 471 |  | 
| 486 472 | 
             
              sfcc_rb_raise_if_error(status, "Can't get associators for '%s'", CMGetCharsPtr(CMObjectPathToString(op, NULL), NULL));
         | 
| @@ -495,7 +481,7 @@ static VALUE associators(int argc, VALUE *argv, VALUE self) | |
| 495 481 | 
             
             *
         | 
| 496 482 | 
             
             * Enumerate object paths associated with the Instance defined by the
         | 
| 497 483 | 
             
             * +object_path+
         | 
| 498 | 
            -
             * | 
| 484 | 
            +
             *
         | 
| 499 485 | 
             
             * +object_path+ Source ObjectPath containing nameSpace, classname
         | 
| 500 486 | 
             
             * and key components.
         | 
| 501 487 | 
             
             *
         | 
| @@ -533,30 +519,27 @@ static VALUE associator_names(int argc, VALUE *argv, VALUE self) | |
| 533 519 | 
             
              VALUE role;
         | 
| 534 520 | 
             
              VALUE result_role;
         | 
| 535 521 |  | 
| 536 | 
            -
               | 
| 537 | 
            -
               | 
| 538 | 
            -
               | 
| 539 | 
            -
               | 
| 540 | 
            -
              VALUE rbenm = Qnil;
         | 
| 522 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 523 | 
            +
              CIMCObjectPath *op;
         | 
| 524 | 
            +
              CIMCClient *client;
         | 
| 525 | 
            +
              CIMCEnumeration *enm;
         | 
| 541 526 |  | 
| 542 527 | 
             
              rb_scan_args(argc, argv, "14", &object_path,
         | 
| 543 528 | 
             
                           &assoc_class, &result_class,
         | 
| 544 529 | 
             
                           &role, &result_role);
         | 
| 545 530 |  | 
| 546 | 
            -
              Data_Get_Struct(self,  | 
| 547 | 
            -
              Data_Get_Struct(object_path,  | 
| 531 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 532 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 548 533 |  | 
| 549 534 | 
             
              enm = client->ft->associatorNames(client,
         | 
| 550 535 | 
             
                                                op,
         | 
| 551 | 
            -
                                                 | 
| 552 | 
            -
                                                 | 
| 553 | 
            -
                                                 | 
| 554 | 
            -
                                                 | 
| 536 | 
            +
                                                to_charptr(assoc_class),
         | 
| 537 | 
            +
                                                to_charptr(result_class),
         | 
| 538 | 
            +
                                                to_charptr(role),
         | 
| 539 | 
            +
                                                to_charptr(result_role),
         | 
| 555 540 | 
             
                                                &status);
         | 
| 556 541 | 
             
              if (enm && !status.rc ) {
         | 
| 557 | 
            -
                 | 
| 558 | 
            -
                enm->ft->release(enm);
         | 
| 559 | 
            -
                return rbenm;
         | 
| 542 | 
            +
                return Sfcc_wrap_cim_enumeration(enm);
         | 
| 560 543 | 
             
              }
         | 
| 561 544 | 
             
              sfcc_rb_raise_if_error(status, "Can't get associator names for '%s'", CMGetCharsPtr(CMObjectPathToString(op, NULL), NULL));
         | 
| 562 545 | 
             
              return Qnil;
         | 
| @@ -600,33 +583,30 @@ static VALUE references(int argc, VALUE *argv, VALUE self) | |
| 600 583 | 
             
              VALUE flags;
         | 
| 601 584 | 
             
              VALUE properties;
         | 
| 602 585 |  | 
| 603 | 
            -
               | 
| 604 | 
            -
               | 
| 605 | 
            -
               | 
| 586 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 587 | 
            +
              CIMCObjectPath *op;
         | 
| 588 | 
            +
              CIMCClient *client;
         | 
| 606 589 | 
             
              char **props;
         | 
| 607 | 
            -
               | 
| 608 | 
            -
              VALUE rbenm = Qnil;
         | 
| 590 | 
            +
              CIMCEnumeration *enm;
         | 
| 609 591 |  | 
| 610 592 | 
             
              rb_scan_args(argc, argv, "14", &object_path,
         | 
| 611 593 | 
             
                           &result_class, &role,
         | 
| 612 594 | 
             
                           &flags, &properties);
         | 
| 613 595 |  | 
| 614 596 | 
             
              if (NIL_P(flags)) flags = INT2NUM(0);
         | 
| 615 | 
            -
              Data_Get_Struct(self,  | 
| 616 | 
            -
              Data_Get_Struct(object_path,  | 
| 597 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 598 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 617 599 |  | 
| 618 600 | 
             
              props = sfcc_value_array_to_string_array(properties);
         | 
| 619 601 |  | 
| 620 602 | 
             
              enm = client->ft->references(client,
         | 
| 621 603 | 
             
                                           op,
         | 
| 622 | 
            -
                                            | 
| 623 | 
            -
                                            | 
| 604 | 
            +
                                           to_charptr(result_class),
         | 
| 605 | 
            +
                                           to_charptr(role),
         | 
| 624 606 | 
             
                                           NUM2INT(flags), props, &status);
         | 
| 625 607 | 
             
              free(props);
         | 
| 626 608 | 
             
              if (enm && !status.rc ) {
         | 
| 627 | 
            -
                 | 
| 628 | 
            -
                enm->ft->release(enm);
         | 
| 629 | 
            -
                return rbenm;
         | 
| 609 | 
            +
                return Sfcc_wrap_cim_enumeration(enm);
         | 
| 630 610 | 
             
              }
         | 
| 631 611 | 
             
              sfcc_rb_raise_if_error(status, "Can't get references for '%s'", CMGetCharsPtr(CMObjectPathToString(op, NULL), NULL));
         | 
| 632 612 | 
             
              return Qnil;
         | 
| @@ -660,28 +640,25 @@ static VALUE reference_names(int argc, VALUE *argv, VALUE self) | |
| 660 640 | 
             
              VALUE object_path = Qnil;
         | 
| 661 641 | 
             
              VALUE result_class = Qnil;
         | 
| 662 642 | 
             
              VALUE role = Qnil;
         | 
| 663 | 
            -
             | 
| 664 | 
            -
               | 
| 665 | 
            -
               | 
| 666 | 
            -
               | 
| 667 | 
            -
               | 
| 668 | 
            -
              VALUE rbenm = Qnil;
         | 
| 643 | 
            +
             | 
| 644 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 645 | 
            +
              CIMCObjectPath *op;
         | 
| 646 | 
            +
              CIMCClient *client;
         | 
| 647 | 
            +
              CIMCEnumeration *enm;
         | 
| 669 648 |  | 
| 670 649 | 
             
              rb_scan_args(argc, argv, "12", &object_path,
         | 
| 671 650 | 
             
                           &result_class, &role);
         | 
| 672 651 |  | 
| 673 | 
            -
              Data_Get_Struct(self,  | 
| 674 | 
            -
              Data_Get_Struct(object_path,  | 
| 652 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 653 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 675 654 |  | 
| 676 655 | 
             
              enm = client->ft->referenceNames(client,
         | 
| 677 656 | 
             
                                               op,
         | 
| 678 | 
            -
                                                | 
| 679 | 
            -
                                                | 
| 657 | 
            +
                                               to_charptr(result_class),
         | 
| 658 | 
            +
                                               to_charptr(role),
         | 
| 680 659 | 
             
                                               &status);
         | 
| 681 660 | 
             
              if (enm && !status.rc ) {
         | 
| 682 | 
            -
                 | 
| 683 | 
            -
                enm->ft->release(enm);
         | 
| 684 | 
            -
                return rbenm;
         | 
| 661 | 
            +
                return Sfcc_wrap_cim_enumeration(enm);
         | 
| 685 662 | 
             
              }
         | 
| 686 663 | 
             
              sfcc_rb_raise_if_error(status, "Can't get reference names for '%s'", CMGetCharsPtr(CMObjectPathToString(op, NULL), NULL));
         | 
| 687 664 | 
             
              return Qnil;
         | 
| @@ -707,32 +684,32 @@ static VALUE invoke_method(VALUE self, | |
| 707 684 | 
             
                                       VALUE argin,
         | 
| 708 685 | 
             
                                       VALUE argout)
         | 
| 709 686 | 
             
            {
         | 
| 710 | 
            -
               | 
| 711 | 
            -
               | 
| 712 | 
            -
               | 
| 713 | 
            -
               | 
| 687 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 688 | 
            +
              CIMCClient *client;
         | 
| 689 | 
            +
              CIMCObjectPath *op;
         | 
| 690 | 
            +
              CIMCArgs *cimcargsout;
         | 
| 714 691 | 
             
              VALUE method_name_str;
         | 
| 715 | 
            -
              char *method_name_cstr;
         | 
| 716 | 
            -
               | 
| 692 | 
            +
              const char *method_name_cstr;
         | 
| 693 | 
            +
              CIMCData ret;
         | 
| 717 694 | 
             
              Check_Type(argin, T_HASH);
         | 
| 718 695 |  | 
| 719 | 
            -
               | 
| 696 | 
            +
              cimcargsout = cimcEnv->ft->newArgs(cimcEnv, NULL);
         | 
| 720 697 |  | 
| 721 | 
            -
              Data_Get_Struct(self,  | 
| 722 | 
            -
              Data_Get_Struct(object_path,  | 
| 698 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 699 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 723 700 |  | 
| 724 701 | 
             
              method_name_str = rb_funcall(method_name, rb_intern("to_s"), 0);
         | 
| 725 | 
            -
              method_name_cstr =  | 
| 726 | 
            -
              ret =  | 
| 702 | 
            +
              method_name_cstr = to_charptr(method_name_str);
         | 
| 703 | 
            +
              ret = client->ft->invokeMethod(client,
         | 
| 727 704 | 
             
                                          op,
         | 
| 728 705 | 
             
                                          method_name_cstr,
         | 
| 729 706 | 
             
                                          sfcc_hash_to_cimargs(argin),
         | 
| 730 | 
            -
                                           | 
| 707 | 
            +
                                          cimcargsout,
         | 
| 731 708 | 
             
                                          &status);
         | 
| 732 709 | 
             
              if (!status.rc) {
         | 
| 733 | 
            -
                if ( | 
| 710 | 
            +
                if (cimcargsout && ! NIL_P(argout)) {
         | 
| 734 711 | 
             
                  Check_Type(argout, T_HASH);
         | 
| 735 | 
            -
                  rb_funcall(argout, rb_intern("merge!"), 1, sfcc_cimargs_to_hash( | 
| 712 | 
            +
                  rb_funcall(argout, rb_intern("merge!"), 1, sfcc_cimargs_to_hash(cimcargsout));
         | 
| 736 713 | 
             
                }
         | 
| 737 714 | 
             
                return sfcc_cimdata_to_value(ret);
         | 
| 738 715 | 
             
              }
         | 
| @@ -755,18 +732,18 @@ static VALUE set_property(VALUE self, | |
| 755 732 | 
             
                                      VALUE name,
         | 
| 756 733 | 
             
                                      VALUE value)
         | 
| 757 734 | 
             
            {
         | 
| 758 | 
            -
               | 
| 759 | 
            -
               | 
| 760 | 
            -
               | 
| 761 | 
            -
               | 
| 762 | 
            -
              Data_Get_Struct(self,  | 
| 763 | 
            -
              Data_Get_Struct(object_path,  | 
| 735 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 736 | 
            +
              CIMCClient *client;
         | 
| 737 | 
            +
              CIMCObjectPath *op;
         | 
| 738 | 
            +
              CIMCData data;
         | 
| 739 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 740 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 764 741 | 
             
              data = sfcc_value_to_cimdata(value);
         | 
| 765 | 
            -
              status =  | 
| 742 | 
            +
              status = client->ft->setProperty(client, op, to_charptr(name), &data.value, data.type);
         | 
| 766 743 |  | 
| 767 744 | 
             
              if ( !status.rc )
         | 
| 768 745 | 
             
                return value;
         | 
| 769 | 
            -
              sfcc_rb_raise_if_error(status, "Can't set property '%s'",  | 
| 746 | 
            +
              sfcc_rb_raise_if_error(status, "Can't set property '%s'", to_charptr(name));
         | 
| 770 747 | 
             
              return Qnil;
         | 
| 771 748 | 
             
            }
         | 
| 772 749 |  | 
| @@ -782,30 +759,44 @@ static VALUE set_property(VALUE self, | |
| 782 759 | 
             
             */
         | 
| 783 760 | 
             
            static VALUE property(VALUE self, VALUE object_path, VALUE name)
         | 
| 784 761 | 
             
            {
         | 
| 785 | 
            -
               | 
| 786 | 
            -
               | 
| 787 | 
            -
               | 
| 788 | 
            -
               | 
| 789 | 
            -
             | 
| 790 | 
            -
              Data_Get_Struct(self,  | 
| 791 | 
            -
              Data_Get_Struct(object_path,  | 
| 792 | 
            -
              data =  | 
| 762 | 
            +
              CIMCClient *client;
         | 
| 763 | 
            +
              CIMCObjectPath *op = NULL;
         | 
| 764 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 765 | 
            +
              CIMCData data;
         | 
| 766 | 
            +
             | 
| 767 | 
            +
              Data_Get_Struct(self, CIMCClient, client);
         | 
| 768 | 
            +
              Data_Get_Struct(object_path, CIMCObjectPath, op);
         | 
| 769 | 
            +
              data = client->ft->getProperty(client, op, to_charptr(name), &status);
         | 
| 793 770 | 
             
              if ( !status.rc )
         | 
| 794 771 | 
             
                return sfcc_cimdata_to_value(data);
         | 
| 795 772 |  | 
| 796 | 
            -
              sfcc_rb_raise_if_error(status, "Can't retrieve property '%s'",  | 
| 773 | 
            +
              sfcc_rb_raise_if_error(status, "Can't retrieve property '%s'", to_charptr(name));
         | 
| 797 774 | 
             
              return Qnil;
         | 
| 798 775 | 
             
            }
         | 
| 799 776 |  | 
| 800 | 
            -
            static VALUE connect(VALUE klass, VALUE host, VALUE scheme, VALUE port, VALUE user, VALUE pwd | 
| 777 | 
            +
            static VALUE connect(VALUE klass, VALUE host, VALUE scheme, VALUE port, VALUE user, VALUE pwd,
         | 
| 778 | 
            +
                                 VALUE verify, VALUE trust_store, VALUE cert_file, VALUE key_file)
         | 
| 801 779 | 
             
            {
         | 
| 802 | 
            -
               | 
| 803 | 
            -
               | 
| 804 | 
            -
               | 
| 805 | 
            -
             | 
| 806 | 
            -
             | 
| 807 | 
            -
             | 
| 808 | 
            -
             | 
| 780 | 
            +
              CIMCClient *client;
         | 
| 781 | 
            +
              CIMCStatus status = {CIMC_RC_OK, NULL};
         | 
| 782 | 
            +
              /*
         | 
| 783 | 
            +
               * CIMCClient* (*connect2)
         | 
| 784 | 
            +
               * (CIMCEnv *ce, const char *hn, const char *scheme, const char *port, const char *user, const char *pwd,
         | 
| 785 | 
            +
               * int verifyMode, const char * trustStore,
         | 
| 786 | 
            +
               * const char * certFile, const char * keyFile,
         | 
| 787 | 
            +
               * CIMCStatus *rc);
         | 
| 788 | 
            +
               */
         | 
| 789 | 
            +
             | 
| 790 | 
            +
              client = cimcEnv->ft->connect2(cimcEnv,
         | 
| 791 | 
            +
                                   to_charptr(host),
         | 
| 792 | 
            +
                                   to_charptr(scheme),
         | 
| 793 | 
            +
                                   to_charptr(port),
         | 
| 794 | 
            +
                                   to_charptr(user),
         | 
| 795 | 
            +
                                   to_charptr(pwd),
         | 
| 796 | 
            +
                                   (verify == Qfalse)?0:1,
         | 
| 797 | 
            +
                                   to_charptr(trust_store),
         | 
| 798 | 
            +
                                   to_charptr(cert_file),
         | 
| 799 | 
            +
                                   to_charptr(key_file),
         | 
| 809 800 | 
             
                                   &status);
         | 
| 810 801 | 
             
              if ( !status.rc )
         | 
| 811 802 | 
             
                return Sfcc_wrap_cim_client(client);
         | 
| @@ -814,10 +805,8 @@ static VALUE connect(VALUE klass, VALUE host, VALUE scheme, VALUE port, VALUE us | |
| 814 805 | 
             
            }
         | 
| 815 806 |  | 
| 816 807 | 
             
            VALUE
         | 
| 817 | 
            -
            Sfcc_wrap_cim_client( | 
| 808 | 
            +
            Sfcc_wrap_cim_client(CIMCClient *client)
         | 
| 818 809 | 
             
            {
         | 
| 819 | 
            -
              assert(client);
         | 
| 820 | 
            -
              SFCC_INC_REFCOUNT(client);
         | 
| 821 810 | 
             
              return Data_Wrap_Struct(cSfccCimClient, NULL, dealloc, client);
         | 
| 822 811 | 
             
            }
         | 
| 823 812 |  | 
| @@ -833,14 +822,14 @@ void init_cim_client() | |
| 833 822 | 
             
              VALUE klass = rb_define_class_under(cimc, "Client", rb_cObject);
         | 
| 834 823 | 
             
              cSfccCimClient = klass;
         | 
| 835 824 |  | 
| 836 | 
            -
              rb_define_singleton_method(klass, "native_connect", connect,  | 
| 825 | 
            +
              rb_define_singleton_method(klass, "native_connect", connect, 9);
         | 
| 837 826 | 
             
              rb_define_method(klass, "get_class", get_class, -1);
         | 
| 838 827 | 
             
              rb_define_method(klass, "class_names", class_names, -1);
         | 
| 839 828 | 
             
              rb_define_method(klass, "classes", classes, -1);
         | 
| 840 829 | 
             
              rb_define_method(klass, "get_instance", get_instance, -1);
         | 
| 841 830 | 
             
              rb_define_method(klass, "create_instance", create_instance, 2);
         | 
| 842 831 | 
             
              rb_define_method(klass, "set_instance", set_instance, -1);
         | 
| 843 | 
            -
              rb_define_method(klass, "delete_instance", delete_instance, 1); | 
| 832 | 
            +
              rb_define_method(klass, "delete_instance", delete_instance, 1);
         | 
| 844 833 | 
             
              rb_define_method(klass, "query", query, 3);
         | 
| 845 834 | 
             
              rb_define_method(klass, "instance_names", instance_names, 1);
         | 
| 846 835 | 
             
              rb_define_method(klass, "instances", instances, -1);
         |