public static String getTcpConfig(String fullTestName, TransportFlags flags) {
    // With the XML already parsed, make a safe copy of the
    // protocol stack configurator and use that accordingly.
    JGroupsProtocolCfg jgroupsCfg = getJGroupsProtocolCfg(tcpConfigurator.getProtocolStack());

    if (!flags.withFD()) removeFailureDetectionTcp(jgroupsCfg);

    if (!flags.isSiteIndexSpecified()) {
      removeRela2(jgroupsCfg);
    } else {
      ProtocolConfiguration protocol = jgroupsCfg.getProtocol(RELAY2);
      protocol.getProperties().put("site", flags.siteName());
      if (flags.relayConfig() != null) // if not specified, use default
      protocol.getProperties().put("config", flags.relayConfig());
    }

    if (!flags.withMerge()) removeMerge(jgroupsCfg);

    if (jgroupsCfg.containsProtocol(TEST_PING)) {
      replaceTcpStartPort(jgroupsCfg, flags);
      if (fullTestName == null) return jgroupsCfg.toString(); // IDE run of test
      else return getTestPingDiscovery(fullTestName, jgroupsCfg); // Cmd line test run
    } else {
      return replaceMCastAddressAndPort(jgroupsCfg);
    }
  }
  public static String getUdpConfig(String fullTestName, TransportFlags flags) {
    JGroupsProtocolCfg jgroupsCfg = getJGroupsProtocolCfg(udpConfigurator.getProtocolStack());

    if (!flags.withFD()) removeFailureDetectionUdp(jgroupsCfg);

    if (!flags.withMerge()) removeMerge(jgroupsCfg);

    if (!flags.isSiteIndexSpecified()) {
      removeRela2(jgroupsCfg);
    }

    if (jgroupsCfg.containsProtocol(TEST_PING)) {
      if (fullTestName != null)
        return getTestPingDiscovery(fullTestName, jgroupsCfg); // Cmd line test run
    }

    return replaceMCastAddressAndPort(jgroupsCfg);
  }