void OnAREthMessage( dword messageHandle )
{
DWORD nbrOfEntries;
BYTE i;
CHAR valuePath[255];
DWORD entryType;
DWORD nbrOfOptions;
DWORD optionType;
if(AREthGetMessageId(messageHandle) == 0xFFFF8100)
{
nbrOfEntries = AREthGetValueDWord(messageHandle, "Entry");
for(i=0; i<nbrOfEntries; i++)
{
snprintf(valuePath, elCount(valuePath), "Entry[%d]", i);
entryType = AREthGetValueDWord(messageHandle, valuePath);
switch(entryType)
{
case 0x00 /*FindService*/:
snprintf(valuePath, elCount(valuePath), "Entry[%d].FindService.ServiceID", i);
write("FindService with ServiceID %d", AREthGetValueDWord(messageHandle, valuePath));
break;
case 0x01 /*OfferService*/:
snprintf(valuePath, elCount(valuePath), "Entry[%d].OfferService.ServiceID", i);
write("OfferService with ServiceID %d", AREthGetValueDWord(messageHandle, valuePath));
break;
case 0x06 /*Subscribe*/:
snprintf(valuePath, elCount(valuePath), "Entry[%d].Subscribe.EventgroupID", i);
write("Subscribe with EventgroupID %d", AREthGetValueDWord(messageHandle, valuePath));
break;
case 0x07 /*SubscribeAck*/:
snprintf(valuePath, elCount(valuePath), "Entry[%d].SubscribeAck.EventgroupID", i);
write("SubscribeAck with EventgroupID %d", AREthGetValueDWord(messageHandle, valuePath));
break;
}
}
nbrOfOptions = AREthGetValueDWord(messageHandle, "Option");
for(i=0; i<nbrOfOptions; i++)
{
snprintf(valuePath, elCount(valuePath), "Option[%d]", i);
optionType = AREthGetValueDWord(messageHandle, valuePath);
switch(optionType)
{
case 0x01 /*Configuration*/:
snprintf(valuePath, elCount(valuePath), "Option[%d].Configuration.String[1]", i);
write("Configuration with String[1] %s", AREthGetValueDWord(messageHandle, valuePath));
break;
case 0x02 /*LoadBalancing*/:
snprintf(valuePath, elCount(valuePath), "Option[%d].LoadBalancing.Priority", i);
write("LoadBalancing with Priority %d", AREthGetValueDWord(messageHandle, valuePath));
break;
case 0x03 /*Protection*/:
snprintf(valuePath, elCount(valuePath), "Option[%d].Protection.ID", i);
write("Protection with ID %d", AREthGetValueDWord(messageHandle, valuePath));
break;
case 0x04 /*IPv4Endpoint*/:
snprintf(valuePath, elCount(valuePath), "Option[%d].IPv4Endpoint.PortNumber", i);
write("IPv4Endpoint with PortNumber %d", AREthGetValueDWord(messageHandle, valuePath));
break;
case 0x06 /*IPv6Endpoint*/:
snprintf(valuePath, elCount(valuePath), "Option[%d].IPv6Endpoint.PortNumber", i);
write("IPv6Endpoint with PortNumber %d", AREthGetValueDWord(messageHandle, valuePath));
break;
case 0x14 /*IPv4Multicast*/:
snprintf(valuePath, elCount(valuePath), "Option[%d].IPv4Multicast.PortNumber", i);
write("IPv4Multicast with PortNumber %d", AREthGetValueDWord(messageHandle, valuePath));
break;
case 0x16 /*IPv6Multicast*/:
snprintf(valuePath, elCount(valuePath), "Option[%d].IPv6Multicast.PortNumber", i);
write("IPv6Multicast with PortNumber %d", AREthGetValueDWord(messageHandle, valuePath));
break;
}
}
}
}