void RCFSourceInfo::ParseDestination(XMLTag* destTag, UInt32 index) { XMLTag* prefTag; prefTag = destTag->GetEmbeddedTagByNameAndAttr("PREF", "NAME", "out_addr"); if (prefTag != NULL) { char* outAddrStr = prefTag->GetValue(); if (outAddrStr != NULL) fOutputArray[index].fLocalAddr = SocketUtils::ConvertStringToAddr(outAddrStr); } prefTag = destTag->GetEmbeddedTagByNameAndAttr("PREF", "NAME", "dest_addr"); if (prefTag != NULL) { char* destAddrStr = prefTag->GetValue(); if (destAddrStr != NULL) fOutputArray[index].fDestAddr = SocketUtils::ConvertStringToAddr(destAddrStr); } prefTag = destTag->GetEmbeddedTagByNameAndAttr("PREF", "NAME", "ttl"); if (prefTag != NULL) { char* ttlStr = prefTag->GetValue(); if (ttlStr != NULL) fOutputArray[index].fTimeToLive = atoi(ttlStr); } prefTag = destTag->GetEmbeddedTagByNameAndAttr("LIST-PREF", "NAME", "udp_ports"); if (prefTag != NULL) { fOutputArray[index].fNumPorts = prefTag->GetNumEmbeddedTags(); fOutputArray[index].fPortArray = new UInt16[fOutputArray[index].fNumPorts]; ::memset(fOutputArray[index].fPortArray, 0, fOutputArray[index].fNumPorts * sizeof(UInt16)); for (UInt32 x = 0; x < fOutputArray[index].fNumPorts; x++) { XMLTag* portTag = prefTag->GetEmbeddedTagByName("VALUE", x); if (portTag != NULL) { char* portStr = portTag->GetValue(); if (portStr != NULL) { fOutputArray[index].fPortArray[x] = atoi(portStr); } } } } else { prefTag = destTag->GetEmbeddedTagByNameAndAttr("PREF", "NAME", "udp_base_port"); if (prefTag == NULL) qtss_printf("Missing both 'udp_base_port' and 'udp_ports' tags.\n Cannot set up the destination!\n"); else { char* basePortStr = prefTag->GetValue(); if (basePortStr != NULL) fOutputArray[index].fBasePort = atoi(basePortStr); } } }
void RCFSourceInfo::Parse(XMLTag* relayTag) { XMLTag* sourceTag = relayTag->GetEmbeddedTagByNameAndAttr("OBJECT", "CLASS", "source"); if (sourceTag == NULL) return; fNumStreams = 0; UInt32 destIPAddr = 0; UInt32 srcIPAddr = 0; UInt16 ttl = 0; XMLTag* prefTag; prefTag = sourceTag->GetEmbeddedTagByNameAndAttr("PREF", "NAME", "in_addr"); if (prefTag != NULL) { char* destAddrStr = prefTag->GetValue(); if (destAddrStr != NULL) destIPAddr = SocketUtils::ConvertStringToAddr(destAddrStr); } prefTag = sourceTag->GetEmbeddedTagByNameAndAttr("PREF", "NAME", "source_addr"); if (prefTag != NULL) { char* srcAddrStr = prefTag->GetValue(); if (srcAddrStr != NULL) srcIPAddr = SocketUtils::ConvertStringToAddr(srcAddrStr); } prefTag = sourceTag->GetEmbeddedTagByNameAndAttr("PREF", "NAME", "ttl"); if (prefTag != NULL) { char* ttlStr = prefTag->GetValue(); if (ttlStr != NULL) ttl = atoi(ttlStr); } prefTag = sourceTag->GetEmbeddedTagByNameAndAttr("LIST-PREF", "NAME", "udp_ports"); if (prefTag != NULL) { fNumStreams = prefTag->GetNumEmbeddedTags(); // Allocate a proper sized stream array fStreamArray = new StreamInfo[fNumStreams]; for (UInt32 x = 0; x < fNumStreams; x++) { XMLTag* portTag = prefTag->GetEmbeddedTagByName("VALUE", x); int port = 0; if (portTag != NULL) { char* portStr = portTag->GetValue(); if (portStr != NULL) port = atoi(portStr); } // Setup all the StreamInfo structures fStreamArray[x].fSrcIPAddr = srcIPAddr; fStreamArray[x].fDestIPAddr = destIPAddr; fStreamArray[x].fPort = port; fStreamArray[x].fTimeToLive = ttl; fStreamArray[x].fPayloadType = qtssUnknownPayloadType; fStreamArray[x].fTrackID = x + 1; } } // Now go through all the relay_destination lines (starting from the next line after the // relay_source line. this->ParseRelayDestinations(relayTag); }