
This works for associations. But for references, the result class is the association class name. So, when you call std_assoc_get_handler() from do_ref(), you end up checking the client's result class (which is the association name) against the result class list instead of the association list. Here's some sample debug:
std_association.c(152): Calling Provider: 'associationVirt_HostedDependencyProvider' std_association.c(182): Check client's resultClass: 'Xen_HostedDependency' std_association.c(78): provider accepts Xen_ComputerSystem resultclass std_association.c(78): provider accepts KVM_ComputerSystem resultclass std_association.c(190): ResultClass not valid. std_association.c(302): No handler found.
You could add flag argument to std_assoc_get_handler() that indicates whether the call is asking for references or an associators. Although, I'm not sure that's the most elegant way.
Also, adding the debug messages that print which values the provider is checking the result class / assoc class / etc might be useful - that is, print out what classes the provider accepts. Someone else can chime in as to whether this would be useful. That's also a very good catch :). You are great in indicating bugs in
Kaitlin Rupert wrote: the association logic :) ! Fortunately this can be fixed very easy - the assocClass and resultClass values have only been swapped while setting std_assoc_info values in stda_ReferenceNames() and stda_References(). In the case of reference calls the client's resultClass value needs to become the value for assocClass internally. @@ -373,8 +397,8 @@ CMPIStatus stda_ReferenceNames(CMPIAssoc const char *role) { struct std_assoc_info info = { - NULL, - resultClass, + resultClass , + NULL, role, NULL, NULL, @@ -394,8 +418,8 @@ CMPIStatus stda_References(CMPIAssociati const char **properties) { struct std_assoc_info info = { - NULL, resultClass, + NULL, role, NULL, properties, -- Regards Heidi Eckhart Software Engineer Linux Technology Center - Open Hypervisor heidieck@linux.vnet.ibm.com ************************************************** IBM Deutschland Entwicklung GmbH Vorsitzender des Aufsichtsrats: Martin Jetter Geschaeftsfuehrung: Herbert Kircher Sitz der Gesellschaft: Boeblingen Registergericht: Amtsgericht Stuttgart, HRB 243294