/**
   * Writes data to given socket
   *
   * @param id a Socket
   * @throws IOException
   */
  public void writeData(Socket id) throws IOException {
    // checkSanity();
    if (_hdr != null) _hdr.writeData(id);
    if (_clientHandle != null) _clientHandle.writeData(id);
    if (_context != null) _context.writeData(id);

    for (Enumeration e = _clientSIs.elements(); e.hasMoreElements(); ) {
      COPSClientSI clientSI = (COPSClientSI) e.nextElement();
      clientSI.writeData(id);
    }

    // Display any local decisions
    for (Enumeration e = _decisions.keys(); e.hasMoreElements(); ) {

      COPSContext context = (COPSContext) e.nextElement();
      Vector v = (Vector) _decisions.get(context);
      context.writeData(id);

      for (Enumeration ee = v.elements(); e.hasMoreElements(); ) {
        COPSLPDPDecision decision = (COPSLPDPDecision) ee.nextElement();
        decision.writeData(id);
      }
    }

    if (_integrity != null) _integrity.writeData(id);
  }