Example #1
0
 /**
  * Creates a copy of this Message. This is done by the Resolver before adding TSIG and OPT
  * records, for example.
  *
  * @see Resolver
  * @see TSIGRecord
  * @see OPTRecord
  */
 public Object clone() {
   Message m = new Message();
   for (int i = 0; i < sections.length; i++) {
     if (sections[i] != null) m.sections[i] = new LinkedList(sections[i]);
   }
   m.header = (Header) header.clone();
   m.size = size;
   return m;
 }
Example #2
0
    protected void handleMessage(Message msg) throws Exception {
      Address dest = msg.getDest();
      long len;
      List tmp;

      len = msg.size(); // todo: use msg.getLength() instead of msg.getSize()
      if (len > max_bundle_size) {
        throw new Exception(
            "UDP.BundlingOutgoingPacketHandler.handleMessage(): "
                + "message size ("
                + len
                + ") is greater than UDP fragmentation size. "
                + "Set the fragmentation/bundle size in FRAG and UDP correctly");
      }

      if (total_bytes + len >= max_bundle_size) {
        if (Trace.trace) {
          Trace.info(
              "UDP.BundlingOutgoingPacketHandler.handleMessage()",
              "sending " + total_bytes + " bytes");
        }
        bundleAndSend(); // send all pending message and clear table
        total_bytes = 0;
      }

      synchronized (msgs) {
        tmp = (List) msgs.get(dest);
        if (tmp == null) {
          tmp = new List();
          msgs.put(dest, tmp);
        }
        tmp.add(msg);
        total_bytes += len;
      }

      if (!timer_running) { // first message to be bundled
        startTimer();
      }
    }