001 /** 002 * 003 * Copyright 2004 Protique Ltd 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 * 017 **/ 018 package org.activemq.transport.multicast; 019 020 import java.io.IOException; 021 import java.net.DatagramSocket; 022 import java.net.MulticastSocket; 023 import java.net.URI; 024 025 import javax.jms.JMSException; 026 027 import org.activemq.io.WireFormat; 028 import org.activemq.transport.udp.UdpTransportChannel; 029 030 /** 031 * A multicast implementation of a TransportChannel 032 * 033 * @version $Revision: 1.1.1.1 $ 034 */ 035 public class MulticastTransportChannel extends UdpTransportChannel { 036 037 private boolean loopbackMode = false; // no loopback by default as we don't 038 // need to see our own messages 039 040 private int timeToLive = 1; // don't send multicast messages beyound our local subnet 041 042 043 /** 044 * Connect to a remote Node - e.g. a Broker 045 * @param wireFormat 046 * @param remoteLocation 047 * @throws JMSException 048 */ 049 public MulticastTransportChannel(WireFormat wireFormat, URI remoteLocation) throws JMSException { 050 super(wireFormat, remoteLocation); 051 } 052 053 /** 054 * @param wireFormat 055 * @param socket 056 * @throws JMSException 057 */ 058 public MulticastTransportChannel(WireFormat wireFormat, MulticastSocket socket) throws JMSException { 059 super(wireFormat, socket); 060 } 061 062 /** 063 * @return true 064 */ 065 public boolean isMulticast() { 066 return true; 067 } 068 069 /** 070 * pretty print for object 071 * 072 * @return String representation of this object 073 */ 074 public String toString() { 075 return "MulticastTransportChannel: " + socket; 076 } 077 078 /** 079 * @return Returns the timeToLive. 080 */ 081 public int getTimeToLive() { 082 return timeToLive; 083 } 084 /** 085 * @param timeToLive The timeToLive to set. 086 * @throws IOException 087 */ 088 public void setTimeToLive(int timeToLive) throws IOException { 089 this.timeToLive = timeToLive; 090 MulticastSocket msocket = (MulticastSocket) socket; 091 if (msocket != null){ 092 msocket.setTimeToLive(timeToLive); 093 } 094 } 095 096 protected void connect() throws IOException { 097 MulticastSocket msocket = (MulticastSocket) socket; 098 099 //log.info("Creating multicast socket on port: " + port + " on 100 msocket.setLoopbackMode(loopbackMode); 101 msocket.setTimeToLive(getTimeToLive()); 102 msocket.joinGroup(inetAddress); 103 } 104 105 protected DatagramSocket createSocket(int port) throws IOException { 106 return new MulticastSocket(port); 107 } 108 109 }