Examples of KadContact


Examples of org.jmule.core.jkad.routingtable.KadContact

  public static KadContact getNearestContact(Int128 targetID, List<KadContact> contactList, List<KadContact> exceptList) {
    int result = -1;
    int biggerRang = -1;
   
    for(int i = 0;i<contactList.size();i++) {
      KadContact contact = contactList.get(i);
      if (exceptList.contains(contact)) continue;
      Int128 distance = XOR(targetID, contact.getContactDistance());
      if (result==-1) {
        result = i;
        biggerRang = getBiggerRang(distance.getBitSet());
        continue;
      }
View Full Code Here

Examples of org.jmule.core.jkad.routingtable.KadContact

    if (packet.getProtocol() != PROTO_KAD_UDP)
      throw new UnknownPacketType();

    // update last response
    KadContact rcontact = routing_table.getContact(packet.getAddress());
    if (rcontact != null) {
      rcontact.setLastResponse(System.currentTimeMillis());
      rcontact.setConnected(true);
      rcontact.setIPVerified(true);
    }

    // notify packet listeners
    List<PacketListener> listener_list = packetListeners.get(packet
        .getCommand());
    if (listener_list != null)
      for (PacketListener listener : listener_list)
        try {
          if (listener.processAddress(packet.getAddress()))
            listener.packetReceived(packet);
        } catch (Throwable t) {
          t.printStackTrace();
          Logger.getSingleton().logException(t);
        }

    byte packetOPCode = packet.getCommand();
    ByteBuffer rawData = packet.getAsByteBuffer();
    rawData.position(2);
    boolean unknown_packet = false;
    try {
      if (packetOPCode == KADEMLIA_BOOTSTRAP_REQ) {
        byte[] client_id_raw = new byte[16];
        rawData.get(client_id_raw);
        byte[] address = new byte[4];
        rawData.get(address);
        int udp_port = shortToInt(rawData.getShort());
        int tcp_port = shortToInt(rawData.getShort());

        bootStrap.processBootStrapReq(new ClientID(client_id_raw),
            new IPAddress(address), udp_port);
      } else if (packetOPCode == KADEMLIA_BOOTSTRAP_RES) {

        int contactCount = shortToInt(rawData.getShort());
        List<KadContact> contact_list = new LinkedList<KadContact>();
        for (int i = 0; i < contactCount; i++) {
          contact_list.add(getContact(rawData));
        }

        bootStrap.processBootStrapRes(contact_list);
      } else if (packetOPCode == KADEMLIA_HELLO_REQ) {
        byte[] client_id_raw = new byte[16];
        rawData.get(client_id_raw);
        byte[] address = new byte[4];
        rawData.get(address);
        int udp_port = shortToInt(rawData.getShort());
        int tcp_port = shortToInt(rawData.getShort());

        KadContact contact = routing_table.getContact(new ClientID(
            client_id_raw));
        if (contact != null) {
          contact.setTCPPort(tcp_port);
          contact.setUDPPort(udp_port);

        }

        KadPacket response;
        response = PacketFactory.getHello1ResPacket();
        _network_manager.sendKadPacket(response, sender_address,
            sender_port);

      } else if (packetOPCode == KADEMLIA_HELLO_RES) {
        byte[] client_id_raw = new byte[16];
        rawData.get(client_id_raw);
        byte address[] = new byte[4];
        rawData.get(address);
        int udp_port = shortToInt(rawData.getShort());
        int tcp_port = shortToInt(rawData.getShort());

        KadContact contact = routing_table.getContact(new ClientID(
            client_id_raw));

        if (contact != null) {
          contact.setTCPPort(tcp_port);
          contact.setUDPPort(udp_port);
        }
        // if contact is not in routing table ignore message
        /*
         * KadContact add_contact = new KadContact(new
         * ClientID(client_id_raw), new ContactAddress(new
         * IPAddress(address),udp_port), tcp_port, (byte)0, null);
         * routing_table.addContact(add_contact);
         *
         * add_contact.setConnected(true);
         */

      } else if (packetOPCode == KADEMLIA_REQ) {
        byte type = rawData.get();

        byte[] client_id_raw = new byte[16];
        rawData.get(client_id_raw);
        ClientID targetClientID = new ClientID(client_id_raw);

        client_id_raw = new byte[16];
        rawData.get(client_id_raw);
        ClientID receiverClientID = new ClientID(client_id_raw);
        RequestType requestType = RequestType.FIND_VALUE;
        switch (type) {
        case JKadConstants.FIND_VALUE:
          requestType = RequestType.FIND_VALUE;
          break;

        case JKadConstants.STORE:
          requestType = RequestType.STORE;
          break;

        case JKadConstants.FIND_NODE:
          requestType = RequestType.FIND_NODE;
          break;
        }
        lookup.processRequest(packet.getAddress(), requestType,
            targetClientID, receiverClientID, 1);
      } else if (packetOPCode == KADEMLIA_RES) {
        byte[] client_id_raw = new byte[16];
        rawData.get(client_id_raw);
        int contactCount = byteToInt(rawData.get());
        List<KadContact> contact_list = new LinkedList<KadContact>();
        for (int i = 0; i < contactCount; i++) {
          contact_list.add(getContact(rawData));
        }

        lookup.processResponse(packet.getAddress(), new ClientID(
            client_id_raw), contact_list);
      } else if (packetOPCode == KADEMLIA_PUBLISH_REQ) {
        byte target_id[] = new byte[16];
        rawData.get(target_id);
        Int128 targetID = new Int128(target_id);
        int clientCount = shortToInt(rawData.getShort());

        List<Source> list = new LinkedList<Source>();

        for (int i = 0; i < clientCount; i++) {
          byte clientID[] = new byte[16];
          rawData.get(clientID);
          int tagCount = shortToInt(rawData.get());
          TagList tagList = new TagList();
          for (int k = 0; k < tagCount; k++) {
            Tag tag = TagScanner.scanTag(rawData);
            tagList.addTag(tag);
          }
          ClientID client_id = new ClientID(clientID);
          Source source = new Source(client_id, tagList);

          source.setAddress(new IPAddress(packet.getAddress()));
          source.setUDPPort(packet.getAddress().getPort());

          KadContact contact = routing_table.getContact(client_id);
          if (contact != null)
            source.setTCPPort(contact.getTCPPort());

          list.add(source);
        }

        boolean source_load = false;

        for (Source source : list) {
          boolean isSourcePublish = false;
          isSourcePublish = source.getTagList()
              .hasTag(TAG_SOURCETYPE);
          if (isSourcePublish) {
            indexer.addFileSource(targetID, source);
            source_load = true;
          } else
            indexer.addFileSource(targetID, source);
        }
        KadPacket response = null;
        if (source_load)
          response = PacketFactory.getPublishResPacket(targetID,
              indexer.getFileSourcesLoad());
        else
          response = PacketFactory.getPublishResPacket(targetID,
              indexer.getKeywordLoad());
        _network_manager.sendKadPacket(response, sender_address,
            sender_port);

      } else if (packetOPCode == KADEMLIA_PUBLISH_RES) {
        byte targetID[] = new byte[16];
        rawData.get(targetID);
        int load = byteToInt(rawData.get());
        publisher.processGenericResponse(new ClientID(targetID), load);
      } else if (packetOPCode == KADEMLIA_SEARCH_NOTES_REQ) {
        byte[] targetID = new byte[16];
        rawData.get(targetID);
        List<Source> source_list = indexer.getNoteSources(new Int128(
            targetID));
        KadPacket response = PacketFactory.getNotesRes(new Int128(
            targetID), source_list);
        _network_manager.sendKadPacket(response, sender_address,
            sender_port);
      } else if (packetOPCode == KADEMLIA_SEARCH_NOTES_RES) {
        byte[] noteID = new byte[16];
        rawData.get(noteID);
        int resultCount = shortToInt(rawData.getShort());
        List<Source> sourceList = new LinkedList<Source>();

        for (int i = 0; i < resultCount; i++) {
          byte[] clientID = new byte[16];
          rawData.get(clientID);
          Convert.updateSearchID(clientID);
          int tagCount = shortToInt(rawData.get());
          TagList tagList = new TagList();
          for (int k = 0; k < tagCount; k++) {
            Tag tag = TagScanner.scanTag(rawData);
            tagList.addTag(tag);
          }
          Source source = new Source(new ClientID(clientID), tagList);
          source.setAddress(new IPAddress(packet.getAddress()));
          source.setUDPPort(packet.getAddress().getPort());
          KadContact contact = RoutingTable.getSingleton()
              .getContact(new ClientID(clientID));
          if (contact != null)
            source.setTCPPort(contact.getTCPPort());
          sourceList.add(source);
        }
        search.processResults(packet.getAddress(), new Int128(noteID),
            sourceList);
      } else if (packetOPCode == KADEMLIA_PUBLISH_NOTES_REQ) {
        byte[] noteID = new byte[16];
        rawData.get(noteID);
        byte[] publisherID = new byte[16];
        rawData.get(publisherID);
        int tagCount = byteToInt(rawData.get());
        TagList tagList = new TagList();
        for (int i = 0; i < tagCount; i++) {
          Tag tag = TagScanner.scanTag(rawData);
          tagList.addTag(tag);
        }
        ClientID publisher_id = new ClientID(publisherID);
        Source source = new Source(publisher_id, tagList);
        source.setAddress(new IPAddress(packet.getAddress()));
        source.setUDPPort(packet.getAddress().getPort());

        KadContact contact = routing_table.getContact(publisher_id);
        if (contact != null)
          source.setTCPPort(contact.getTCPPort());

        indexer.addNoteSource(new Int128(noteID), source);
        KadPacket response = PacketFactory.getPublishNotesRes(
            new Int128(noteID), indexer.getNoteLoad());
        _network_manager.sendKadPacket(response, sender_address,
            sender_port);

      } else if (packetOPCode == KADEMLIA_PUBLISH_NOTES_RES) {
        byte[] noteID = new byte[16];
        rawData.get(noteID);
        int load = byteToInt(rawData.get());
        publisher.processNoteResponse(new Int128(noteID), load);
      } else if (packetOPCode == KADEMLIA_SEARCH_REQ) {
        byte targetID[] = new byte[16];
        rawData.get(targetID);
        boolean sourceSearch = false;
        if (rawData.limit() == 17)
          if (rawData.get() == 1)
            sourceSearch = true;
        List<Source> source_list;

        if (sourceSearch)
          source_list = indexer.getFileSources(new Int128(targetID));
        else
          source_list = indexer
              .getKeywordSources(new Int128(targetID));
        KadPacket response = PacketFactory.getSearchResPacket(
            new Int128(targetID), source_list);
        _network_manager.sendKadPacket(response, sender_address,
            sender_port);
      } else if (packetOPCode == KADEMLIA_SEARCH_RES) {
        byte targetID[] = new byte[16];
        rawData.get(targetID);
        int resultCount = shortToInt(rawData.getShort());

        List<Source> sourceList = new LinkedList<Source>();

        for (int i = 0; i < resultCount; i++) {
          byte[] contactID = new byte[16];
          rawData.get(contactID);
          int tagCount = byteToInt(rawData.get());
          TagList tagList = new TagList();
          for (int k = 0; k < tagCount; k++) {
            try {
              Tag tag = TagScanner.scanTag(rawData);
              if (tag == null)
                continue;

              tagList.addTag(tag);
            } catch (Throwable t) {
              t.printStackTrace();
            }
          }
          ClientID client_id = new ClientID(contactID);
          Source source = new Source(client_id, tagList);
          KadContact contact = routing_table.getContact(client_id);
          if (contact != null) {
            source.setUDPPort(contact.getUDPPort());
            source.setTCPPort(contact.getTCPPort());
          }
          sourceList.add(source);
        }
        search.processResults(packet.getAddress(),
            new Int128(targetID), sourceList);
      } else if (packetOPCode == KADEMLIA_FIREWALLED_REQ) {
        int tcpPort = shortToInt(rawData.getShort());
        firewallChecker.processFirewallRequest(packet.getAddress(),
            tcpPort);
      } else if (packetOPCode == KADEMLIA_FIREWALLED_RES) {
        byte[] address = new byte[4];
        rawData.get(address);
        firewallChecker.porcessFirewallResponse(packet.getAddress(),
            new IPAddress(address));
      } else if (packetOPCode == KADEMLIA2_HELLO_REQ) {
        byte[] client_id_raw = new byte[16];
        rawData.get(client_id_raw);
        ClientID clientID = new ClientID(client_id_raw);
        int tcpPort = shortToInt(rawData.getShort());
        byte version = rawData.get();
        byte tag_count = rawData.get();
        List<Tag> tag_list = new LinkedList<Tag>();
        for (byte i = 0; i < tag_count; i++) {
          Tag tag = TagScanner.scanTag(rawData);
          if (tag == null)
            throw new CorruptedPacketException();
          tag_list.add(tag);
        }

        KadContact contact = routing_table.getContact(clientID);
        if (contact != null) {
          contact.setTCPPort(tcpPort);
          contact.setUDPPort(packet.getAddress().getPort());
          contact.setVersion(version);
        }

        KadPacket response = PacketFactory
            .getHello2ResPacket(TagList.EMPTY_TAG_LIST);
        _network_manager.sendKadPacket(response, sender_address,
            sender_port);
      } else if (packetOPCode == KADEMLIA2_HELLO_RES) {
        byte[] client_id_raw = new byte[16];
        rawData.get(client_id_raw);
        ClientID clientID = new ClientID(client_id_raw);
        int tcpPort = shortToInt(rawData.getShort());
        byte version = rawData.get();
        byte tag_count = rawData.get();
        List<Tag> tag_list = new LinkedList<Tag>();

        for (byte i = 0; i < tag_count; i++) {
          Tag tag = TagScanner.scanTag(rawData);
          if (tag == null)
            throw new CorruptedPacketException();
          tag_list.add(tag);
        }

        KadContact contact = routing_table.getContact(clientID);
        if (contact != null) {
          contact.setTCPPort(tcpPort);
          contact.setVersion(version);
        }
        // ignore message if contact is not in routing table
        /*
         * ContactAddress address = new ContactAddress(new
         * IPAddress(packet.getSender()),packet.getSender().getPort());
         * KadContact add_contact = new KadContact(clientID, address,
         * tcpPort,version, null);
         * routing_table.addContact(add_contact);
         *
         * add_contact.setConnected(true);
         */

      } else if (packetOPCode == KADEMLIA2_REQ) {
        byte type = rawData.get();

        byte[] client_id_raw = new byte[16];
        rawData.get(client_id_raw);
        ClientID targetClientID = new ClientID(client_id_raw);

        client_id_raw = new byte[16];
        rawData.get(client_id_raw);
        ClientID receiverClientID = new ClientID(client_id_raw);
        RequestType requestType = RequestType.FIND_VALUE;
        switch (type) {
        case JKadConstants.FIND_VALUE:
          requestType = RequestType.FIND_VALUE;
          break;

        case JKadConstants.STORE:
          requestType = RequestType.STORE;
          break;

        case JKadConstants.FIND_NODE:
          requestType = RequestType.FIND_NODE;
          break;
        }

        lookup.processRequest(packet.getAddress(), requestType,
            targetClientID, receiverClientID, 2);
      } else if (packetOPCode == KADEMLIA2_RES) {
        byte[] client_id_raw = new byte[16];
        rawData.get(client_id_raw);
        int contactCount = byteToInt(rawData.get());
        List<KadContact> contact_list = new LinkedList<KadContact>();
        for (int i = 0; i < contactCount; i++) {
          contact_list.add(getContact(rawData));
        }
        lookup.processResponse(packet.getAddress(), new ClientID(
            client_id_raw), contact_list);
      } else if (packetOPCode == KADEMLIA2_PUBLISH_KEY_REQ) {
        byte[] client_id = new byte[16];
        rawData.get(client_id);
        ClientID clientID = new ClientID(client_id);
        int count = rawData.getShort();
        for (int i = 0; i < count; i++) {
          byte[] hash = new byte[16];
          rawData.get(hash);
          byte tagCount = rawData.get();
          TagList tag_list = new TagList();
          for (int j = 0; j < tagCount; j++) {
            Tag tag = TagScanner.scanTag(rawData);
            if (tag == null)
              throw new CorruptedPacketException();
            tag_list.addTag(tag);
          }
          Source source = new Source(clientID, tag_list);
          source.setAddress(new IPAddress(packet.getAddress()));
          source.setUDPPort(packet.getAddress().getPort());

          KadContact contact = routing_table.getContact(clientID);
          if (contact != null)
            source.setTCPPort(contact.getTCPPort());

          indexer.addKeywordSource(new Int128(hash), source);
        }
        KadPacket response = PacketFactory.getPublishRes2Packet(
            clientID, indexer.getKeywordLoad());
        _network_manager.sendKadPacket(response, sender_address,
            sender_port);

      } else if (packetOPCode == KADEMLIA2_PUBLISH_RES) {
        byte targetID[] = new byte[16];
        rawData.get(targetID);
        int load = byteToInt(rawData.get());
        publisher.processGenericResponse(new ClientID(targetID), load);
      } else if (packetOPCode == KADEMLIA2_PUBLISH_SOURCE_REQ) {
        byte[] client_id = new byte[16];
        byte[] source_id = new byte[16];

        rawData.get(client_id);
        rawData.get(source_id);

        int tagCount = rawData.get();
        TagList tag_list = new TagList();
        for (int i = 0; i < tagCount; i++) {
          Tag tag = TagScanner.scanTag(rawData);
          if (tag == null)
            throw new CorruptedPacketException();
          tag_list.addTag(tag);
        }
        Source source = new Source(new ClientID(client_id), tag_list);
        source.setAddress(new IPAddress(packet.getAddress()));
        source.setUDPPort(packet.getAddress().getPort());

        KadContact contact = routing_table.getContact(new ClientID(
            client_id));
        if (contact != null)
          source.setTCPPort(contact.getTCPPort());

        indexer.addFileSource(new Int128(source_id), source);

        KadPacket response = PacketFactory.getPublishRes2Packet(
            new ClientID(client_id), indexer.getFileSourcesLoad());
View Full Code Here

Examples of org.jmule.core.jkad.routingtable.KadContact

    byte[] address = new byte[4];
    packetData.get(address);
    int udp_port = shortToInt(packetData.getShort());
    int tcp_port = shortToInt(packetData.getShort());
    byte client_version = packetData.get();
    return new KadContact(new ClientID(client_id_raw), new ContactAddress(
        address, udp_port), tcp_port, client_version, null, false);
  }
View Full Code Here

Examples of org.jmule.core.jkad.routingtable.KadContact

   
       
    int count = ALPHA;
    if (count > possibleContacts.size()) count = possibleContacts.size();
    for (int i = 0; i < count; i++) {
      KadContact contact = getNearestContact(Utils.XOR(targetID,_jkad_manager.getClientID()), possibleContacts,usedContacts);
     
      lookupContact(contact);
    }
   
    contactCleaner = new Task() {
      public void run() {
        for(ContactAddress address : requestedContacts.keySet()) {
          RequestedContact c = requestedContacts.get(address);
          if (c==null) { requestedContacts.remove(address); continue; }
          if (System.currentTimeMillis() - c.getRequestTime() > LOOKUP_CONTACT_TIMEOUT) {
            requestedContacts.remove(address);
            // lookup next
            KadContact contact = getNearestContact(Utils.XOR(targetID,_jkad_manager.getClientID()), possibleContacts,usedContacts);
            if (contact == null) return;
            lookupContact(contact);
          }
        }
           
View Full Code Here

Examples of org.jmule.core.jkad.routingtable.KadContact

     
      processToleranceContacts(sender, alpha);
    }
   
    requestedContacts.remove(sender);
    KadContact contact = getNearestContact(Utils.XOR(targetID, _jkad_manager.getClientID()), possibleContacts,usedContacts);
    if (contact != null) lookupContact(contact);

  }
View Full Code Here

Examples of org.jmule.core.jkad.routingtable.KadContact

        .getPort());
  }

  public void sendFirewallRequest(InetSocketAddress sender, Int128 contactID) {

    KadContact contact = routing_table.getContact(contactID);
    if (contact == null)
      return;
    contact.setLastUDPFirewallResponse(System.currentTimeMillis());

    if (System.currentTimeMillis() - contact.getLastUDPFirewallResponse() < FIREWALL_CHECK_INTERVAL)
      return;
    contact.setUDPFirewallQueries(contact.getUDPFirewallQueries() + 1);

    KadPacket packet = PacketFactory
        .getFirewalled1Req(contact.getTCPPort());
    _network_manager.sendKadPacket(packet, new IPAddress(sender), sender
        .getPort());
  }
View Full Code Here

Examples of org.jmule.core.jkad.routingtable.KadContact

        .getPort());
  }

  public void porcessFirewallResponse(InetSocketAddress sender,
      IPAddress address) {
    KadContact contact = routing_table.getContact(new IPAddress(sender));
    if (contact != null) {
      contact.setLastUDPFirewallResponse(System.currentTimeMillis());
      contact
          .setUDPFirewallResponses(contact.getUDPFirewallResponses() + 1);

      if (my_ip_address == null) {
        my_ip_address = address;
      } else if (my_ip_address.equals(address))
        setFirewalled(false);
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.