Dear Dieter,

You are right, the bug is known and was reported the first time by Nico Goeminne (University of Ghent too ;-) ), anyway thanks again for reporting it. At first glance my idea would be to enhance the ArgumentList interface to simplify the selection of arguments.
In any case a patch will be added ASAP.

best regards,
francesco

Dieter Verslype wrote:
Hello felix-dev,

I noticed some errorous behaviour in the UPnP Basedriver. I'm not sure if I did something wrong, but I found a way to fix it. Cause and fix described below:

In org.apache.felix.upnp.basedriver.exportGeneralActionListener, after successfull invocation of an Action (Dictionary invoke(Dictionary)), the basedriver tries to extract the values of the outargs from the dictionary and put them in the ArgumentList object of Action. Here arises a problem when an Action has in-out arguments. In the ArgumentList these are treated seperatly (2 Argument objects with the same name, but different argument direction).

When the basedriver wants to set the value for out argument, it does ArgumentList.getArgument(argumentName) and finds the in argument rather then the out argument! So the out argument is never set, resulting in a constant null as value for the out argument.

My proposal for a fix:

on line 123:
[code]arg = al.getArgument(outArg[j]); //can be null, tries getting the argument (which can be wrong)[/code]

replace by:
[code]
arg = null;
for (int n = 0; n < al.size(); n++) {
Argument a = al.getArgument(n);
String aName = a.getName();
if (aName == null || a.isInDirection())
continue;
if (aName.equals(outArg[j]) == true) {
arg = a;
break;
}
}
[/code]

Do you agree on this one?

regards,

Dieter Verslype (aka dvrslype)
IBCN - INTEC
University of Ghent
http://www.ibcn.intec.ugent.be/

Reply via email to