docs: public Response submitRequest(ProtocolHeader h, Protocol request,
              WatcherRegistration wr){
          Packet packet = queuePacket(h, request, null, null, null, wr);
          synchronized (packet) {
              while (!packet.finished) {
                  try {
                      packet.wait();
                  } catch (InterruptedException e) {
                      ServiceDirectoryError sde = new ServiceDirectoryError(ErrorCode.REQUEST_INTERUPTED);
                      throw new ServiceException(sde, e);
                  }
              }
          }
          if(! packet.respHeader.getErr().equals(ErrorCode.OK)){
              ServiceDirectoryError sde = new ServiceDirectoryError(packet.respHeader.getErr());
              throw new ServiceException(sde);
          }
          return packet.response;
      }