docs: private void fragment(Message msg, long size) {
          Address            dest=msg.getDest(), src=msg.getSrc();
          long               frag_id=curr_id.getAndIncrement(); // used as seqnos
          int                num_frags;
  
          try {
              // write message into a byte buffer and fragment it
              ByteArrayDataOutputStream dos=new ByteArrayDataOutputStream((int)(size + 50));
              msg.writeTo(dos);
              byte[] buffer=dos.buffer();
              byte[][] fragments=Util.fragmentBuffer(buffer, frag_size, dos.position());
              num_frags=fragments.length;
              num_sent_frags+=num_frags;
  
              if(log.isTraceEnabled()) {
                  StringBuilder sb=new StringBuilder();
                  sb.append("fragmenting packet to ").append(dest != null ? dest.toString() : "<all members>")
                          .append(" (size=").append(buffer.length).append(") into ").append(num_frags)
                          .append(" fragment(s) [frag_size=").append(frag_size).append(']');
                  log.trace(sb.toString());
              }
  
              for(int i=0; i < num_frags; i++) {
                  Message frag_msg=new Message(dest, fragments[i]).src(src);
                  FragHeader hdr=new FragHeader(frag_id, i, num_frags);
                  frag_msg.putHeader(this.id, hdr);
                  down_prot.down(frag_msg);
              }
          }
          catch(Exception e) {
              log.error(Util.getMessage("ExceptionOccurredTryingToFragmentMessage"), e);
          }
      }