FileDocCategorySizeDatePackage
RemoteDeliverySocketFactory.javaAPI DocApache James 2.3.15469Fri Jan 12 12:56:30 GMT 2007org.apache.james.transport.mailets

RemoteDeliverySocketFactory

public class RemoteDeliverySocketFactory extends SocketFactory
It is used by RemoteDelivery in order to make possible to bind the client socket to a specific ip address. This is not a nice solution because the ip address must be shared by all RemoteDelivery instances. It would be better to modify JavaMail (current version 1.3) to support a corresonding property, e.g. mail.smtp.bindAdress. This used to not extend javax.net.SocketFactory descendant, because 1. it was not necessary because JavaMail 1.2 uses reflection when accessing this class; 2. it was not desirable because it would require java 1.4. But since James 2.3.0a1: 1. we require Java 1.4 so the dependency on SocketFactory is not really an issue; 2. Javamail 1.4 cast the object returned by getDefault to SocketFactory and fails to create the socket if we don't extend SocketFactory. Note: Javamail 1.4 should correctly support mail.smtp.localaddr so we could probably get rid of this class and simply add that property to the Session.

Fields Summary
private static InetAddress
bindAddress
it should be set by setBindAdress(). Null means the socket is bind to the default address.
Constructors Summary
Methods Summary
public java.net.SocketcreateSocket()
the same as the similarly named javax.net.SocketFactory operation. Just to be safe, it is not used by JavaMail 1.3. This is the only method used by JavaMail 1.4.

        Socket s = new Socket();
        s.bind(new InetSocketAddress(bindAddress, 0));
        return s;
    
public java.net.SocketcreateSocket(java.lang.String host, int port)
the same as the similarly named javax.net.SocketFactory operation. This is the one which is used by JavaMail 1.3. This is not used by JavaMail 1.4.

        return new Socket(host, port, bindAddress, 0);
    
public java.net.SocketcreateSocket(java.lang.String host, int port, java.net.InetAddress clientHost, int clientPort)
the same as the similarly named javax.net.SocketFactory operation. Just to be safe, it is not used by JavaMail 1.3. This is not used by JavaMail 1.4.

        return new Socket(host, port, 
                clientHost == null ? bindAddress : clientHost, clientPort);
    
public java.net.SocketcreateSocket(java.net.InetAddress host, int port)
the same as the similarly named javax.net.SocketFactory operation. Just to be safe, it is not used by JavaMail 1.3. This is not used by JavaMail 1.4.

        return new Socket(host, port, bindAddress, 0);
    
public java.net.SocketcreateSocket(java.net.InetAddress address, int port, java.net.InetAddress clientAddress, int clientPort)
the same as the similarly named javax.net.SocketFactory operation. Just to be safe, it is not used by JavaMail 1.3. This is not used by JavaMail 1.4.

        return new Socket(address, port, 
                clientAddress == null ? bindAddress : clientAddress, 
                clientPort);
    
public static javax.net.SocketFactorygetDefault()
the same as the similarly named javax.net.SocketFactory operation.

        return new RemoteDeliverySocketFactory();
    
static voidsetBindAdress(java.lang.String addr)

param
addr the ip address or host name the delivery socket will bind to

        if (addr == null) bindAddress = null;
        else bindAddress = InetAddress.getByName(addr);