mirror of
https://github.com/arnaucube/blockchainIDsystem.git
synced 2026-02-07 02:56:43 +01:00
peers propagation working fine, started to implement serverCA
This commit is contained in:
@@ -70,3 +70,4 @@ Needs the config.json file:
|
||||
- endpoint to get if the address is in the blockchain (to verify users)
|
||||
- parameters Date or LastUpdate on the structs needs to be updated values
|
||||
- implement rsa encryption between peers
|
||||
- store blockchain in a .data file
|
||||
|
||||
@@ -26,15 +26,6 @@ func acceptPeers(peer Peer) {
|
||||
newPeer.IP = getIPFromConn(conn)
|
||||
newPeer.Port = getPortFromConn(conn)
|
||||
newPeer.Conn = conn
|
||||
/*
|
||||
//ask to the peer, for the peer ID
|
||||
resp, err := http.Get("http://" + newPeer.IP + ":" + newPeer.Port)
|
||||
check(err)
|
||||
color.Red("-----")
|
||||
fmt.Println(resp)
|
||||
//newPeer.ID = resp
|
||||
*/
|
||||
//incomingPeersList.Peers = append(incomingPeersList.Peers, newPeer)
|
||||
incomingPeersList = appendPeerIfNoExist(incomingPeersList, newPeer)
|
||||
go handleConn(conn, newPeer)
|
||||
}
|
||||
@@ -48,7 +39,6 @@ func connectToPeer(peer Peer) {
|
||||
return
|
||||
}
|
||||
peer.Conn = conn
|
||||
//outcomingPeersList.Peers = append(outcomingPeersList.Peers, peer)
|
||||
outcomingPeersList = appendPeerIfNoExist(outcomingPeersList, peer)
|
||||
go handleConn(conn, peer)
|
||||
}
|
||||
@@ -73,12 +63,7 @@ func handleConn(conn net.Conn, connPeer Peer) {
|
||||
log.Println(err)
|
||||
connRunning = false
|
||||
} else {
|
||||
/*
|
||||
fmt.Println(buffer)
|
||||
fmt.Println(bytesRead)
|
||||
*/
|
||||
var msg Msg
|
||||
//color.Blue(string(buffer[0:bytesRead]))
|
||||
//msg = msg.createFromBytes([]byte(string(buffer[0:bytesRead])))
|
||||
msg = msg.createFromBytes([]byte(newmsg))
|
||||
messageHandler(connPeer, msg)
|
||||
@@ -87,7 +72,7 @@ func handleConn(conn net.Conn, connPeer Peer) {
|
||||
//TODO add that if the peer closed is the p2p server, show a warning message at the peer
|
||||
log.Println("Peer: " + conn.RemoteAddr().String() + " connection closed")
|
||||
conn.Close()
|
||||
//TODO delete the peer from the outcomingPeersList
|
||||
//TODO delete the peer from the outcomingPeersList --> DONE
|
||||
deletePeerFromPeersList(connPeer, &outcomingPeersList)
|
||||
color.Yellow("peer deleted, current peerList:")
|
||||
printPeersList()
|
||||
|
||||
17
peer/main.go
17
peer/main.go
@@ -39,8 +39,7 @@ func main() {
|
||||
runningPeer.ID = hashPeer(runningPeer)
|
||||
runningPeer.Role = "client"
|
||||
|
||||
go runRestServer()
|
||||
|
||||
//TODO clean and reorder the following lines (43 to 62)
|
||||
//read flags, to know if is runned as p2p server
|
||||
if len(os.Args) > 1 {
|
||||
if os.Args[1] == "server" {
|
||||
@@ -50,7 +49,19 @@ func main() {
|
||||
runningPeer.ID = hashPeer(runningPeer)
|
||||
//runningPeer.ID = "0"
|
||||
}
|
||||
if len(os.Args) > 3 {
|
||||
config.Port = os.Args[2]
|
||||
config.RESTPort = os.Args[3]
|
||||
runningPeer.Port = os.Args[2]
|
||||
runningPeer.RESTPort = os.Args[3]
|
||||
if os.Args[1] == "server" {
|
||||
runningPeer.Port = config.ServerPort
|
||||
}
|
||||
runningPeer.ID = hashPeer(runningPeer)
|
||||
}
|
||||
}
|
||||
|
||||
go runRestServer()
|
||||
thisPeerID = runningPeer.ID
|
||||
outcomingPeersList.PeerID = runningPeer.ID
|
||||
fmt.Println(runningPeer)
|
||||
@@ -67,9 +78,9 @@ func main() {
|
||||
serverPeer.Port = config.ServerPort
|
||||
serverPeer.ID = hashPeer(serverPeer)
|
||||
serverPeer.Role = "server"
|
||||
go acceptPeers(runningPeer)
|
||||
connectToPeer(serverPeer)
|
||||
reconstructBlockchainFromBlock("http://"+config.IP+":"+config.ServerRESTPort, blockchain.GenesisBlock)
|
||||
go acceptPeers(runningPeer)
|
||||
}
|
||||
|
||||
for running {
|
||||
|
||||
@@ -30,21 +30,24 @@ func messageHandler(peer Peer, msg Msg) {
|
||||
case "PeersList":
|
||||
color.Blue("newPeerslist")
|
||||
fmt.Println(msg.PeersList)
|
||||
color.Red("PeersList")
|
||||
|
||||
//time.Sleep(1000 * time.Millisecond)
|
||||
updateNetworkPeersList(peer.Conn, msg.PeersList)
|
||||
propagatePeersList(peer)
|
||||
printPeersList()
|
||||
break
|
||||
case "PeersList_Response":
|
||||
color.Blue("newPeerslist")
|
||||
//for the moment is not beeing used
|
||||
color.Blue("newPeerslist, from PeersList_Response")
|
||||
fmt.Println(msg.PeersList)
|
||||
color.Red("PeersList_Response")
|
||||
|
||||
//time.Sleep(1000 * time.Millisecond)
|
||||
updateNetworkPeersList(peer.Conn, msg.PeersList)
|
||||
propagatePeersList(peer)
|
||||
printPeersList()
|
||||
break
|
||||
case "Block":
|
||||
//TODO check if the block is signed by an autorized emitter
|
||||
if !blockchain.blockExists(msg.Block) {
|
||||
blockchain.addBlock(msg.Block)
|
||||
propagateBlock(msg.Block)
|
||||
|
||||
@@ -23,6 +23,7 @@ a future option is to put:
|
||||
type PeersList struct {
|
||||
Incoming PeersList
|
||||
Outcoming PeersList
|
||||
Network PeersList
|
||||
}
|
||||
*/
|
||||
|
||||
@@ -75,7 +76,7 @@ func searchPeerAndUpdate(p Peer) {
|
||||
}
|
||||
}
|
||||
|
||||
//send the outcomingPeersList to all the peers except the peer that has send the outcomingPeersList
|
||||
//send the outcomingPeersList to all the peers except the peer p that has send the outcomingPeersList
|
||||
func propagatePeersList(p Peer) {
|
||||
for _, peer := range networkPeersList.Peers {
|
||||
if peer.Conn != nil {
|
||||
@@ -88,7 +89,16 @@ func propagatePeersList(p Peer) {
|
||||
_, err := peer.Conn.Write(msgB)
|
||||
check(err)
|
||||
} else {
|
||||
/*
|
||||
for the moment, this is not being called, due that in the IncomingPeersList,
|
||||
there is no peer.ID, so in the comparation wih the peer that has send the
|
||||
peersList, is comparing ID with "", so nevere enters this 'else' section
|
||||
|
||||
maybe it's not needed. TODO check if it's needed the PeerList_Response
|
||||
For the moment is working without it
|
||||
*/
|
||||
//to the peer that has sent the peerList, we send our PeersList
|
||||
|
||||
var msg Msg
|
||||
msg.construct("PeersList_Response", "here my outcomingPeersList")
|
||||
msg.PeersList = outcomingPeersList
|
||||
@@ -100,6 +110,7 @@ func propagatePeersList(p Peer) {
|
||||
//connect to peer
|
||||
if peer.ID != p.ID && peer.ID != runningPeer.ID {
|
||||
if peerIsInPeersList(peer, outcomingPeersList.Peers) == -1 {
|
||||
color.Red("no connection, connecting to peer: " + peer.Port)
|
||||
connectToPeer(peer)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,9 +31,6 @@ func randInt(min int, max int) int {
|
||||
return r
|
||||
}
|
||||
func hashPeer(p Peer) string {
|
||||
/*peerJson, err := json.Marshal(p)
|
||||
check(err)
|
||||
peerString := string(peerJson)*/
|
||||
peerString := p.IP + ":" + p.Port
|
||||
|
||||
h := sha256.New()
|
||||
|
||||
Reference in New Issue
Block a user