/*
* This file is part of jNAT-PMPlib.
*
* jNAT-PMPlib is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* jNAT-PMPlib is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with jNAT-PMPlib. If not, see <http://www.gnu.org/licenses/>.
*/
package net.tomp2p.natpmp;
import java.net.Inet4Address;
import java.net.UnknownHostException;
/**
* This class manages an External Address message. This class is thread-safe.
* After instantiation, this class may be added to the message queue on the
* {@link NatPmpDevice}.
*
* @author flszen
*/
public class ExternalAddressRequestMessage extends Message {
private byte[] payload = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
private Inet4Address externalAddress;
/**
* Constructs a new {@link ExternalAddressRequestMessage}.
*
* @param listener
* The {@link MessageResponseInterface} that will respond to the
* message result.
*/
public ExternalAddressRequestMessage(MessageResponseInterface listener) {
super(MessageType.ExternalAddress, listener);
}
/**
* Gets the NAT-PMP gateway's external address.
*
* @return The external {@link Inet4Address} of the NAT-PMP gateway.
* @throws NatPmpException
* Thrown when no response has been received or the response
* parsing ran into some trouble.
*/
public Inet4Address getExternalAddress() throws NatPmpException {
// Return the address.
return externalAddress;
}
void parseResponse(byte[] response) throws NatPmpException {
try {
byte[] copy = new byte[4];
System.arraycopy(response, 8, copy, 0, 4);
externalAddress = (Inet4Address) Inet4Address.getByAddress(copy);
} catch (UnknownHostException ex) {
throw new NatPmpException("Unable to parse external address.", ex);
}
}
byte[] getRequestPayload() {
return (byte[]) payload.clone();
}
byte getOpcode() {
return 0;
}
}