package com.robonobo.mina.message.handlers; import java.io.IOException; import java.io.InputStream; import com.google.protobuf.GeneratedMessage; import com.robonobo.mina.message.MessageHolder; import com.robonobo.mina.message.proto.MinaProtocol.PublicDetails; import com.robonobo.mina.network.EndPointMgr; public class PublicDetailsHandler extends AbstractMessageHandler { @Override public void handleMessage(MessageHolder mh) { PublicDetails pd = (PublicDetails) mh.getMessage(); // As a result of these newly-returned public details for us, can we now say we support NAT traversal? boolean newEndpoint = false; for (EndPointMgr epMgr : mina.getNetMgr().getEndPointMgrs()) { newEndpoint |= epMgr.advisePublicDetails(pd, mh.getFromCC().getTheirEp()); } if(newEndpoint) { mina.getNetMgr().readvertiseEndpoints(); mina.getSourceMgr().networkDetailsChanged(); } } @Override public GeneratedMessage parse(String cmdName, InputStream is) throws IOException { return PublicDetails.newBuilder().mergeFrom(is).build(); } }