syntax = "proto3";

option go_package = "./hodu";

//package hodu; // no idea if it's still important...

service Hodu {
	rpc GetSeed (Seed) returns (Seed) {}
	rpc PacketStream (stream Packet) returns (stream Packet) {}
}

message Seed {
	uint32 Version = 1;
	uint64 Flags = 2;
}

enum ROUTE_PROTO {
	TCP    = 0;
	TCP4   = 1;
	TCP6   = 2;
};

message RouteDesc {
	uint32      RouteId = 1;
	ROUTE_PROTO Proto = 2; 
	string      AddrStr = 3;
};

message PeerDesc {
	uint32 RouteId = 1;
	uint32 PeerId = 2;
	string RemoteAddrStr = 3;
	string LocalAddrStr = 4;
};

message PeerData {
	uint32 RouteId = 1;
	uint32 PeerId = 2;
	bytes Data = 3;
};

enum PACKET_KIND {
	ERROR         = 0; // generic error response
	OK            = 1; // generic success response
	ROUTE_START   = 2;
	ROUTE_STOP    = 3;
	ROUTE_STARTED = 4;
	ROUTE_STOPPED = 5;
	PEER_STARTED  = 6;
	PEER_STOPPED  = 7;
	PEER_ABORTED  = 8;
	PEER_EOF      = 9;
	PEER_DATA     = 10;
};

message Packet {
	PACKET_KIND  Kind = 1;

	oneof U {
		RouteDesc Route = 2;
		PeerDesc  Peer  = 3;
		PeerData  Data  = 4;
	};
}