package com.limegroup.gnutella; import java.io.IOException; import org.limewire.inject.EagerSingleton; import org.limewire.io.Address; import org.limewire.io.BadGGEPBlockException; import org.limewire.io.BadGGEPPropertyException; import org.limewire.io.GGEP; import org.limewire.net.address.AddressFactory; import org.limewire.net.address.AddressSerializer; import com.google.inject.Inject; @EagerSingleton public class PushEndpointSerializer implements AddressSerializer { private final PushEndpointFactory pushEndpointFactory; private static final String PUSH_ENDPOINT = "PE"; @Inject public PushEndpointSerializer(PushEndpointFactory pushEndpointFactory) { this.pushEndpointFactory = pushEndpointFactory; } @Override public Address deserialize(String address) throws IOException { throw new IOException(); } @Override public Address deserialize(byte[] serializedAddress) throws IOException { try { GGEP ggep = new GGEP(serializedAddress); return pushEndpointFactory.createPushEndpoint(ggep.getString(PUSH_ENDPOINT)); } catch (BadGGEPBlockException e) { throw new IOException(e); } catch (BadGGEPPropertyException e) { throw new IOException(e); } } @Override public boolean canSerialize(Address address) { return address instanceof PushEndpoint; } @Override public String getAddressType() { return "push-endpoint"; } @Override @Inject public void register(AddressFactory factory) { factory.registerSerializer(this); } @Override public byte[] serialize(Address address) throws IOException { GGEP ggep = new GGEP(); ggep.put(PUSH_ENDPOINT, ((PushEndpoint)address).httpStringValue()); return ggep.toByteArray(); } }