package handshake.pb;

//import "github.com/jbenet/go-ipfs/net/mux/mux.proto";

// Handshake1 is delivered _before_ the secure channel is initialized
message Handshake1 {
  // protocolVersion determines compatibility between peers
  optional string protocolVersion = 1; // semver

  // agentVersion is like a UserAgent string in browsers, or client version in bittorrent
  // includes the client name and client. e.g.   "go-ipfs/0.1.0"
  optional string agentVersion = 2; // semver

  // we'll have more fields here later.
}

// Handshake3 is delivered _after_ the secure channel is initialized
message Handshake3 {

  // publicKey is this node's public key (which also gives its node.ID)
  // - may not need to be sent, as secure channel implies it has been sent.
  // - then again, if we change / disable secure channel, may still want it.
  // optional bytes publicKey = 1;

  // listenAddrs are the multiaddrs the sender node listens for open connections on
  repeated bytes listenAddrs = 2;

  // TODO
  // services list the services this node is running
  // repeated mux.ProtocolID services = 3;

  // we'll have more fields here later.

  // oservedAddr is the multiaddr of the remote endpoint that the sender node perceives
  // this is useful information to convey to the other side, as it helps the remote endpoint
  // determine whether its connection to the local peer goes through NAT.
  optional bytes observedAddr = 4;
}
