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); } } }
char* XMLPrefsParser::GetPrefValueByRef(ContainerRef pref, const UInt32 inValueIndex, char** outPrefName, char** outDataType) { if (outPrefName != NULL) *outPrefName = pref->GetAttributeValue(kNameAttr); if (outDataType != NULL) { *outDataType = pref->GetAttributeValue(kTypeAttr); if (*outDataType == NULL) *outDataType = "CharArray"; } if (!strcmp(pref->GetTagName(), kPref)) { if (inValueIndex > 0) return NULL; else return pref->GetValue(); } if (!strcmp(pref->GetTagName(), kListPref)) { XMLTag* value = pref->GetEmbeddedTag(inValueIndex); if (value != NULL) return value->GetValue(); } if (!strcmp(pref->GetTagName(), kObject) || !strcmp(pref->GetTagName(), kObjectList)) *outDataType = "QTSS_Object"; return NULL; }
void XMLPrefsParser::RemovePrefValue( ContainerRef pref, const UInt32 inValueIndex) { UInt32 numValues = GetNumPrefValues(pref); if (inValueIndex >= numValues) return; if (numValues == 1) { delete pref; // just remove the whole pref } else if (numValues == 2) { XMLTag* value = pref->GetEmbeddedTag(inValueIndex); // get the one we're removing delete value; // delete it value = pref->GetEmbeddedTag(0); // get the remaining tag index always 0 for 2 vals pref->RemoveEmbeddedTag(value); // pull it out of the parent if (!strcmp(pref->GetTagName(), kObjectList)) { pref->SetTagName(kObject); // set it back to a simple pref // move all this objects tags into the parent XMLTag* objectPref; while((objectPref = value->GetEmbeddedTag()) != NULL) { value->RemoveEmbeddedTag(objectPref); pref->AddEmbeddedTag(objectPref); } } else { char* temp = value->GetValue(); pref->SetTagName(kPref); // set it back to a simple pref pref->SetValue(temp); } delete value; // get rid of the other one } else { XMLTag* value = pref->GetEmbeddedTag(inValueIndex); if (value) delete value; } }
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); }