home *** CD-ROM | disk | FTP | other *** search
- package java.net;
-
- import java.io.IOException;
-
- public class MulticastSocket extends DatagramSocket {
- private Object ttlLock = new Object();
-
- public MulticastSocket() throws IOException {
- }
-
- public MulticastSocket(int var1) throws IOException {
- super(var1);
- }
-
- void create(int var1, InetAddress var2) throws SocketException {
- SecurityManager var3 = System.getSecurityManager();
- if (var3 != null) {
- var3.checkListen(var1);
- }
-
- if (DatagramSocket.factory != null) {
- super.impl = DatagramSocket.factory.createDatagramSocketImpl();
- } else {
- try {
- super.impl = (DatagramSocketImpl)DatagramSocket.implClass.newInstance();
- } catch (Exception var5) {
- throw new SocketException("can't instantiate DatagramSocketImpl" + ((Throwable)var5).toString());
- }
- }
-
- super.impl.create();
- super.impl.setOption(4, new Integer(-1));
- super.impl.bind(var1, InetAddress.anyLocalAddress);
- }
-
- public void setTTL(byte var1) throws IOException {
- super.impl.setTTL(var1);
- }
-
- public void setTimeToLive(int var1) throws IOException {
- if (var1 >= 0 && var1 <= 255) {
- super.impl.setTimeToLive(var1);
- } else {
- throw new IllegalArgumentException("ttl out of range");
- }
- }
-
- public byte getTTL() throws IOException {
- return super.impl.getTTL();
- }
-
- public int getTimeToLive() throws IOException {
- return super.impl.getTimeToLive();
- }
-
- public void joinGroup(InetAddress var1) throws IOException {
- SecurityManager var2 = System.getSecurityManager();
- if (var2 != null) {
- var2.checkMulticast(var1);
- }
-
- super.impl.join(var1);
- }
-
- public void leaveGroup(InetAddress var1) throws IOException {
- SecurityManager var2 = System.getSecurityManager();
- if (var2 != null) {
- var2.checkMulticast(var1);
- }
-
- super.impl.leave(var1);
- }
-
- public void setInterface(InetAddress var1) throws SocketException {
- super.impl.setOption(16, var1);
- }
-
- public InetAddress getInterface() throws SocketException {
- return (InetAddress)super.impl.getOption(16);
- }
-
- public void send(DatagramPacket var1, byte var2) throws IOException {
- Object var3 = this.ttlLock;
- synchronized(var3) {
- synchronized(var1) {
- if (!super.connected) {
- SecurityManager var17 = System.getSecurityManager();
- if (var17 != null) {
- if (var1.getAddress().isMulticastAddress()) {
- var17.checkMulticast(var1.getAddress(), var2);
- } else {
- var17.checkConnect(var1.getAddress().getHostAddress(), var1.getPort());
- }
- }
- } else {
- Object var5 = null;
- InetAddress var16 = var1.getAddress();
- if (var16 == null) {
- var1.setAddress(super.connectedAddress);
- var1.setPort(super.connectedPort);
- } else if (!var16.equals(super.connectedAddress) || var1.getPort() != super.connectedPort) {
- throw new SecurityException("connected address and packet address differ");
- }
- }
-
- byte var18 = this.getTTL();
-
- try {
- if (var2 != var18) {
- super.impl.setTTL(var2);
- }
-
- super.impl.send(var1);
- } finally {
- if (var2 != var18) {
- super.impl.setTTL(var18);
- }
-
- }
- }
-
- }
- }
- }
-