1. main/informer.c
handleSoapMessageCallBack()
{
handleSoapMessage();
}
2. handleSoapMessage()
{
status = parseGeneric(NULL, soapmsg, len, &parseReq);
....
if ( runRPC() == eRPCRunFail)
}
3. runRPC() include in SOAPParser/RPCState.c
....
case: rpcGetParameterValues:
doGetParameterValues(rpcAction);
breadk;
....
4. doGetParameterValues
{
...
const char *pp = pi ->name;
n = findGWParameter(pp); // *pp = Device.DeviceConfig.ConfigFIle
}
5. findGWParameter(const char * pstr)
{
nodeDepth = 0;
instanceDepth = 0;
return findParamter(rootDevice, pstr);
}
6.
static findParameter(TRxObjNode *node, const char *pstr)
{
const char *e;
int lth;
TRxObjNode *n = node;
e = strchr(pstr, '.');
if ( (n = searchNode(node, pstr, lth)))
{
if ( e && strlen(e) > 1)
{
return findParameter(n->objDetail, e + 1);
}
else
{
return n;
}
return NULL;
}
}