From 09d418956fd6a36382ad0acbbdf88d93e5917fdc Mon Sep 17 00:00:00 2001 From: Akilan Date: Thu, 22 Jun 2023 16:36:48 +0100 Subject: [PATCH] saving current changes --- Connection.go | 2 +- webapi/Shared Recent.go | 178 ++++++++++++++++++++-------------------- 2 files changed, 90 insertions(+), 90 deletions(-) diff --git a/Connection.go b/Connection.go index fd60009..309a282 100644 --- a/Connection.go +++ b/Connection.go @@ -357,7 +357,7 @@ func (c *Connection) send(packet *protocol.PacketRaw, receiverPublicKey *btcec.P // Send Traverse message if the peer is behind a NAT or firewall and this is the first message. Only for Announcement. if err == nil && isFirstPacket && (c.IsBehindNAT() || c.Firewall) && c.traversePeer != nil && packet.Command == protocol.CommandAnnouncement { - c.traversePeer.sendTraverse(packet, receiverPublicKey) + err = c.traversePeer.sendTraverse(packet, receiverPublicKey) } return err diff --git a/webapi/Shared Recent.go b/webapi/Shared Recent.go index 05fb56d..6e35a56 100644 --- a/webapi/Shared Recent.go +++ b/webapi/Shared Recent.go @@ -6,119 +6,119 @@ Author: Peter Kleissner package webapi import ( - "fmt" - "time" + "fmt" + "time" - "github.com/PeernetOfficial/core" - "github.com/PeernetOfficial/core/blockchain" + "github.com/PeernetOfficial/core" + "github.com/PeernetOfficial/core/blockchain" ) // queryRecentShared returns recently shared files on the network from random peers until the limit is reached. func (api *WebapiInstance) queryRecentShared(backend *core.Backend, fileType int, limitPeer, offsetTotal, limitTotal uint64, nodeID []byte, nodeIDState bool) (files []blockchain.BlockRecordFile) { - if limitPeer == 0 { - limitPeer = 1 - } - // Assign peer list as an empty array - var peerList []*core.PeerInfo + if limitPeer == 0 { + limitPeer = 1 + } + // Assign peer list as an empty array + var peerList []*core.PeerInfo - // check if the NodeID is provided or not - if len(nodeID) == 0 && !nodeIDState { - // Use the peer list to know about active peers. Random order! - peerList = api.Backend.PeerlistGet() - } else { - // Get peer information based on the NodeID provided - _, peer, err := api.Backend.FindNode(nodeID, time.Second*5) - if err != nil { - return - } - peerList = append(peerList, peer) - } + // check if the NodeID is provided or not + if len(nodeID) == 0 && !nodeIDState { + // Use the peer list to know about active peers. Random order! + peerList = api.Backend.PeerlistGet() + } else { + // Get peer information based on the NodeID provided + _, peer, err := api.Backend.FindNode(nodeID, time.Second*5) + if err != nil { + return + } + peerList = append(peerList, peer) + } - // Files from peers exceeding the limit. It is used if from all peers the total limit is not reached. - var filesSeconday []blockchain.BlockRecordFile + // Files from peers exceeding the limit. It is used if from all peers the total limit is not reached. + var filesSeconday []blockchain.BlockRecordFile - for _, peer := range peerList { - if peer.BlockchainHeight == 0 { - continue - } + for _, peer := range peerList { + if peer.BlockchainHeight == 0 { + continue + } - var filesFromPeer uint64 - var Name string + var filesFromPeer uint64 + var Name string - ProfileNameFound := false + ProfileNameFound := false - // First iteration of the entire blockchain to search for the profile - // image and Username of the user - for blockN1 := peer.BlockchainHeight - 1; blockN1 > 0; blockN1-- { - blockDecoded, _, found, _ := backend.ReadBlock(peer.PublicKey, peer.BlockchainVersion, blockN1) - if !found { - continue - } - // Adding profile image and Username to the output - for raw := range blockDecoded.Block.RecordsRaw { - if blockDecoded.Block.RecordsRaw[raw].Type == blockchain.ProfileName && !ProfileNameFound { - Name = string(blockDecoded.Block.RecordsRaw[raw].Data[:]) - ProfileNameFound = true - } - } - } + // First iteration of the entire blockchain to search for the profile + // image and Username of the user + for blockN1 := peer.BlockchainHeight - 1; blockN1 > 0; blockN1-- { + blockDecoded, _, found, _ := backend.ReadBlock(peer.PublicKey, peer.BlockchainVersion, blockN1) + if !found { + continue + } + // Adding profile image and Username to the output + for raw := range blockDecoded.Block.RecordsRaw { + if blockDecoded.Block.RecordsRaw[raw].Type == blockchain.ProfileName && !ProfileNameFound { + Name = string(blockDecoded.Block.RecordsRaw[raw].Data[:]) + ProfileNameFound = true + } + } + } - // decode blocks from top down - blockLoop: - for blockN := peer.BlockchainHeight - 1; blockN > 0; blockN-- { - blockDecoded, _, found, _ := backend.ReadBlock(peer.PublicKey, peer.BlockchainVersion, blockN) + // decode blocks from top down + blockLoop: + for blockN := peer.BlockchainHeight - 1; blockN > 0; blockN-- { + blockDecoded, _, found, _ := backend.ReadBlock(peer.PublicKey, peer.BlockchainVersion, blockN) - if !found { - continue - } + if !found { + continue + } - for _, record := range blockDecoded.RecordsDecoded { - if file, ok := record.(blockchain.BlockRecordFile); ok && isFileTypeMatchBlock(&file, fileType) { - // add the tags 'Shared By Count' and 'Shared By GeoIP' - file.Tags = append(file.Tags, blockchain.TagFromNumber(blockchain.TagSharedByCount, 1)) - if latitude, longitude, valid := api.Peer2GeoIP(peer); valid { - sharedByGeoIP := fmt.Sprintf("%.4f", latitude) + "," + fmt.Sprintf("%.4f", longitude) - file.Tags = append(file.Tags, blockchain.TagFromText(blockchain.TagSharedByGeoIP, sharedByGeoIP)) - } + for _, record := range blockDecoded.RecordsDecoded { + if file, ok := record.(blockchain.BlockRecordFile); ok && isFileTypeMatchBlock(&file, fileType) { + // add the tags 'Shared By Count' and 'Shared By GeoIP' + file.Tags = append(file.Tags, blockchain.TagFromNumber(blockchain.TagSharedByCount, 1)) + if latitude, longitude, valid := api.Peer2GeoIP(peer); valid { + sharedByGeoIP := fmt.Sprintf("%.4f", latitude) + "," + fmt.Sprintf("%.4f", longitude) + file.Tags = append(file.Tags, blockchain.TagFromText(blockchain.TagSharedByGeoIP, sharedByGeoIP)) + } - file.Username = Name + file.Username = Name - // found a new file! append. - if filesFromPeer < limitPeer { - filesFromPeer++ + // found a new file! append. + if filesFromPeer < limitPeer { + filesFromPeer++ - if offsetTotal > 0 { - offsetTotal-- - continue - } + if offsetTotal > 0 { + offsetTotal-- + continue + } - files = append(files, file) + files = append(files, file) - if uint64(len(files)) >= limitTotal { - return - } - } else if uint64(len(filesSeconday)) < limitTotal-uint64(len(files)) { - filesSeconday = append(filesSeconday, file) - } else { - break blockLoop - } - } - } - } - } + if uint64(len(files)) >= limitTotal { + return + } + } else if uint64(len(filesSeconday)) < limitTotal-uint64(len(files)) { + filesSeconday = append(filesSeconday, file) + } else { + break blockLoop + } + } + } + } + } - files = append(files, filesSeconday...) + files = append(files, filesSeconday...) - return + return } // isFileTypeMatchBlock checks if the file type matches. -1 = accept any. -2 = core.TypeBinary, core.TypeCompressed, core.TypeContainer, core.TypeExecutable. func isFileTypeMatchBlock(file *blockchain.BlockRecordFile, fileType int) bool { - if fileType == -1 { - return true - } else if fileType == -2 { - return file.Type == core.TypeBinary || file.Type == core.TypeCompressed || file.Type == core.TypeContainer || file.Type == core.TypeExecutable - } + if fileType == -1 { + return true + } else if fileType == -2 { + return file.Type == core.TypeBinary || file.Type == core.TypeCompressed || file.Type == core.TypeContainer || file.Type == core.TypeExecutable + } - return file.Type == uint8(fileType) + return file.Type == uint8(fileType) }