Ejemplo n.º 1
0
  /**
   * Gets a <tt>MultiplexedDatagramSocket</tt> which filters <tt>DatagramPacket</tt>s away from this
   * <tt>DatagramSocket</tt> using a specific <tt>DatagramPacketFilter</tt>. If such a
   * <tt>MultiplexedDatagramSocket</tt> does not exist in this instance, it is created.
   *
   * @param filter the <tt>DatagramPacketFilter</tt> to get a <tt>MultiplexedDatagramSocket</tt> for
   * @return a <tt>MultiplexedDatagramSocket</tt> which filters <tt>DatagramPacket</tt>s away from
   *     this <tt>DatagramSocket</tt> using the specified <tt>filter</tt>
   * @throws SocketException if creating the <tt>MultiplexedDatagramSocket</tt> for the specified
   *     <tt>filter</tt> fails
   */
  public MultiplexedDatagramSocket getSocket(DatagramPacketFilter filter) throws SocketException {
    if (filter == null) throw new NullPointerException("filter");

    synchronized (socketsSyncRoot) {
      /*
       * If a socket for the specified filter exists already, do not
       * create a new one and return the existing.
       */
      for (MultiplexedDatagramSocket socket : sockets)
        if (filter.equals(socket.getFilter())) return socket;

      // Create a new socket for the specified filter.
      MultiplexedDatagramSocket socket = new MultiplexedDatagramSocket(this, filter);

      // Remember the new socket.
      int socketCount = sockets.length;

      if (socketCount == 0) sockets = new MultiplexedDatagramSocket[] {socket};
      else {
        MultiplexedDatagramSocket[] newSockets = new MultiplexedDatagramSocket[socketCount + 1];

        System.arraycopy(sockets, 0, newSockets, 0, socketCount);
        newSockets[socketCount] = socket;
        sockets = newSockets;
      }

      return socket;
    }
  }
Ejemplo n.º 2
0
  /**
   * Adds a <tt>DatagramPacketFilter</tt> which allows dropping <tt>DatagramPacket</tt>s before they
   * are converted into <tt>RawPacket</tt>s.
   *
   * @param datagramPacketFilter the <tt>DatagramPacketFilter</tt> which allows dropping
   *     <tt>DatagramPacket</tt>s before they are converted into <tt>RawPacket</tt>s
   */
  public synchronized void addDatagramPacketFilter(DatagramPacketFilter datagramPacketFilter) {
    if (datagramPacketFilter == null) throw new NullPointerException("datagramPacketFilter");

    if (datagramPacketFilters == null) {
      datagramPacketFilters = new DatagramPacketFilter[] {datagramPacketFilter};
    } else {
      final int length = datagramPacketFilters.length;

      for (int i = 0; i < length; i++)
        if (datagramPacketFilter.equals(datagramPacketFilters[i])) return;

      DatagramPacketFilter[] newDatagramPacketFilters = new DatagramPacketFilter[length + 1];

      System.arraycopy(datagramPacketFilters, 0, newDatagramPacketFilters, 0, length);
      newDatagramPacketFilters[length] = datagramPacketFilter;
      datagramPacketFilters = newDatagramPacketFilters;
    }
  }