@Override
 public void execute(Packet data) throws IOException {
   fromGuid = data.readInt();
   invitationCode = data.readUTF();
   fromNickname = data.readUTF();
   core.queNeedsUserInteraction(
       new ForwardedInvitationInteraction(
           con.getRemoteFriend(), fromNickname, fromGuid, invitationCode));
 }
Exemplo n.º 2
0
 @Override
 public void execute(Packet in) throws IOException {
   String host = in.readUTF();
   if (!IpDetection.isLan(host, false)) {
     manager.getNetMan().getIpDetection().setLastExternalIp(host);
   }
 }
Exemplo n.º 3
0
 @Override
 public void execute(Packet in) throws IOException {
   message = in.readUTF();
   messageToAll = in.readBoolean();
   sentAtTick = in.readLong();
   hasBeenQueuedForLaterSend = in.readBoolean();
   if (messageToAll) {
     manager
         .getCore()
         .queNeedsUserInteraction(
             new PostMessageToAllInteraction(
                 message, fromGuid, sentAtTick, hasBeenQueuedForLaterSend));
   } else {
     manager
         .getCore()
         .queNeedsUserInteraction(
             new PostMessageInteraction(message, fromGuid, sentAtTick, hasBeenQueuedForLaterSend));
   }
 }
Exemplo n.º 4
0
  @Override
  public void execute(Packet in) throws IOException {
    Friend f = con.getRemoteFriend();

    boolean guidMismatch = false;
    int remoteGUID = in.readInt();
    if (remoteGUID != f.getGuid()) {
      if (T.t) {
        T.warn("GUID mismatch!!! Closing connection.");
      }
      //            f.setGuid(remoteGUID);
      guidMismatch = true;
    }

    int port = in.readInt();
    f.updateLastKnownHostInfo(
        manager.getNetMan().getSocketFor(con).getInetAddress().getHostAddress(), port);
    f.setShareSize(in.readLong());
    int buildNumber = in.readInt();
    f.setAllianceBuildNumber(buildNumber);
    f.setTotalBytesReceived(in.readLong());
    f.setTotalBytesSent(in.readLong());
    f.setHighestIncomingCPS(in.readInt());
    f.setHighestOutgoingCPS(in.readInt());
    f.setNumberOfFilesShared(in.readInt());
    f.setNumberOfInvitedFriends(in.readInt());
    try {
      String dnsName = in.readUTF();
      if (!dnsName.trim().isEmpty()) {
        f.updateLastKnownHostInfo(dnsName, port);
      }
    } catch (BufferUnderflowException ex) {
    }

    if (CoreSubsystem.ALLOW_TO_SEND_UPGRADE_TO_FRIENDS) {
      if (buildNumber < Version.BUILD_NUMBER && buildNumber > 1120) {
        // remote has old version
        Hash h = core.getFileManager().getAutomaticUpgrade().getMyJarHash();
        if (h != null) {
          send(new NewVersionAvailable(h));
        }
      }
    }

    // now that we have a good connection to friend: verify that we only have ONE connection
    if (con.getRemoteFriend().hasMultipleFriendConnections()) {
      if (T.t) {
        T.trace(
            "Has multple connections to a friend. Figuring out wich one of us should close the connection");
      }
      if ((con.getDirection() == Connection.Direction.IN
              && con.getRemoteUserGUID() > manager.getMyGUID())
          || (con.getDirection() == Connection.Direction.OUT
              && manager.getMyGUID() > con.getRemoteUserGUID())) {
        // serveral connections. Its up to us to close one
        if (T.t) {
          T.info("Already connected to " + con.getRemoteFriend() + ". Closing connection");
        }
        send(new GracefulClose(GracefulClose.DUPLICATE_CONNECTION));
        // con.close();
        // close connection when we in turn receive a graceful close
      }
    }
    if (guidMismatch) {
      send(new GracefulClose(GracefulClose.GUID_MISMATCH));
    } else {
      // this is the place for an event: "FriendSuccessfullyConnected".
      core.getNetworkManager().signalFriendConnected(con.getRemoteFriend());
      core.getUICallback().nodeOrSubnodesUpdated(con.getRemoteFriend());
      core.updateLastSeenOnlineFor(con.getRemoteFriend());
      System.setProperty("alliance.network.friendsonline", "" + manager.getNFriendsConnected());
    }
  }