option cc_generic_services = false;

enum ESteamDatagramMsgID {
	k_ESteamDatagramMsg_Invalid = 0;
	k_ESteamDatagramMsg_RouterPingRequest = 1;
	k_ESteamDatagramMsg_RouterPingReply = 2;
	k_ESteamDatagramMsg_GameserverPingRequest = 3;
	k_ESteamDatagramMsg_GameserverPingReply = 4;
	k_ESteamDatagramMsg_GameserverSessionRequest = 5;
	k_ESteamDatagramMsg_GameserverSessionEstablished = 6;
	k_ESteamDatagramMsg_NoSession = 7;
	k_ESteamDatagramMsg_Diagnostic = 8;
	k_ESteamDatagramMsg_DataClientToRouter = 9;
	k_ESteamDatagramMsg_DataRouterToServer = 10;
	k_ESteamDatagramMsg_DataServerToRouter = 11;
	k_ESteamDatagramMsg_DataRouterToClient = 12;
	k_ESteamDatagramMsg_Stats = 13;
	k_ESteamDatagramMsg_ClientPingSampleRequest = 14;
	k_ESteamDatagramMsg_ClientPingSampleReply = 15;
	k_ESteamDatagramMsg_ClientToRouterSwitchedPrimary = 16;
	k_ESteamDatagramMsg_RelayHealth = 17;
	k_ESteamDatagramMsg_ConnectRequest = 18;
	k_ESteamDatagramMsg_ConnectOK = 19;
	k_ESteamDatagramMsg_ConnectionClosed = 20;
	k_ESteamDatagramMsg_NoConnection = 21;
	k_ESteamDatagramMsg_RelayToRelayPingRequest = 22;
	k_ESteamDatagramMsg_RelayToRelayPingReply = 23;
	k_ESteamDatagramMsg_P2PSessionRequest = 24;
	k_ESteamDatagramMsg_P2PSessionEstablished = 25;
	k_ESteamDatagramMsg_P2PStatsClient = 26;
	k_ESteamDatagramMsg_P2PStatsRelay = 27;
	k_ESteamDatagramMsg_P2PBadRoute = 28;
}

message CMsgSteamDatagramRouterPingReply {
	message RouteException {
		optional fixed32 data_center_id = 1;
		optional uint32 flags = 2;
		optional uint32 penalty = 3;
	}

	optional fixed32 client_timestamp = 1;
	repeated fixed32 latency_datacenter_ids = 2 [packed = true];
	repeated uint32 latency_ping_ms = 3 [packed = true];
	optional fixed32 your_public_ip = 4;
	optional fixed32 server_time = 5;
	optional fixed64 challenge = 6;
	optional uint32 seconds_until_shutdown = 7;
	optional fixed32 client_cookie = 8;
	optional uint32 scoring_penalty_relay_cluster = 9;
	repeated .CMsgSteamDatagramRouterPingReply.RouteException route_exceptions = 10;
}

message CMsgSteamDatagramSessionCryptInfo {
	enum EKeyType {
		INVALID = 0;
		CURVE25519 = 1;
	}

	optional .CMsgSteamDatagramSessionCryptInfo.EKeyType key_type = 1 [default = INVALID];
	optional bytes key_data = 2;
	optional fixed64 nonce = 3;
	optional bool is_snp = 4;
}

message CMsgSteamDatagramSessionCryptInfoSigned {
	optional bytes info = 1;
	optional bytes signature = 2;
}

message CMsgSteamDatagramDiagnostic {
	optional uint32 severity = 1;
	optional string text = 2;
}

message CMsgSteamDatagramLinkInstantaneousStats {
	optional uint32 out_packets_per_sec_x10 = 1;
	optional uint32 out_bytes_per_sec = 2;
	optional uint32 in_packets_per_sec_x10 = 3;
	optional uint32 in_bytes_per_sec = 4;
	optional uint32 ping_ms = 5;
	optional uint32 packets_dropped_pct = 6;
	optional uint32 packets_weird_sequence_pct = 7;
	optional uint32 peak_jitter_usec = 8;
}

message CMsgSteamDatagramLinkLifetimeStats {
	optional uint64 packets_sent = 3;
	optional uint64 kb_sent = 4;
	optional uint64 packets_recv = 5;
	optional uint64 kb_recv = 6;
	optional uint64 packets_recv_sequenced = 7;
	optional uint64 packets_recv_dropped = 8;
	optional uint64 packets_recv_out_of_order = 9;
	optional uint64 packets_recv_duplicate = 10;
	optional uint64 packets_recv_lurch = 11;
	optional uint32 quality_histogram_100 = 21;
	optional uint32 quality_histogram_99 = 22;
	optional uint32 quality_histogram_97 = 23;
	optional uint32 quality_histogram_95 = 24;
	optional uint32 quality_histogram_90 = 25;
	optional uint32 quality_histogram_75 = 26;
	optional uint32 quality_histogram_50 = 27;
	optional uint32 quality_histogram_1 = 28;
	optional uint32 quality_histogram_dead = 29;
	optional uint32 quality_ntile_2nd = 30;
	optional uint32 quality_ntile_5th = 31;
	optional uint32 quality_ntile_25th = 32;
	optional uint32 quality_ntile_50th = 33;
	optional uint32 ping_histogram_25 = 41;
	optional uint32 ping_histogram_50 = 42;
	optional uint32 ping_histogram_75 = 43;
	optional uint32 ping_histogram_100 = 44;
	optional uint32 ping_histogram_125 = 45;
	optional uint32 ping_histogram_150 = 46;
	optional uint32 ping_histogram_200 = 47;
	optional uint32 ping_histogram_300 = 48;
	optional uint32 ping_histogram_max = 49;
	optional uint32 ping_ntile_5th = 50;
	optional uint32 ping_ntile_50th = 51;
	optional uint32 ping_ntile_75th = 52;
	optional uint32 ping_ntile_95th = 53;
	optional uint32 ping_ntile_98th = 54;
	optional uint32 jitter_histogram_negligible = 61;
	optional uint32 jitter_histogram_1 = 62;
	optional uint32 jitter_histogram_2 = 63;
	optional uint32 jitter_histogram_5 = 64;
	optional uint32 jitter_histogram_10 = 65;
	optional uint32 jitter_histogram_20 = 66;
	optional uint32 txspeed_max = 67;
	optional uint32 txspeed_histogram_16 = 68;
	optional uint32 txspeed_histogram_32 = 69;
	optional uint32 txspeed_histogram_64 = 70;
	optional uint32 txspeed_histogram_128 = 71;
	optional uint32 txspeed_histogram_256 = 72;
	optional uint32 txspeed_histogram_512 = 73;
	optional uint32 txspeed_histogram_1024 = 74;
	optional uint32 txspeed_histogram_max = 75;
	optional uint32 txspeed_ntile_5th = 76;
	optional uint32 txspeed_ntile_50th = 77;
	optional uint32 txspeed_ntile_75th = 78;
	optional uint32 txspeed_ntile_95th = 79;
	optional uint32 txspeed_ntile_98th = 80;
	optional uint32 rxspeed_max = 81;
	optional uint32 rxspeed_histogram_16 = 82;
	optional uint32 rxspeed_histogram_32 = 83;
	optional uint32 rxspeed_histogram_64 = 84;
	optional uint32 rxspeed_histogram_128 = 85;
	optional uint32 rxspeed_histogram_256 = 86;
	optional uint32 rxspeed_histogram_512 = 87;
	optional uint32 rxspeed_histogram_1024 = 88;
	optional uint32 rxspeed_histogram_max = 89;
	optional uint32 rxspeed_ntile_5th = 90;
	optional uint32 rxspeed_ntile_50th = 91;
	optional uint32 rxspeed_ntile_75th = 92;
	optional uint32 rxspeed_ntile_95th = 93;
	optional uint32 rxspeed_ntile_98th = 94;
}

message CMsgSteamDatagramConnectionQuality {
	optional .CMsgSteamDatagramLinkInstantaneousStats instantaneous = 1;
	optional .CMsgSteamDatagramLinkLifetimeStats lifetime = 2;
}

