From e6dd1a2b3569a37758f64dbe0d673f0766534e27 Mon Sep 17 00:00:00 2001 From: jmwample Date: Thu, 10 Dec 2020 13:59:20 -0700 Subject: [PATCH 1/2] updated wrapping struct for clientToStations and added a flag to registrations for presccanned --- application/lib/registration.go | 19 +- application/main.go | 8 +- proto/signalling.proto | 29 +- proto/signalling.rs | 2057 ++++++++++++++------------- registration-api/api_test.go | 74 +- registration-api/main.go | 59 +- src/process_packet.rs | 4 +- src/signalling.rs | 2358 ++++++++++++++++--------------- 8 files changed, 2464 insertions(+), 2144 deletions(-) diff --git a/application/lib/registration.go b/application/lib/registration.go index 3d4cd392..67c97b09 100644 --- a/application/lib/registration.go +++ b/application/lib/registration.go @@ -251,7 +251,6 @@ func (reg *DecoyRegistration) GenerateClientToStation() *pb.ClientToStation { V6Support: &v6, V4Support: &v4, Transport: ®.Transport, - Flags: reg.Flags, } for (proto.Size(initProto)+AES_GCM_TAG_SIZE)%3 != 0 { @@ -261,15 +260,27 @@ func (reg *DecoyRegistration) GenerateClientToStation() *pb.ClientToStation { return initProto } -func (reg *DecoyRegistration) GenerateClientToAPI() *pb.ClientToAPI { +func (reg *DecoyRegistration) GenerateC2SWrapper() *pb.C2SWrapper { + boolHolder := true c2s := reg.GenerateClientToStation() - protoPayload := &pb.ClientToAPI{ - Secret: reg.Keys.SharedSecret, + c2s.Flags.Prescanned = &boolHolder + source := pb.RegistrationSource_DetectorPrescan + + protoPayload := &pb.C2SWrapper{ + SharedSecret: reg.Keys.SharedSecret, RegistrationPayload: c2s, + RegistrationSource: &source, } return protoPayload } +func (reg *DecoyRegistration) PreScanned() bool { + if reg == nil || reg.Flags == nil { + return false + } + return reg.Flags.GetPrescanned() +} + // PhantomIsLive - Test whether the phantom is live using // 8 syns which returns syn-acks from 99% of sites within 1 second. // see ZMap: Fast Internet-wide Scanning and Its Security Applications diff --git a/application/main.go b/application/main.go index c7cbcb60..5e8b033e 100644 --- a/application/main.go +++ b/application/main.go @@ -186,7 +186,7 @@ func get_zmq_updates(connectAddr string, regManager *cj.RegistrationManager, con if reg == nil || reg.RegistrationSource == nil { continue } - if *reg.RegistrationSource != pb.RegistrationSource_DetectorPrescan { + if !reg.PreScanned() { // New registration received over channel that requires liveness scan for the phantom liveness, response := reg.PhantomIsLive() if liveness == true { @@ -210,11 +210,11 @@ func get_zmq_updates(connectAddr string, regManager *cj.RegistrationManager, con } func tryShareRegistrationOverAPI(reg *cj.DecoyRegistration, apiEndpoint string) { - c2a := reg.GenerateClientToAPI() + c2a := reg.GenerateC2SWrapper() payload, err := proto.Marshal(c2a) if err != nil { - logger.Printf("%v failed to marshal ClientToAPI payload: %v", reg.IDString(), err) + logger.Printf("%v failed to marshal C2SWrapper payload: %v", reg.IDString(), err) return } @@ -249,7 +249,7 @@ func recieve_zmq_message(sub *zmq.Socket, regManager *cj.RegistrationManager) ([ return nil, err } - parsed := &pb.ZMQPayload{} + parsed := &pb.C2SWrapper{} err = proto.Unmarshal(msg, parsed) if err != nil { logger.Printf("Failed to unmarshall ClientToStation: %v", err) diff --git a/proto/signalling.proto b/proto/signalling.proto index 2a3c84ec..76af4505 100644 --- a/proto/signalling.proto +++ b/proto/signalling.proto @@ -133,9 +133,9 @@ enum ErrorReasonS2C { } enum TransportType { - NullTransport = 0; - MinTransport = 1; // Send a 32-byte HMAC id to let the station distinguish registrations to same host - Obfs4Transport = 2; // Not implemented yet? + Null = 0; + Min = 1; // Send a 32-byte HMAC id to let the station distinguish registrations to same host + Obfs4 = 2; // Not implemented yet? } message StationToClient { @@ -167,7 +167,8 @@ message RegistrationFlags { optional bool upload_only = 1; optional bool dark_decoy = 2; optional bool proxy_header = 3; - optional bool use_TIL = 4; + optional bool use_TIL = 4; + optional bool prescanned = 5; } message ClientToStation { @@ -216,19 +217,23 @@ message ClientToStation { optional bytes padding = 100; } -// Message type used as the request body when registering via the HTTP API. -// This message is assumed to be sent via TLS, meaning that sending the secret outright is acceptable. -message ClientToAPI { - // The secret that will be used when forming phantom connections. - optional bytes secret = 1; - // The ClientToStation payload; the same as used in decoy registrations. - optional ClientToStation registration_payload = 2; +enum RegistrationSource { + Detector = 0; + API = 1; + DetectorPrescan = 2; } -message ZMQPayload { +message C2SWrapper { optional bytes shared_secret = 1; optional ClientToStation registration_payload = 3; + optional RegistrationSource registration_source = 4; + + // client source address when receiving a registration + optional bytes registration_address = 6; + + // Decoy address used when registering over Decoy registrar + optional bytes decoy_address = 7; } message SessionStats { diff --git a/proto/signalling.rs b/proto/signalling.rs index 4ec22b3c..87de47d1 100644 --- a/proto/signalling.rs +++ b/proto/signalling.rs @@ -1,12 +1,11 @@ -// This file is generated by rust-protobuf 2.16.2. Do not edit +// This file is generated by rust-protobuf 2.6.2. Do not edit // @generated -// https://github.com/rust-lang/rust-clippy/issues/702 +// https://github.com/Manishearth/rust-clippy/issues/702 #![allow(unknown_lints)] -#![allow(clippy::all)] +#![allow(clippy)] -#![allow(unused_attributes)] -#![rustfmt::skip] +#![cfg_attr(rustfmt, rustfmt_skip)] #![allow(box_pointers)] #![allow(dead_code)] @@ -15,13 +14,12 @@ #![allow(non_snake_case)] #![allow(non_upper_case_globals)] #![allow(trivial_casts)] +#![allow(unsafe_code)] #![allow(unused_imports)] #![allow(unused_results)] -//! Generated file from `signalling.proto` -/// Generated files are compatible only with the same version -/// of protobuf runtime. -// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_16_2; +use protobuf::Message as Message_imported_for_functions; +use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions; #[derive(PartialEq,Clone,Default)] pub struct PubKey { @@ -105,7 +103,7 @@ impl ::protobuf::Message for PubKey { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -138,12 +136,12 @@ impl ::protobuf::Message for PubKey { my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { if let Some(ref v) = self.key.as_ref() { os.write_bytes(1, &v)?; } if let Some(v) = self.field_type { - os.write_enum(2, ::protobuf::ProtobufEnum::value(&v))?; + os.write_enum(2, v.value())?; } os.write_unknown_fields(self.get_unknown_fields())?; ::std::result::Result::Ok(()) @@ -161,13 +159,13 @@ impl ::protobuf::Message for PubKey { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -180,30 +178,40 @@ impl ::protobuf::Message for PubKey { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "key", - |m: &PubKey| { &m.key }, - |m: &mut PubKey| { &mut m.key }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( - "type", - |m: &PubKey| { &m.field_type }, - |m: &mut PubKey| { &mut m.field_type }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "PubKey", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "key", + |m: &PubKey| { &m.key }, + |m: &mut PubKey| { &mut m.key }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( + "type", + |m: &PubKey| { &m.field_type }, + |m: &mut PubKey| { &mut m.field_type }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "PubKey", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static PubKey { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(PubKey::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const PubKey, + }; + unsafe { + instance.get(PubKey::new) + } } } @@ -216,14 +224,14 @@ impl ::protobuf::Clear for PubKey { } impl ::std::fmt::Debug for PubKey { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for PubKey { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } @@ -233,7 +241,7 @@ pub struct TLSDecoySpec { hostname: ::protobuf::SingularField<::std::string::String>, ipv4addr: ::std::option::Option, ipv6addr: ::protobuf::SingularField<::std::vec::Vec>, - pub pubkey: ::protobuf::SingularPtrField, + pubkey: ::protobuf::SingularPtrField, timeout: ::std::option::Option, tcpwin: ::std::option::Option, // special fields @@ -347,7 +355,7 @@ impl TLSDecoySpec { pub fn get_pubkey(&self) -> &PubKey { - self.pubkey.as_ref().unwrap_or_else(|| ::default_instance()) + self.pubkey.as_ref().unwrap_or_else(|| PubKey::default_instance()) } pub fn clear_pubkey(&mut self) { self.pubkey.clear(); @@ -425,7 +433,7 @@ impl ::protobuf::Message for TLSDecoySpec { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -495,7 +503,7 @@ impl ::protobuf::Message for TLSDecoySpec { my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { if let Some(ref v) = self.hostname.as_ref() { os.write_string(1, &v)?; } @@ -532,13 +540,13 @@ impl ::protobuf::Message for TLSDecoySpec { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -551,50 +559,60 @@ impl ::protobuf::Message for TLSDecoySpec { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( - "hostname", - |m: &TLSDecoySpec| { &m.hostname }, - |m: &mut TLSDecoySpec| { &mut m.hostname }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeFixed32>( - "ipv4addr", - |m: &TLSDecoySpec| { &m.ipv4addr }, - |m: &mut TLSDecoySpec| { &mut m.ipv4addr }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "ipv6addr", - |m: &TLSDecoySpec| { &m.ipv6addr }, - |m: &mut TLSDecoySpec| { &mut m.ipv6addr }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "pubkey", - |m: &TLSDecoySpec| { &m.pubkey }, - |m: &mut TLSDecoySpec| { &mut m.pubkey }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "timeout", - |m: &TLSDecoySpec| { &m.timeout }, - |m: &mut TLSDecoySpec| { &mut m.timeout }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "tcpwin", - |m: &TLSDecoySpec| { &m.tcpwin }, - |m: &mut TLSDecoySpec| { &mut m.tcpwin }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "TLSDecoySpec", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( + "hostname", + |m: &TLSDecoySpec| { &m.hostname }, + |m: &mut TLSDecoySpec| { &mut m.hostname }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeFixed32>( + "ipv4addr", + |m: &TLSDecoySpec| { &m.ipv4addr }, + |m: &mut TLSDecoySpec| { &mut m.ipv4addr }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "ipv6addr", + |m: &TLSDecoySpec| { &m.ipv6addr }, + |m: &mut TLSDecoySpec| { &mut m.ipv6addr }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "pubkey", + |m: &TLSDecoySpec| { &m.pubkey }, + |m: &mut TLSDecoySpec| { &mut m.pubkey }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "timeout", + |m: &TLSDecoySpec| { &m.timeout }, + |m: &mut TLSDecoySpec| { &mut m.timeout }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "tcpwin", + |m: &TLSDecoySpec| { &m.tcpwin }, + |m: &mut TLSDecoySpec| { &mut m.tcpwin }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "TLSDecoySpec", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static TLSDecoySpec { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(TLSDecoySpec::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const TLSDecoySpec, + }; + unsafe { + instance.get(TLSDecoySpec::new) + } } } @@ -611,25 +629,25 @@ impl ::protobuf::Clear for TLSDecoySpec { } impl ::std::fmt::Debug for TLSDecoySpec { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for TLSDecoySpec { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } #[derive(PartialEq,Clone,Default)] pub struct ClientConf { // message fields - pub decoy_list: ::protobuf::SingularPtrField, + decoy_list: ::protobuf::SingularPtrField, generation: ::std::option::Option, - pub default_pubkey: ::protobuf::SingularPtrField, - pub dark_decoy_blocks: ::protobuf::SingularPtrField, - pub conjure_pubkey: ::protobuf::SingularPtrField, + default_pubkey: ::protobuf::SingularPtrField, + dark_decoy_blocks: ::protobuf::SingularPtrField, + conjure_pubkey: ::protobuf::SingularPtrField, // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, @@ -650,7 +668,7 @@ impl ClientConf { pub fn get_decoy_list(&self) -> &DecoyList { - self.decoy_list.as_ref().unwrap_or_else(|| ::default_instance()) + self.decoy_list.as_ref().unwrap_or_else(|| DecoyList::default_instance()) } pub fn clear_decoy_list(&mut self) { self.decoy_list.clear(); @@ -702,7 +720,7 @@ impl ClientConf { pub fn get_default_pubkey(&self) -> &PubKey { - self.default_pubkey.as_ref().unwrap_or_else(|| ::default_instance()) + self.default_pubkey.as_ref().unwrap_or_else(|| PubKey::default_instance()) } pub fn clear_default_pubkey(&mut self) { self.default_pubkey.clear(); @@ -735,7 +753,7 @@ impl ClientConf { pub fn get_dark_decoy_blocks(&self) -> &DarkDecoyBlocks { - self.dark_decoy_blocks.as_ref().unwrap_or_else(|| ::default_instance()) + self.dark_decoy_blocks.as_ref().unwrap_or_else(|| DarkDecoyBlocks::default_instance()) } pub fn clear_dark_decoy_blocks(&mut self) { self.dark_decoy_blocks.clear(); @@ -768,7 +786,7 @@ impl ClientConf { pub fn get_conjure_pubkey(&self) -> &PubKey { - self.conjure_pubkey.as_ref().unwrap_or_else(|| ::default_instance()) + self.conjure_pubkey.as_ref().unwrap_or_else(|| PubKey::default_instance()) } pub fn clear_conjure_pubkey(&mut self) { self.conjure_pubkey.clear(); @@ -823,7 +841,7 @@ impl ::protobuf::Message for ClientConf { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -882,7 +900,7 @@ impl ::protobuf::Message for ClientConf { my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { if let Some(ref v) = self.decoy_list.as_ref() { os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?; os.write_raw_varint32(v.get_cached_size())?; @@ -922,13 +940,13 @@ impl ::protobuf::Message for ClientConf { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -941,45 +959,55 @@ impl ::protobuf::Message for ClientConf { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "decoy_list", - |m: &ClientConf| { &m.decoy_list }, - |m: &mut ClientConf| { &mut m.decoy_list }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "generation", - |m: &ClientConf| { &m.generation }, - |m: &mut ClientConf| { &mut m.generation }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "default_pubkey", - |m: &ClientConf| { &m.default_pubkey }, - |m: &mut ClientConf| { &mut m.default_pubkey }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "dark_decoy_blocks", - |m: &ClientConf| { &m.dark_decoy_blocks }, - |m: &mut ClientConf| { &mut m.dark_decoy_blocks }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "conjure_pubkey", - |m: &ClientConf| { &m.conjure_pubkey }, - |m: &mut ClientConf| { &mut m.conjure_pubkey }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "ClientConf", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "decoy_list", + |m: &ClientConf| { &m.decoy_list }, + |m: &mut ClientConf| { &mut m.decoy_list }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "generation", + |m: &ClientConf| { &m.generation }, + |m: &mut ClientConf| { &mut m.generation }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "default_pubkey", + |m: &ClientConf| { &m.default_pubkey }, + |m: &mut ClientConf| { &mut m.default_pubkey }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "dark_decoy_blocks", + |m: &ClientConf| { &m.dark_decoy_blocks }, + |m: &mut ClientConf| { &mut m.dark_decoy_blocks }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "conjure_pubkey", + |m: &ClientConf| { &m.conjure_pubkey }, + |m: &mut ClientConf| { &mut m.conjure_pubkey }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "ClientConf", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static ClientConf { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(ClientConf::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ClientConf, + }; + unsafe { + instance.get(ClientConf::new) + } } } @@ -995,21 +1023,21 @@ impl ::protobuf::Clear for ClientConf { } impl ::std::fmt::Debug for ClientConf { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for ClientConf { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } #[derive(PartialEq,Clone,Default)] pub struct DecoyList { // message fields - pub tls_decoys: ::protobuf::RepeatedField, + tls_decoys: ::protobuf::RepeatedField, // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, @@ -1062,7 +1090,7 @@ impl ::protobuf::Message for DecoyList { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -1090,7 +1118,7 @@ impl ::protobuf::Message for DecoyList { my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { for v in &self.tls_decoys { os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?; os.write_raw_varint32(v.get_cached_size())?; @@ -1112,13 +1140,13 @@ impl ::protobuf::Message for DecoyList { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -1131,25 +1159,35 @@ impl ::protobuf::Message for DecoyList { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "tls_decoys", - |m: &DecoyList| { &m.tls_decoys }, - |m: &mut DecoyList| { &mut m.tls_decoys }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "DecoyList", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "tls_decoys", + |m: &DecoyList| { &m.tls_decoys }, + |m: &mut DecoyList| { &mut m.tls_decoys }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "DecoyList", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static DecoyList { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(DecoyList::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const DecoyList, + }; + unsafe { + instance.get(DecoyList::new) + } } } @@ -1161,21 +1199,21 @@ impl ::protobuf::Clear for DecoyList { } impl ::std::fmt::Debug for DecoyList { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for DecoyList { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } #[derive(PartialEq,Clone,Default)] pub struct DarkDecoyBlocks { // message fields - pub blocks: ::protobuf::RepeatedField<::std::string::String>, + blocks: ::protobuf::RepeatedField<::std::string::String>, // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, @@ -1223,7 +1261,7 @@ impl ::protobuf::Message for DarkDecoyBlocks { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -1250,7 +1288,7 @@ impl ::protobuf::Message for DarkDecoyBlocks { my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { for v in &self.blocks { os.write_string(1, &v)?; }; @@ -1270,13 +1308,13 @@ impl ::protobuf::Message for DarkDecoyBlocks { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -1289,25 +1327,35 @@ impl ::protobuf::Message for DarkDecoyBlocks { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( - "blocks", - |m: &DarkDecoyBlocks| { &m.blocks }, - |m: &mut DarkDecoyBlocks| { &mut m.blocks }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "DarkDecoyBlocks", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( + "blocks", + |m: &DarkDecoyBlocks| { &m.blocks }, + |m: &mut DarkDecoyBlocks| { &mut m.blocks }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "DarkDecoyBlocks", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static DarkDecoyBlocks { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(DarkDecoyBlocks::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const DarkDecoyBlocks, + }; + unsafe { + instance.get(DarkDecoyBlocks::new) + } } } @@ -1319,14 +1367,14 @@ impl ::protobuf::Clear for DarkDecoyBlocks { } impl ::std::fmt::Debug for DarkDecoyBlocks { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for DarkDecoyBlocks { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } @@ -1335,7 +1383,7 @@ pub struct StationToClient { // message fields protocol_version: ::std::option::Option, state_transition: ::std::option::Option, - pub config_info: ::protobuf::SingularPtrField, + config_info: ::protobuf::SingularPtrField, err_reason: ::std::option::Option, tmp_backoff: ::std::option::Option, station_id: ::protobuf::SingularField<::std::string::String>, @@ -1398,7 +1446,7 @@ impl StationToClient { pub fn get_config_info(&self) -> &ClientConf { - self.config_info.as_ref().unwrap_or_else(|| ::default_instance()) + self.config_info.as_ref().unwrap_or_else(|| ClientConf::default_instance()) } pub fn clear_config_info(&mut self) { self.config_info.clear(); @@ -1548,7 +1596,7 @@ impl ::protobuf::Message for StationToClient { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -1620,12 +1668,12 @@ impl ::protobuf::Message for StationToClient { my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { if let Some(v) = self.protocol_version { os.write_uint32(1, v)?; } if let Some(v) = self.state_transition { - os.write_enum(2, ::protobuf::ProtobufEnum::value(&v))?; + os.write_enum(2, v.value())?; } if let Some(ref v) = self.config_info.as_ref() { os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?; @@ -1633,7 +1681,7 @@ impl ::protobuf::Message for StationToClient { v.write_to_with_cached_sizes(os)?; } if let Some(v) = self.err_reason { - os.write_enum(4, ::protobuf::ProtobufEnum::value(&v))?; + os.write_enum(4, v.value())?; } if let Some(v) = self.tmp_backoff { os.write_uint32(5, v)?; @@ -1660,13 +1708,13 @@ impl ::protobuf::Message for StationToClient { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -1679,55 +1727,65 @@ impl ::protobuf::Message for StationToClient { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "protocol_version", - |m: &StationToClient| { &m.protocol_version }, - |m: &mut StationToClient| { &mut m.protocol_version }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( - "state_transition", - |m: &StationToClient| { &m.state_transition }, - |m: &mut StationToClient| { &mut m.state_transition }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "config_info", - |m: &StationToClient| { &m.config_info }, - |m: &mut StationToClient| { &mut m.config_info }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( - "err_reason", - |m: &StationToClient| { &m.err_reason }, - |m: &mut StationToClient| { &mut m.err_reason }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "tmp_backoff", - |m: &StationToClient| { &m.tmp_backoff }, - |m: &mut StationToClient| { &mut m.tmp_backoff }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( - "station_id", - |m: &StationToClient| { &m.station_id }, - |m: &mut StationToClient| { &mut m.station_id }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "padding", - |m: &StationToClient| { &m.padding }, - |m: &mut StationToClient| { &mut m.padding }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "StationToClient", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "protocol_version", + |m: &StationToClient| { &m.protocol_version }, + |m: &mut StationToClient| { &mut m.protocol_version }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( + "state_transition", + |m: &StationToClient| { &m.state_transition }, + |m: &mut StationToClient| { &mut m.state_transition }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "config_info", + |m: &StationToClient| { &m.config_info }, + |m: &mut StationToClient| { &mut m.config_info }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( + "err_reason", + |m: &StationToClient| { &m.err_reason }, + |m: &mut StationToClient| { &mut m.err_reason }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "tmp_backoff", + |m: &StationToClient| { &m.tmp_backoff }, + |m: &mut StationToClient| { &mut m.tmp_backoff }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( + "station_id", + |m: &StationToClient| { &m.station_id }, + |m: &mut StationToClient| { &mut m.station_id }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "padding", + |m: &StationToClient| { &m.padding }, + |m: &mut StationToClient| { &mut m.padding }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "StationToClient", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static StationToClient { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(StationToClient::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const StationToClient, + }; + unsafe { + instance.get(StationToClient::new) + } } } @@ -1745,14 +1803,14 @@ impl ::protobuf::Clear for StationToClient { } impl ::std::fmt::Debug for StationToClient { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for StationToClient { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } @@ -1763,6 +1821,7 @@ pub struct RegistrationFlags { dark_decoy: ::std::option::Option, proxy_header: ::std::option::Option, use_TIL: ::std::option::Option, + prescanned: ::std::option::Option, // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, @@ -1854,6 +1913,25 @@ impl RegistrationFlags { pub fn set_use_TIL(&mut self, v: bool) { self.use_TIL = ::std::option::Option::Some(v); } + + // optional bool prescanned = 5; + + + pub fn get_prescanned(&self) -> bool { + self.prescanned.unwrap_or(false) + } + pub fn clear_prescanned(&mut self) { + self.prescanned = ::std::option::Option::None; + } + + pub fn has_prescanned(&self) -> bool { + self.prescanned.is_some() + } + + // Param is passed by value, moved + pub fn set_prescanned(&mut self, v: bool) { + self.prescanned = ::std::option::Option::Some(v); + } } impl ::protobuf::Message for RegistrationFlags { @@ -1861,7 +1939,7 @@ impl ::protobuf::Message for RegistrationFlags { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -1893,6 +1971,13 @@ impl ::protobuf::Message for RegistrationFlags { let tmp = is.read_bool()?; self.use_TIL = ::std::option::Option::Some(tmp); }, + 5 => { + if wire_type != ::protobuf::wire_format::WireTypeVarint { + return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.prescanned = ::std::option::Option::Some(tmp); + }, _ => { ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; }, @@ -1917,12 +2002,15 @@ impl ::protobuf::Message for RegistrationFlags { if let Some(v) = self.use_TIL { my_size += 2; } + if let Some(v) = self.prescanned { + my_size += 2; + } my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); self.cached_size.set(my_size); my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { if let Some(v) = self.upload_only { os.write_bool(1, v)?; } @@ -1935,6 +2023,9 @@ impl ::protobuf::Message for RegistrationFlags { if let Some(v) = self.use_TIL { os.write_bool(4, v)?; } + if let Some(v) = self.prescanned { + os.write_bool(5, v)?; + } os.write_unknown_fields(self.get_unknown_fields())?; ::std::result::Result::Ok(()) } @@ -1951,13 +2042,13 @@ impl ::protobuf::Message for RegistrationFlags { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -1970,40 +2061,55 @@ impl ::protobuf::Message for RegistrationFlags { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( - "upload_only", - |m: &RegistrationFlags| { &m.upload_only }, - |m: &mut RegistrationFlags| { &mut m.upload_only }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( - "dark_decoy", - |m: &RegistrationFlags| { &m.dark_decoy }, - |m: &mut RegistrationFlags| { &mut m.dark_decoy }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( - "proxy_header", - |m: &RegistrationFlags| { &m.proxy_header }, - |m: &mut RegistrationFlags| { &mut m.proxy_header }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( - "use_TIL", - |m: &RegistrationFlags| { &m.use_TIL }, - |m: &mut RegistrationFlags| { &mut m.use_TIL }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "RegistrationFlags", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( + "upload_only", + |m: &RegistrationFlags| { &m.upload_only }, + |m: &mut RegistrationFlags| { &mut m.upload_only }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( + "dark_decoy", + |m: &RegistrationFlags| { &m.dark_decoy }, + |m: &mut RegistrationFlags| { &mut m.dark_decoy }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( + "proxy_header", + |m: &RegistrationFlags| { &m.proxy_header }, + |m: &mut RegistrationFlags| { &mut m.proxy_header }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( + "use_TIL", + |m: &RegistrationFlags| { &m.use_TIL }, + |m: &mut RegistrationFlags| { &mut m.use_TIL }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( + "prescanned", + |m: &RegistrationFlags| { &m.prescanned }, + |m: &mut RegistrationFlags| { &mut m.prescanned }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "RegistrationFlags", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static RegistrationFlags { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(RegistrationFlags::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const RegistrationFlags, + }; + unsafe { + instance.get(RegistrationFlags::new) + } } } @@ -2013,19 +2119,20 @@ impl ::protobuf::Clear for RegistrationFlags { self.dark_decoy = ::std::option::Option::None; self.proxy_header = ::std::option::Option::None; self.use_TIL = ::std::option::Option::None; + self.prescanned = ::std::option::Option::None; self.unknown_fields.clear(); } } impl ::std::fmt::Debug for RegistrationFlags { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for RegistrationFlags { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } @@ -2036,14 +2143,14 @@ pub struct ClientToStation { decoy_list_generation: ::std::option::Option, state_transition: ::std::option::Option, upload_sync: ::std::option::Option, - pub failed_decoys: ::protobuf::RepeatedField<::std::string::String>, - pub stats: ::protobuf::SingularPtrField, + failed_decoys: ::protobuf::RepeatedField<::std::string::String>, + stats: ::protobuf::SingularPtrField, transport: ::std::option::Option, covert_address: ::protobuf::SingularField<::std::string::String>, masked_decoy_server_name: ::protobuf::SingularField<::std::string::String>, v6_support: ::std::option::Option, v4_support: ::std::option::Option, - pub flags: ::protobuf::SingularPtrField, + flags: ::protobuf::SingularPtrField, padding: ::protobuf::SingularField<::std::vec::Vec>, // special fields pub unknown_fields: ::protobuf::UnknownFields, @@ -2166,7 +2273,7 @@ impl ClientToStation { pub fn get_stats(&self) -> &SessionStats { - self.stats.as_ref().unwrap_or_else(|| ::default_instance()) + self.stats.as_ref().unwrap_or_else(|| SessionStats::default_instance()) } pub fn clear_stats(&mut self) { self.stats.clear(); @@ -2199,7 +2306,7 @@ impl ClientToStation { pub fn get_transport(&self) -> TransportType { - self.transport.unwrap_or(TransportType::NullTransport) + self.transport.unwrap_or(TransportType::Null) } pub fn clear_transport(&mut self) { self.transport = ::std::option::Option::None; @@ -2328,7 +2435,7 @@ impl ClientToStation { pub fn get_flags(&self) -> &RegistrationFlags { - self.flags.as_ref().unwrap_or_else(|| ::default_instance()) + self.flags.as_ref().unwrap_or_else(|| RegistrationFlags::default_instance()) } pub fn clear_flags(&mut self) { self.flags.clear(); @@ -2409,7 +2516,7 @@ impl ::protobuf::Message for ClientToStation { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -2530,7 +2637,7 @@ impl ::protobuf::Message for ClientToStation { my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { if let Some(v) = self.protocol_version { os.write_uint32(1, v)?; } @@ -2538,7 +2645,7 @@ impl ::protobuf::Message for ClientToStation { os.write_uint32(2, v)?; } if let Some(v) = self.state_transition { - os.write_enum(3, ::protobuf::ProtobufEnum::value(&v))?; + os.write_enum(3, v.value())?; } if let Some(v) = self.upload_sync { os.write_uint64(4, v)?; @@ -2552,7 +2659,7 @@ impl ::protobuf::Message for ClientToStation { v.write_to_with_cached_sizes(os)?; } if let Some(v) = self.transport { - os.write_enum(12, ::protobuf::ProtobufEnum::value(&v))?; + os.write_enum(12, v.value())?; } if let Some(ref v) = self.covert_address.as_ref() { os.write_string(20, &v)?; @@ -2590,13 +2697,13 @@ impl ::protobuf::Message for ClientToStation { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -2609,85 +2716,95 @@ impl ::protobuf::Message for ClientToStation { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "protocol_version", - |m: &ClientToStation| { &m.protocol_version }, - |m: &mut ClientToStation| { &mut m.protocol_version }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "decoy_list_generation", - |m: &ClientToStation| { &m.decoy_list_generation }, - |m: &mut ClientToStation| { &mut m.decoy_list_generation }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( - "state_transition", - |m: &ClientToStation| { &m.state_transition }, - |m: &mut ClientToStation| { &mut m.state_transition }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint64>( - "upload_sync", - |m: &ClientToStation| { &m.upload_sync }, - |m: &mut ClientToStation| { &mut m.upload_sync }, - )); - fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( - "failed_decoys", - |m: &ClientToStation| { &m.failed_decoys }, - |m: &mut ClientToStation| { &mut m.failed_decoys }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "stats", - |m: &ClientToStation| { &m.stats }, - |m: &mut ClientToStation| { &mut m.stats }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( - "transport", - |m: &ClientToStation| { &m.transport }, - |m: &mut ClientToStation| { &mut m.transport }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( - "covert_address", - |m: &ClientToStation| { &m.covert_address }, - |m: &mut ClientToStation| { &mut m.covert_address }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( - "masked_decoy_server_name", - |m: &ClientToStation| { &m.masked_decoy_server_name }, - |m: &mut ClientToStation| { &mut m.masked_decoy_server_name }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( - "v6_support", - |m: &ClientToStation| { &m.v6_support }, - |m: &mut ClientToStation| { &mut m.v6_support }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( - "v4_support", - |m: &ClientToStation| { &m.v4_support }, - |m: &mut ClientToStation| { &mut m.v4_support }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "flags", - |m: &ClientToStation| { &m.flags }, - |m: &mut ClientToStation| { &mut m.flags }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "padding", - |m: &ClientToStation| { &m.padding }, - |m: &mut ClientToStation| { &mut m.padding }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "ClientToStation", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "protocol_version", + |m: &ClientToStation| { &m.protocol_version }, + |m: &mut ClientToStation| { &mut m.protocol_version }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "decoy_list_generation", + |m: &ClientToStation| { &m.decoy_list_generation }, + |m: &mut ClientToStation| { &mut m.decoy_list_generation }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( + "state_transition", + |m: &ClientToStation| { &m.state_transition }, + |m: &mut ClientToStation| { &mut m.state_transition }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint64>( + "upload_sync", + |m: &ClientToStation| { &m.upload_sync }, + |m: &mut ClientToStation| { &mut m.upload_sync }, + )); + fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( + "failed_decoys", + |m: &ClientToStation| { &m.failed_decoys }, + |m: &mut ClientToStation| { &mut m.failed_decoys }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "stats", + |m: &ClientToStation| { &m.stats }, + |m: &mut ClientToStation| { &mut m.stats }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( + "transport", + |m: &ClientToStation| { &m.transport }, + |m: &mut ClientToStation| { &mut m.transport }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( + "covert_address", + |m: &ClientToStation| { &m.covert_address }, + |m: &mut ClientToStation| { &mut m.covert_address }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( + "masked_decoy_server_name", + |m: &ClientToStation| { &m.masked_decoy_server_name }, + |m: &mut ClientToStation| { &mut m.masked_decoy_server_name }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( + "v6_support", + |m: &ClientToStation| { &m.v6_support }, + |m: &mut ClientToStation| { &mut m.v6_support }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( + "v4_support", + |m: &ClientToStation| { &m.v4_support }, + |m: &mut ClientToStation| { &mut m.v4_support }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "flags", + |m: &ClientToStation| { &m.flags }, + |m: &mut ClientToStation| { &mut m.flags }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "padding", + |m: &ClientToStation| { &m.padding }, + |m: &mut ClientToStation| { &mut m.padding }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "ClientToStation", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static ClientToStation { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(ClientToStation::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ClientToStation, + }; + unsafe { + instance.get(ClientToStation::new) + } } } @@ -2711,79 +2828,82 @@ impl ::protobuf::Clear for ClientToStation { } impl ::std::fmt::Debug for ClientToStation { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for ClientToStation { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } #[derive(PartialEq,Clone,Default)] -pub struct ClientToAPI { +pub struct C2SWrapper { // message fields - secret: ::protobuf::SingularField<::std::vec::Vec>, - pub registration_payload: ::protobuf::SingularPtrField, + shared_secret: ::protobuf::SingularField<::std::vec::Vec>, + registration_payload: ::protobuf::SingularPtrField, + registration_source: ::std::option::Option, + registration_address: ::protobuf::SingularField<::std::vec::Vec>, + decoy_address: ::protobuf::SingularField<::std::vec::Vec>, // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, } -impl<'a> ::std::default::Default for &'a ClientToAPI { - fn default() -> &'a ClientToAPI { - ::default_instance() +impl<'a> ::std::default::Default for &'a C2SWrapper { + fn default() -> &'a C2SWrapper { + ::default_instance() } } -impl ClientToAPI { - pub fn new() -> ClientToAPI { +impl C2SWrapper { + pub fn new() -> C2SWrapper { ::std::default::Default::default() } - // optional bytes secret = 1; + // optional bytes shared_secret = 1; - pub fn get_secret(&self) -> &[u8] { - match self.secret.as_ref() { + pub fn get_shared_secret(&self) -> &[u8] { + match self.shared_secret.as_ref() { Some(v) => &v, None => &[], } } - pub fn clear_secret(&mut self) { - self.secret.clear(); + pub fn clear_shared_secret(&mut self) { + self.shared_secret.clear(); } - pub fn has_secret(&self) -> bool { - self.secret.is_some() + pub fn has_shared_secret(&self) -> bool { + self.shared_secret.is_some() } // Param is passed by value, moved - pub fn set_secret(&mut self, v: ::std::vec::Vec) { - self.secret = ::protobuf::SingularField::some(v); + pub fn set_shared_secret(&mut self, v: ::std::vec::Vec) { + self.shared_secret = ::protobuf::SingularField::some(v); } // Mutable pointer to the field. // If field is not initialized, it is initialized with default value first. - pub fn mut_secret(&mut self) -> &mut ::std::vec::Vec { - if self.secret.is_none() { - self.secret.set_default(); + pub fn mut_shared_secret(&mut self) -> &mut ::std::vec::Vec { + if self.shared_secret.is_none() { + self.shared_secret.set_default(); } - self.secret.as_mut().unwrap() + self.shared_secret.as_mut().unwrap() } // Take field - pub fn take_secret(&mut self) -> ::std::vec::Vec { - self.secret.take().unwrap_or_else(|| ::std::vec::Vec::new()) + pub fn take_shared_secret(&mut self) -> ::std::vec::Vec { + self.shared_secret.take().unwrap_or_else(|| ::std::vec::Vec::new()) } - // optional .tapdance.ClientToStation registration_payload = 2; + // optional .tapdance.ClientToStation registration_payload = 3; pub fn get_registration_payload(&self) -> &ClientToStation { - self.registration_payload.as_ref().unwrap_or_else(|| ::default_instance()) + self.registration_payload.as_ref().unwrap_or_else(|| ClientToStation::default_instance()) } pub fn clear_registration_payload(&mut self) { self.registration_payload.clear(); @@ -2811,235 +2931,100 @@ impl ClientToAPI { pub fn take_registration_payload(&mut self) -> ClientToStation { self.registration_payload.take().unwrap_or_else(|| ClientToStation::new()) } -} - -impl ::protobuf::Message for ClientToAPI { - fn is_initialized(&self) -> bool { - for v in &self.registration_payload { - if !v.is_initialized() { - return false; - } - }; - true - } - - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { - while !is.eof()? { - let (field_number, wire_type) = is.read_tag_unpack()?; - match field_number { - 1 => { - ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.secret)?; - }, - 2 => { - ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.registration_payload)?; - }, - _ => { - ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; - }, - }; - } - ::std::result::Result::Ok(()) - } - - // Compute sizes of nested messages - #[allow(unused_variables)] - fn compute_size(&self) -> u32 { - let mut my_size = 0; - if let Some(ref v) = self.secret.as_ref() { - my_size += ::protobuf::rt::bytes_size(1, &v); - } - if let Some(ref v) = self.registration_payload.as_ref() { - let len = v.compute_size(); - my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len; - } - my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); - self.cached_size.set(my_size); - my_size - } - - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { - if let Some(ref v) = self.secret.as_ref() { - os.write_bytes(1, &v)?; - } - if let Some(ref v) = self.registration_payload.as_ref() { - os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?; - os.write_raw_varint32(v.get_cached_size())?; - v.write_to_with_cached_sizes(os)?; - } - os.write_unknown_fields(self.get_unknown_fields())?; - ::std::result::Result::Ok(()) - } - - fn get_cached_size(&self) -> u32 { - self.cached_size.get() - } - - fn get_unknown_fields(&self) -> &::protobuf::UnknownFields { - &self.unknown_fields - } - - fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields { - &mut self.unknown_fields - } - - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) - } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) - } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { - self - } - - fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor { - Self::descriptor_static() - } - - fn new() -> ClientToAPI { - ClientToAPI::new() - } - fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "secret", - |m: &ClientToAPI| { &m.secret }, - |m: &mut ClientToAPI| { &mut m.secret }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "registration_payload", - |m: &ClientToAPI| { &m.registration_payload }, - |m: &mut ClientToAPI| { &mut m.registration_payload }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "ClientToAPI", - fields, - file_descriptor_proto() - ) - }) - } + // optional .tapdance.RegistrationSource registration_source = 4; - fn default_instance() -> &'static ClientToAPI { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(ClientToAPI::new) - } -} - -impl ::protobuf::Clear for ClientToAPI { - fn clear(&mut self) { - self.secret.clear(); - self.registration_payload.clear(); - self.unknown_fields.clear(); - } -} -impl ::std::fmt::Debug for ClientToAPI { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { - ::protobuf::text_format::fmt(self, f) + pub fn get_registration_source(&self) -> RegistrationSource { + self.registration_source.unwrap_or(RegistrationSource::Detector) } -} - -impl ::protobuf::reflect::ProtobufValue for ClientToAPI { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + pub fn clear_registration_source(&mut self) { + self.registration_source = ::std::option::Option::None; } -} - -#[derive(PartialEq,Clone,Default)] -pub struct ZMQPayload { - // message fields - shared_secret: ::protobuf::SingularField<::std::vec::Vec>, - pub registration_payload: ::protobuf::SingularPtrField, - // special fields - pub unknown_fields: ::protobuf::UnknownFields, - pub cached_size: ::protobuf::CachedSize, -} -impl<'a> ::std::default::Default for &'a ZMQPayload { - fn default() -> &'a ZMQPayload { - ::default_instance() + pub fn has_registration_source(&self) -> bool { + self.registration_source.is_some() } -} -impl ZMQPayload { - pub fn new() -> ZMQPayload { - ::std::default::Default::default() + // Param is passed by value, moved + pub fn set_registration_source(&mut self, v: RegistrationSource) { + self.registration_source = ::std::option::Option::Some(v); } - // optional bytes shared_secret = 1; + // optional bytes registration_address = 6; - pub fn get_shared_secret(&self) -> &[u8] { - match self.shared_secret.as_ref() { + pub fn get_registration_address(&self) -> &[u8] { + match self.registration_address.as_ref() { Some(v) => &v, None => &[], } } - pub fn clear_shared_secret(&mut self) { - self.shared_secret.clear(); + pub fn clear_registration_address(&mut self) { + self.registration_address.clear(); } - pub fn has_shared_secret(&self) -> bool { - self.shared_secret.is_some() + pub fn has_registration_address(&self) -> bool { + self.registration_address.is_some() } // Param is passed by value, moved - pub fn set_shared_secret(&mut self, v: ::std::vec::Vec) { - self.shared_secret = ::protobuf::SingularField::some(v); + pub fn set_registration_address(&mut self, v: ::std::vec::Vec) { + self.registration_address = ::protobuf::SingularField::some(v); } // Mutable pointer to the field. // If field is not initialized, it is initialized with default value first. - pub fn mut_shared_secret(&mut self) -> &mut ::std::vec::Vec { - if self.shared_secret.is_none() { - self.shared_secret.set_default(); + pub fn mut_registration_address(&mut self) -> &mut ::std::vec::Vec { + if self.registration_address.is_none() { + self.registration_address.set_default(); } - self.shared_secret.as_mut().unwrap() + self.registration_address.as_mut().unwrap() } // Take field - pub fn take_shared_secret(&mut self) -> ::std::vec::Vec { - self.shared_secret.take().unwrap_or_else(|| ::std::vec::Vec::new()) + pub fn take_registration_address(&mut self) -> ::std::vec::Vec { + self.registration_address.take().unwrap_or_else(|| ::std::vec::Vec::new()) } - // optional .tapdance.ClientToStation registration_payload = 3; + // optional bytes decoy_address = 7; - pub fn get_registration_payload(&self) -> &ClientToStation { - self.registration_payload.as_ref().unwrap_or_else(|| ::default_instance()) + pub fn get_decoy_address(&self) -> &[u8] { + match self.decoy_address.as_ref() { + Some(v) => &v, + None => &[], + } } - pub fn clear_registration_payload(&mut self) { - self.registration_payload.clear(); + pub fn clear_decoy_address(&mut self) { + self.decoy_address.clear(); } - pub fn has_registration_payload(&self) -> bool { - self.registration_payload.is_some() + pub fn has_decoy_address(&self) -> bool { + self.decoy_address.is_some() } // Param is passed by value, moved - pub fn set_registration_payload(&mut self, v: ClientToStation) { - self.registration_payload = ::protobuf::SingularPtrField::some(v); + pub fn set_decoy_address(&mut self, v: ::std::vec::Vec) { + self.decoy_address = ::protobuf::SingularField::some(v); } // Mutable pointer to the field. // If field is not initialized, it is initialized with default value first. - pub fn mut_registration_payload(&mut self) -> &mut ClientToStation { - if self.registration_payload.is_none() { - self.registration_payload.set_default(); + pub fn mut_decoy_address(&mut self) -> &mut ::std::vec::Vec { + if self.decoy_address.is_none() { + self.decoy_address.set_default(); } - self.registration_payload.as_mut().unwrap() + self.decoy_address.as_mut().unwrap() } // Take field - pub fn take_registration_payload(&mut self) -> ClientToStation { - self.registration_payload.take().unwrap_or_else(|| ClientToStation::new()) + pub fn take_decoy_address(&mut self) -> ::std::vec::Vec { + self.decoy_address.take().unwrap_or_else(|| ::std::vec::Vec::new()) } } -impl ::protobuf::Message for ZMQPayload { +impl ::protobuf::Message for C2SWrapper { fn is_initialized(&self) -> bool { for v in &self.registration_payload { if !v.is_initialized() { @@ -3049,7 +3034,7 @@ impl ::protobuf::Message for ZMQPayload { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -3059,6 +3044,15 @@ impl ::protobuf::Message for ZMQPayload { 3 => { ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.registration_payload)?; }, + 4 => { + ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(wire_type, is, &mut self.registration_source, 4, &mut self.unknown_fields)? + }, + 6 => { + ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.registration_address)?; + }, + 7 => { + ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.decoy_address)?; + }, _ => { ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; }, @@ -3078,12 +3072,21 @@ impl ::protobuf::Message for ZMQPayload { let len = v.compute_size(); my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len; } + if let Some(v) = self.registration_source { + my_size += ::protobuf::rt::enum_size(4, v); + } + if let Some(ref v) = self.registration_address.as_ref() { + my_size += ::protobuf::rt::bytes_size(6, &v); + } + if let Some(ref v) = self.decoy_address.as_ref() { + my_size += ::protobuf::rt::bytes_size(7, &v); + } my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); self.cached_size.set(my_size); my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { if let Some(ref v) = self.shared_secret.as_ref() { os.write_bytes(1, &v)?; } @@ -3092,6 +3095,15 @@ impl ::protobuf::Message for ZMQPayload { os.write_raw_varint32(v.get_cached_size())?; v.write_to_with_cached_sizes(os)?; } + if let Some(v) = self.registration_source { + os.write_enum(4, v.value())?; + } + if let Some(ref v) = self.registration_address.as_ref() { + os.write_bytes(6, &v)?; + } + if let Some(ref v) = self.decoy_address.as_ref() { + os.write_bytes(7, &v)?; + } os.write_unknown_fields(self.get_unknown_fields())?; ::std::result::Result::Ok(()) } @@ -3108,13 +3120,13 @@ impl ::protobuf::Message for ZMQPayload { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -3122,55 +3134,83 @@ impl ::protobuf::Message for ZMQPayload { Self::descriptor_static() } - fn new() -> ZMQPayload { - ZMQPayload::new() + fn new() -> C2SWrapper { + C2SWrapper::new() } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "shared_secret", - |m: &ZMQPayload| { &m.shared_secret }, - |m: &mut ZMQPayload| { &mut m.shared_secret }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "registration_payload", - |m: &ZMQPayload| { &m.registration_payload }, - |m: &mut ZMQPayload| { &mut m.registration_payload }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "ZMQPayload", - fields, - file_descriptor_proto() - ) - }) - } - - fn default_instance() -> &'static ZMQPayload { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(ZMQPayload::new) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "shared_secret", + |m: &C2SWrapper| { &m.shared_secret }, + |m: &mut C2SWrapper| { &mut m.shared_secret }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "registration_payload", + |m: &C2SWrapper| { &m.registration_payload }, + |m: &mut C2SWrapper| { &mut m.registration_payload }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( + "registration_source", + |m: &C2SWrapper| { &m.registration_source }, + |m: &mut C2SWrapper| { &mut m.registration_source }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "registration_address", + |m: &C2SWrapper| { &m.registration_address }, + |m: &mut C2SWrapper| { &mut m.registration_address }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "decoy_address", + |m: &C2SWrapper| { &m.decoy_address }, + |m: &mut C2SWrapper| { &mut m.decoy_address }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "C2SWrapper", + fields, + file_descriptor_proto() + ) + }) + } + } + + fn default_instance() -> &'static C2SWrapper { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const C2SWrapper, + }; + unsafe { + instance.get(C2SWrapper::new) + } } } -impl ::protobuf::Clear for ZMQPayload { +impl ::protobuf::Clear for C2SWrapper { fn clear(&mut self) { self.shared_secret.clear(); self.registration_payload.clear(); + self.registration_source = ::std::option::Option::None; + self.registration_address.clear(); + self.decoy_address.clear(); self.unknown_fields.clear(); } } -impl ::std::fmt::Debug for ZMQPayload { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { +impl ::std::fmt::Debug for C2SWrapper { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } -impl ::protobuf::reflect::ProtobufValue for ZMQPayload { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) +impl ::protobuf::reflect::ProtobufValue for C2SWrapper { + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } @@ -3299,7 +3339,7 @@ impl ::protobuf::Message for SessionStats { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -3370,7 +3410,7 @@ impl ::protobuf::Message for SessionStats { my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { if let Some(v) = self.failed_decoys_amount { os.write_uint32(20, v)?; } @@ -3402,13 +3442,13 @@ impl ::protobuf::Message for SessionStats { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -3421,45 +3461,55 @@ impl ::protobuf::Message for SessionStats { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "failed_decoys_amount", - |m: &SessionStats| { &m.failed_decoys_amount }, - |m: &mut SessionStats| { &mut m.failed_decoys_amount }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "total_time_to_connect", - |m: &SessionStats| { &m.total_time_to_connect }, - |m: &mut SessionStats| { &mut m.total_time_to_connect }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "rtt_to_station", - |m: &SessionStats| { &m.rtt_to_station }, - |m: &mut SessionStats| { &mut m.rtt_to_station }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "tls_to_decoy", - |m: &SessionStats| { &m.tls_to_decoy }, - |m: &mut SessionStats| { &mut m.tls_to_decoy }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "tcp_to_decoy", - |m: &SessionStats| { &m.tcp_to_decoy }, - |m: &mut SessionStats| { &mut m.tcp_to_decoy }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "SessionStats", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "failed_decoys_amount", + |m: &SessionStats| { &m.failed_decoys_amount }, + |m: &mut SessionStats| { &mut m.failed_decoys_amount }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "total_time_to_connect", + |m: &SessionStats| { &m.total_time_to_connect }, + |m: &mut SessionStats| { &mut m.total_time_to_connect }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "rtt_to_station", + |m: &SessionStats| { &m.rtt_to_station }, + |m: &mut SessionStats| { &mut m.rtt_to_station }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "tls_to_decoy", + |m: &SessionStats| { &m.tls_to_decoy }, + |m: &mut SessionStats| { &mut m.tls_to_decoy }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "tcp_to_decoy", + |m: &SessionStats| { &m.tcp_to_decoy }, + |m: &mut SessionStats| { &mut m.tcp_to_decoy }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "SessionStats", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static SessionStats { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(SessionStats::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const SessionStats, + }; + unsafe { + instance.get(SessionStats::new) + } } } @@ -3475,14 +3525,14 @@ impl ::protobuf::Clear for SessionStats { } impl ::std::fmt::Debug for SessionStats { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for SessionStats { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } @@ -3514,10 +3564,15 @@ impl ::protobuf::ProtobufEnum for KeyType { } fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - ::protobuf::reflect::EnumDescriptor::new_pb_name::("KeyType", file_descriptor_proto()) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::EnumDescriptor, + }; + unsafe { + descriptor.get(|| { + ::protobuf::reflect::EnumDescriptor::new("KeyType", file_descriptor_proto()) + }) + } } } @@ -3532,8 +3587,8 @@ impl ::std::default::Default for KeyType { } impl ::protobuf::reflect::ProtobufValue for KeyType { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self)) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Enum(self.descriptor()) } } @@ -3586,10 +3641,15 @@ impl ::protobuf::ProtobufEnum for C2S_Transition { } fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - ::protobuf::reflect::EnumDescriptor::new_pb_name::("C2S_Transition", file_descriptor_proto()) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::EnumDescriptor, + }; + unsafe { + descriptor.get(|| { + ::protobuf::reflect::EnumDescriptor::new("C2S_Transition", file_descriptor_proto()) + }) + } } } @@ -3603,8 +3663,8 @@ impl ::std::default::Default for C2S_Transition { } impl ::protobuf::reflect::ProtobufValue for C2S_Transition { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self)) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Enum(self.descriptor()) } } @@ -3648,10 +3708,15 @@ impl ::protobuf::ProtobufEnum for S2C_Transition { } fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - ::protobuf::reflect::EnumDescriptor::new_pb_name::("S2C_Transition", file_descriptor_proto()) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::EnumDescriptor, + }; + unsafe { + descriptor.get(|| { + ::protobuf::reflect::EnumDescriptor::new("S2C_Transition", file_descriptor_proto()) + }) + } } } @@ -3665,8 +3730,8 @@ impl ::std::default::Default for S2C_Transition { } impl ::protobuf::reflect::ProtobufValue for S2C_Transition { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self)) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Enum(self.descriptor()) } } @@ -3716,10 +3781,15 @@ impl ::protobuf::ProtobufEnum for ErrorReasonS2C { } fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - ::protobuf::reflect::EnumDescriptor::new_pb_name::("ErrorReasonS2C", file_descriptor_proto()) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::EnumDescriptor, + }; + unsafe { + descriptor.get(|| { + ::protobuf::reflect::EnumDescriptor::new("ErrorReasonS2C", file_descriptor_proto()) + }) + } } } @@ -3733,16 +3803,16 @@ impl ::std::default::Default for ErrorReasonS2C { } impl ::protobuf::reflect::ProtobufValue for ErrorReasonS2C { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self)) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Enum(self.descriptor()) } } #[derive(Clone,PartialEq,Eq,Debug,Hash)] pub enum TransportType { - NullTransport = 0, - MinTransport = 1, - Obfs4Transport = 2, + Null = 0, + Min = 1, + Obfs4 = 2, } impl ::protobuf::ProtobufEnum for TransportType { @@ -3752,27 +3822,32 @@ impl ::protobuf::ProtobufEnum for TransportType { fn from_i32(value: i32) -> ::std::option::Option { match value { - 0 => ::std::option::Option::Some(TransportType::NullTransport), - 1 => ::std::option::Option::Some(TransportType::MinTransport), - 2 => ::std::option::Option::Some(TransportType::Obfs4Transport), + 0 => ::std::option::Option::Some(TransportType::Null), + 1 => ::std::option::Option::Some(TransportType::Min), + 2 => ::std::option::Option::Some(TransportType::Obfs4), _ => ::std::option::Option::None } } fn values() -> &'static [Self] { static values: &'static [TransportType] = &[ - TransportType::NullTransport, - TransportType::MinTransport, - TransportType::Obfs4Transport, + TransportType::Null, + TransportType::Min, + TransportType::Obfs4, ]; values } fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - ::protobuf::reflect::EnumDescriptor::new_pb_name::("TransportType", file_descriptor_proto()) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::EnumDescriptor, + }; + unsafe { + descriptor.get(|| { + ::protobuf::reflect::EnumDescriptor::new("TransportType", file_descriptor_proto()) + }) + } } } @@ -3781,13 +3856,71 @@ impl ::std::marker::Copy for TransportType { impl ::std::default::Default for TransportType { fn default() -> Self { - TransportType::NullTransport + TransportType::Null } } impl ::protobuf::reflect::ProtobufValue for TransportType { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self)) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Enum(self.descriptor()) + } +} + +#[derive(Clone,PartialEq,Eq,Debug,Hash)] +pub enum RegistrationSource { + Detector = 0, + API = 1, + DetectorPrescan = 2, +} + +impl ::protobuf::ProtobufEnum for RegistrationSource { + fn value(&self) -> i32 { + *self as i32 + } + + fn from_i32(value: i32) -> ::std::option::Option { + match value { + 0 => ::std::option::Option::Some(RegistrationSource::Detector), + 1 => ::std::option::Option::Some(RegistrationSource::API), + 2 => ::std::option::Option::Some(RegistrationSource::DetectorPrescan), + _ => ::std::option::Option::None + } + } + + fn values() -> &'static [Self] { + static values: &'static [RegistrationSource] = &[ + RegistrationSource::Detector, + RegistrationSource::API, + RegistrationSource::DetectorPrescan, + ]; + values + } + + fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor { + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::EnumDescriptor, + }; + unsafe { + descriptor.get(|| { + ::protobuf::reflect::EnumDescriptor::new("RegistrationSource", file_descriptor_proto()) + }) + } + } +} + +impl ::std::marker::Copy for RegistrationSource { +} + +impl ::std::default::Default for RegistrationSource { + fn default() -> Self { + RegistrationSource::Detector + } +} + +impl ::protobuf::reflect::ProtobufValue for RegistrationSource { + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Enum(self.descriptor()) } } @@ -3814,51 +3947,54 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \x14.tapdance.ClientConfR\nconfigInfo\x127\n\nerr_reason\x18\x04\x20\x01\ (\x0e2\x18.tapdance.ErrorReasonS2CR\terrReason\x12\x1f\n\x0btmp_backoff\ \x18\x05\x20\x01(\rR\ntmpBackoff\x12\x1d\n\nstation_id\x18\x06\x20\x01(\ - \tR\tstationId\x12\x18\n\x07padding\x18d\x20\x01(\x0cR\x07padding\"\x8f\ + \tR\tstationId\x12\x18\n\x07padding\x18d\x20\x01(\x0cR\x07padding\"\xaf\ \x01\n\x11RegistrationFlags\x12\x1f\n\x0bupload_only\x18\x01\x20\x01(\ \x08R\nuploadOnly\x12\x1d\n\ndark_decoy\x18\x02\x20\x01(\x08R\tdarkDecoy\ \x12!\n\x0cproxy_header\x18\x03\x20\x01(\x08R\x0bproxyHeader\x12\x17\n\ - \x07use_TIL\x18\x04\x20\x01(\x08R\x06useTIL\"\xcb\x04\n\x0fClientToStati\ - on\x12)\n\x10protocol_version\x18\x01\x20\x01(\rR\x0fprotocolVersion\x12\ - 2\n\x15decoy_list_generation\x18\x02\x20\x01(\rR\x13decoyListGeneration\ - \x12C\n\x10state_transition\x18\x03\x20\x01(\x0e2\x18.tapdance.C2S_Trans\ - itionR\x0fstateTransition\x12\x1f\n\x0bupload_sync\x18\x04\x20\x01(\x04R\ - \nuploadSync\x12#\n\rfailed_decoys\x18\n\x20\x03(\tR\x0cfailedDecoys\x12\ - ,\n\x05stats\x18\x0b\x20\x01(\x0b2\x16.tapdance.SessionStatsR\x05stats\ - \x125\n\ttransport\x18\x0c\x20\x01(\x0e2\x17.tapdance.TransportTypeR\ttr\ - ansport\x12%\n\x0ecovert_address\x18\x14\x20\x01(\tR\rcovertAddress\x127\ - \n\x18masked_decoy_server_name\x18\x15\x20\x01(\tR\x15maskedDecoyServerN\ - ame\x12\x1d\n\nv6_support\x18\x16\x20\x01(\x08R\tv6Support\x12\x1d\n\nv4\ - _support\x18\x17\x20\x01(\x08R\tv4Support\x121\n\x05flags\x18\x18\x20\ - \x01(\x0b2\x1b.tapdance.RegistrationFlagsR\x05flags\x12\x18\n\x07padding\ - \x18d\x20\x01(\x0cR\x07padding\"s\n\x0bClientToAPI\x12\x16\n\x06secret\ - \x18\x01\x20\x01(\x0cR\x06secret\x12L\n\x14registration_payload\x18\x02\ - \x20\x01(\x0b2\x19.tapdance.ClientToStationR\x13registrationPayload\"\ - \x7f\n\nZMQPayload\x12#\n\rshared_secret\x18\x01\x20\x01(\x0cR\x0cshared\ - Secret\x12L\n\x14registration_payload\x18\x03\x20\x01(\x0b2\x19.tapdance\ - .ClientToStationR\x13registrationPayload\"\xdd\x01\n\x0cSessionStats\x12\ - 0\n\x14failed_decoys_amount\x18\x14\x20\x01(\rR\x12failedDecoysAmount\ - \x121\n\x15total_time_to_connect\x18\x1f\x20\x01(\rR\x12totalTimeToConne\ - ct\x12$\n\x0ertt_to_station\x18!\x20\x01(\rR\x0crttToStation\x12\x20\n\ - \x0ctls_to_decoy\x18&\x20\x01(\rR\ntlsToDecoy\x12\x20\n\x0ctcp_to_decoy\ - \x18'\x20\x01(\rR\ntcpToDecoy*+\n\x07KeyType\x12\x0f\n\x0bAES_GCM_128\ - \x10Z\x12\x0f\n\x0bAES_GCM_256\x10[*\xe7\x01\n\x0eC2S_Transition\x12\x11\ - \n\rC2S_NO_CHANGE\x10\0\x12\x14\n\x10C2S_SESSION_INIT\x10\x01\x12\x1b\n\ - \x17C2S_SESSION_COVERT_INIT\x10\x0b\x12\x18\n\x14C2S_EXPECT_RECONNECT\ - \x10\x02\x12\x15\n\x11C2S_SESSION_CLOSE\x10\x03\x12\x14\n\x10C2S_YIELD_U\ - PLOAD\x10\x04\x12\x16\n\x12C2S_ACQUIRE_UPLOAD\x10\x05\x12\x20\n\x1cC2S_E\ - XPECT_UPLOADONLY_RECONN\x10\x06\x12\x0e\n\tC2S_ERROR\x10\xff\x01*\x98\ - \x01\n\x0eS2C_Transition\x12\x11\n\rS2C_NO_CHANGE\x10\0\x12\x14\n\x10S2C\ - _SESSION_INIT\x10\x01\x12\x1b\n\x17S2C_SESSION_COVERT_INIT\x10\x0b\x12\ - \x19\n\x15S2C_CONFIRM_RECONNECT\x10\x02\x12\x15\n\x11S2C_SESSION_CLOSE\ - \x10\x03\x12\x0e\n\tS2C_ERROR\x10\xff\x01*\xac\x01\n\x0eErrorReasonS2C\ - \x12\x0c\n\x08NO_ERROR\x10\0\x12\x11\n\rCOVERT_STREAM\x10\x01\x12\x13\n\ - \x0fCLIENT_REPORTED\x10\x02\x12\x13\n\x0fCLIENT_PROTOCOL\x10\x03\x12\x14\ - \n\x10STATION_INTERNAL\x10\x04\x12\x12\n\x0eDECOY_OVERLOAD\x10\x05\x12\ - \x11\n\rCLIENT_STREAM\x10d\x12\x12\n\x0eCLIENT_TIMEOUT\x10e*H\n\rTranspo\ - rtType\x12\x11\n\rNullTransport\x10\0\x12\x10\n\x0cMinTransport\x10\x01\ - \x12\x12\n\x0eObfs4Transport\x10\x02J\xdeQ\n\x07\x12\x05\0\0\xf5\x01\x01\ - \n\x08\n\x01\x0c\x12\x03\0\0\x12\n\xb0\x01\n\x01\x02\x12\x03\x06\0\x112\ + \x07use_TIL\x18\x04\x20\x01(\x08R\x06useTIL\x12\x1e\n\nprescanned\x18\ + \x05\x20\x01(\x08R\nprescanned\"\xcb\x04\n\x0fClientToStation\x12)\n\x10\ + protocol_version\x18\x01\x20\x01(\rR\x0fprotocolVersion\x122\n\x15decoy_\ + list_generation\x18\x02\x20\x01(\rR\x13decoyListGeneration\x12C\n\x10sta\ + te_transition\x18\x03\x20\x01(\x0e2\x18.tapdance.C2S_TransitionR\x0fstat\ + eTransition\x12\x1f\n\x0bupload_sync\x18\x04\x20\x01(\x04R\nuploadSync\ + \x12#\n\rfailed_decoys\x18\n\x20\x03(\tR\x0cfailedDecoys\x12,\n\x05stats\ + \x18\x0b\x20\x01(\x0b2\x16.tapdance.SessionStatsR\x05stats\x125\n\ttrans\ + port\x18\x0c\x20\x01(\x0e2\x17.tapdance.TransportTypeR\ttransport\x12%\n\ + \x0ecovert_address\x18\x14\x20\x01(\tR\rcovertAddress\x127\n\x18masked_d\ + ecoy_server_name\x18\x15\x20\x01(\tR\x15maskedDecoyServerName\x12\x1d\n\ + \nv6_support\x18\x16\x20\x01(\x08R\tv6Support\x12\x1d\n\nv4_support\x18\ + \x17\x20\x01(\x08R\tv4Support\x121\n\x05flags\x18\x18\x20\x01(\x0b2\x1b.\ + tapdance.RegistrationFlagsR\x05flags\x12\x18\n\x07padding\x18d\x20\x01(\ + \x0cR\x07padding\"\xa6\x02\n\nC2SWrapper\x12#\n\rshared_secret\x18\x01\ + \x20\x01(\x0cR\x0csharedSecret\x12L\n\x14registration_payload\x18\x03\ + \x20\x01(\x0b2\x19.tapdance.ClientToStationR\x13registrationPayload\x12M\ + \n\x13registration_source\x18\x04\x20\x01(\x0e2\x1c.tapdance.Registratio\ + nSourceR\x12registrationSource\x121\n\x14registration_address\x18\x06\ + \x20\x01(\x0cR\x13registrationAddress\x12#\n\rdecoy_address\x18\x07\x20\ + \x01(\x0cR\x0cdecoyAddress\"\xdd\x01\n\x0cSessionStats\x120\n\x14failed_\ + decoys_amount\x18\x14\x20\x01(\rR\x12failedDecoysAmount\x121\n\x15total_\ + time_to_connect\x18\x1f\x20\x01(\rR\x12totalTimeToConnect\x12$\n\x0ertt_\ + to_station\x18!\x20\x01(\rR\x0crttToStation\x12\x20\n\x0ctls_to_decoy\ + \x18&\x20\x01(\rR\ntlsToDecoy\x12\x20\n\x0ctcp_to_decoy\x18'\x20\x01(\rR\ + \ntcpToDecoy*+\n\x07KeyType\x12\x0f\n\x0bAES_GCM_128\x10Z\x12\x0f\n\x0bA\ + ES_GCM_256\x10[*\xe7\x01\n\x0eC2S_Transition\x12\x11\n\rC2S_NO_CHANGE\ + \x10\0\x12\x14\n\x10C2S_SESSION_INIT\x10\x01\x12\x1b\n\x17C2S_SESSION_CO\ + VERT_INIT\x10\x0b\x12\x18\n\x14C2S_EXPECT_RECONNECT\x10\x02\x12\x15\n\ + \x11C2S_SESSION_CLOSE\x10\x03\x12\x14\n\x10C2S_YIELD_UPLOAD\x10\x04\x12\ + \x16\n\x12C2S_ACQUIRE_UPLOAD\x10\x05\x12\x20\n\x1cC2S_EXPECT_UPLOADONLY_\ + RECONN\x10\x06\x12\x0e\n\tC2S_ERROR\x10\xff\x01*\x98\x01\n\x0eS2C_Transi\ + tion\x12\x11\n\rS2C_NO_CHANGE\x10\0\x12\x14\n\x10S2C_SESSION_INIT\x10\ + \x01\x12\x1b\n\x17S2C_SESSION_COVERT_INIT\x10\x0b\x12\x19\n\x15S2C_CONFI\ + RM_RECONNECT\x10\x02\x12\x15\n\x11S2C_SESSION_CLOSE\x10\x03\x12\x0e\n\tS\ + 2C_ERROR\x10\xff\x01*\xac\x01\n\x0eErrorReasonS2C\x12\x0c\n\x08NO_ERROR\ + \x10\0\x12\x11\n\rCOVERT_STREAM\x10\x01\x12\x13\n\x0fCLIENT_REPORTED\x10\ + \x02\x12\x13\n\x0fCLIENT_PROTOCOL\x10\x03\x12\x14\n\x10STATION_INTERNAL\ + \x10\x04\x12\x12\n\x0eDECOY_OVERLOAD\x10\x05\x12\x11\n\rCLIENT_STREAM\ + \x10d\x12\x12\n\x0eCLIENT_TIMEOUT\x10e*-\n\rTransportType\x12\x08\n\x04N\ + ull\x10\0\x12\x07\n\x03Min\x10\x01\x12\t\n\x05Obfs4\x10\x02*@\n\x12Regis\ + trationSource\x12\x0c\n\x08Detector\x10\0\x12\x07\n\x03API\x10\x01\x12\ + \x13\n\x0fDetectorPrescan\x10\x02J\xabR\n\x07\x12\x05\0\0\xfa\x01\x01\n\ + \x08\n\x01\x0c\x12\x03\0\0\x12\n\xb0\x01\n\x01\x02\x12\x03\x06\x08\x102\ \xa5\x01\x20TODO:\x20We're\x20using\x20proto2\x20because\x20it's\x20the\ \x20default\x20on\x20Ubuntu\x2016.04.\n\x20At\x20some\x20point\x20we\x20\ will\x20want\x20to\x20migrate\x20to\x20proto3,\x20but\x20we\x20are\x20no\ @@ -4034,199 +4170,214 @@ static file_descriptor_proto_data: &'static [u8] = b"\ send)\n\n\r\n\x05\x05\x03\x02\x07\x01\x12\x04\x83\x01\x04\x12\n\r\n\x05\ \x05\x03\x02\x07\x02\x12\x04\x83\x01\x15\x18\n\x0c\n\x02\x05\x04\x12\x06\ \x86\x01\0\x8a\x01\x01\n\x0b\n\x03\x05\x04\x01\x12\x04\x86\x01\x05\x12\n\ - \x0c\n\x04\x05\x04\x02\0\x12\x04\x87\x01\x04\x16\n\r\n\x05\x05\x04\x02\0\ - \x01\x12\x04\x87\x01\x04\x11\n\r\n\x05\x05\x04\x02\0\x02\x12\x04\x87\x01\ - \x14\x15\n`\n\x04\x05\x04\x02\x01\x12\x04\x88\x01\x04\x15\"R\x20Send\x20\ + \x0c\n\x04\x05\x04\x02\0\x12\x04\x87\x01\x04\r\n\r\n\x05\x05\x04\x02\0\ + \x01\x12\x04\x87\x01\x04\x08\n\r\n\x05\x05\x04\x02\0\x02\x12\x04\x87\x01\ + \x0b\x0c\n`\n\x04\x05\x04\x02\x01\x12\x04\x88\x01\x04\x0c\"R\x20Send\x20\ a\x2032-byte\x20HMAC\x20id\x20to\x20let\x20the\x20station\x20distinguish\ \x20registrations\x20to\x20same\x20host\n\n\r\n\x05\x05\x04\x02\x01\x01\ - \x12\x04\x88\x01\x04\x10\n\r\n\x05\x05\x04\x02\x01\x02\x12\x04\x88\x01\ - \x13\x14\n$\n\x04\x05\x04\x02\x02\x12\x04\x89\x01\x04\x17\"\x16\x20Not\ - \x20implemented\x20yet?\n\n\r\n\x05\x05\x04\x02\x02\x01\x12\x04\x89\x01\ - \x04\x12\n\r\n\x05\x05\x04\x02\x02\x02\x12\x04\x89\x01\x15\x16\n\x0c\n\ - \x02\x04\x05\x12\x06\x8c\x01\0\xa3\x01\x01\n\x0b\n\x03\x04\x05\x01\x12\ - \x04\x8c\x01\x08\x17\nO\n\x04\x04\x05\x02\0\x12\x04\x8e\x01\x04)\x1aA\ - \x20Should\x20accompany\x20(at\x20least)\x20SESSION_INIT\x20and\x20CONFI\ - RM_RECONNECT.\n\n\r\n\x05\x04\x05\x02\0\x04\x12\x04\x8e\x01\x04\x0c\n\r\ - \n\x05\x04\x05\x02\0\x05\x12\x04\x8e\x01\r\x13\n\r\n\x05\x04\x05\x02\0\ - \x01\x12\x04\x8e\x01\x14$\n\r\n\x05\x04\x05\x02\0\x03\x12\x04\x8e\x01'(\ - \nv\n\x04\x04\x05\x02\x01\x12\x04\x92\x01\x041\x1ah\x20There\x20might\ - \x20be\x20a\x20state\x20transition.\x20May\x20be\x20absent;\x20absence\ - \x20should\x20be\n\x20treated\x20identically\x20to\x20NO_CHANGE.\n\n\r\n\ - \x05\x04\x05\x02\x01\x04\x12\x04\x92\x01\x04\x0c\n\r\n\x05\x04\x05\x02\ - \x01\x06\x12\x04\x92\x01\r\x1b\n\r\n\x05\x04\x05\x02\x01\x01\x12\x04\x92\ - \x01\x1c,\n\r\n\x05\x04\x05\x02\x01\x03\x12\x04\x92\x01/0\nc\n\x04\x04\ - \x05\x02\x02\x12\x04\x96\x01\x04(\x1aU\x20The\x20station\x20can\x20send\ - \x20client\x20config\x20info\x20piggybacked\n\x20on\x20any\x20message,\ - \x20as\x20it\x20sees\x20fit\n\n\r\n\x05\x04\x05\x02\x02\x04\x12\x04\x96\ - \x01\x04\x0c\n\r\n\x05\x04\x05\x02\x02\x06\x12\x04\x96\x01\r\x17\n\r\n\ - \x05\x04\x05\x02\x02\x01\x12\x04\x96\x01\x18#\n\r\n\x05\x04\x05\x02\x02\ - \x03\x12\x04\x96\x01&'\nP\n\x04\x04\x05\x02\x03\x12\x04\x99\x01\x04+\x1a\ - B\x20If\x20state_transition\x20==\x20S2C_ERROR,\x20this\x20field\x20is\ - \x20the\x20explanation.\n\n\r\n\x05\x04\x05\x02\x03\x04\x12\x04\x99\x01\ - \x04\x0c\n\r\n\x05\x04\x05\x02\x03\x06\x12\x04\x99\x01\r\x1b\n\r\n\x05\ - \x04\x05\x02\x03\x01\x12\x04\x99\x01\x1c&\n\r\n\x05\x04\x05\x02\x03\x03\ - \x12\x04\x99\x01)*\nQ\n\x04\x04\x05\x02\x04\x12\x04\x9c\x01\x04$\x1aC\ - \x20Signals\x20client\x20to\x20stop\x20connecting\x20for\x20following\ - \x20amount\x20of\x20seconds\n\n\r\n\x05\x04\x05\x02\x04\x04\x12\x04\x9c\ - \x01\x04\x0c\n\r\n\x05\x04\x05\x02\x04\x05\x12\x04\x9c\x01\r\x13\n\r\n\ - \x05\x04\x05\x02\x04\x01\x12\x04\x9c\x01\x14\x1f\n\r\n\x05\x04\x05\x02\ - \x04\x03\x12\x04\x9c\x01\"#\nK\n\x04\x04\x05\x02\x05\x12\x04\x9f\x01\x04\ - #\x1a=\x20Sent\x20in\x20SESSION_INIT,\x20identifies\x20the\x20station\ - \x20that\x20picked\x20up\n\n\r\n\x05\x04\x05\x02\x05\x04\x12\x04\x9f\x01\ - \x04\x0c\n\r\n\x05\x04\x05\x02\x05\x05\x12\x04\x9f\x01\r\x13\n\r\n\x05\ - \x04\x05\x02\x05\x01\x12\x04\x9f\x01\x14\x1e\n\r\n\x05\x04\x05\x02\x05\ - \x03\x12\x04\x9f\x01!\"\nG\n\x04\x04\x05\x02\x06\x12\x04\xa2\x01\x04!\ - \x1a9\x20Random-sized\x20junk\x20to\x20defeat\x20packet\x20size\x20finge\ - rprinting.\n\n\r\n\x05\x04\x05\x02\x06\x04\x12\x04\xa2\x01\x04\x0c\n\r\n\ - \x05\x04\x05\x02\x06\x05\x12\x04\xa2\x01\r\x12\n\r\n\x05\x04\x05\x02\x06\ - \x01\x12\x04\xa2\x01\x13\x1a\n\r\n\x05\x04\x05\x02\x06\x03\x12\x04\xa2\ - \x01\x1d\x20\n\x0c\n\x02\x04\x06\x12\x06\xa5\x01\0\xaa\x01\x01\n\x0b\n\ - \x03\x04\x06\x01\x12\x04\xa5\x01\x08\x19\n\x0c\n\x04\x04\x06\x02\0\x12\ - \x04\xa6\x01\x08&\n\r\n\x05\x04\x06\x02\0\x04\x12\x04\xa6\x01\x08\x10\n\ - \r\n\x05\x04\x06\x02\0\x05\x12\x04\xa6\x01\x11\x15\n\r\n\x05\x04\x06\x02\ - \0\x01\x12\x04\xa6\x01\x16!\n\r\n\x05\x04\x06\x02\0\x03\x12\x04\xa6\x01$\ - %\n\x0c\n\x04\x04\x06\x02\x01\x12\x04\xa7\x01\x08%\n\r\n\x05\x04\x06\x02\ - \x01\x04\x12\x04\xa7\x01\x08\x10\n\r\n\x05\x04\x06\x02\x01\x05\x12\x04\ - \xa7\x01\x11\x15\n\r\n\x05\x04\x06\x02\x01\x01\x12\x04\xa7\x01\x16\x20\n\ - \r\n\x05\x04\x06\x02\x01\x03\x12\x04\xa7\x01#$\n\x0c\n\x04\x04\x06\x02\ - \x02\x12\x04\xa8\x01\x08'\n\r\n\x05\x04\x06\x02\x02\x04\x12\x04\xa8\x01\ - \x08\x10\n\r\n\x05\x04\x06\x02\x02\x05\x12\x04\xa8\x01\x11\x15\n\r\n\x05\ - \x04\x06\x02\x02\x01\x12\x04\xa8\x01\x16\"\n\r\n\x05\x04\x06\x02\x02\x03\ - \x12\x04\xa8\x01%&\n\x0c\n\x04\x04\x06\x02\x03\x12\x04\xa9\x01\x08\"\n\r\ - \n\x05\x04\x06\x02\x03\x04\x12\x04\xa9\x01\x08\x10\n\r\n\x05\x04\x06\x02\ - \x03\x05\x12\x04\xa9\x01\x11\x15\n\r\n\x05\x04\x06\x02\x03\x01\x12\x04\ - \xa9\x01\x16\x1d\n\r\n\x05\x04\x06\x02\x03\x03\x12\x04\xa9\x01\x20!\n\ - \x0c\n\x02\x04\x07\x12\x06\xac\x01\0\xd8\x01\x01\n\x0b\n\x03\x04\x07\x01\ - \x12\x04\xac\x01\x08\x17\n\x0c\n\x04\x04\x07\x02\0\x12\x04\xad\x01\x04)\ - \n\r\n\x05\x04\x07\x02\0\x04\x12\x04\xad\x01\x04\x0c\n\r\n\x05\x04\x07\ - \x02\0\x05\x12\x04\xad\x01\r\x13\n\r\n\x05\x04\x07\x02\0\x01\x12\x04\xad\ - \x01\x14$\n\r\n\x05\x04\x07\x02\0\x03\x12\x04\xad\x01'(\n\xd0\x01\n\x04\ - \x04\x07\x02\x01\x12\x04\xb2\x01\x04.\x1a\xc1\x01\x20The\x20client\x20re\ - ports\x20its\x20decoy\x20list's\x20version\x20number\x20here,\x20which\ - \x20the\n\x20station\x20can\x20use\x20to\x20decide\x20whether\x20to\x20s\ - end\x20an\x20updated\x20one.\x20The\x20station\n\x20should\x20always\x20\ - send\x20a\x20list\x20if\x20this\x20field\x20is\x20set\x20to\x200.\n\n\r\ - \n\x05\x04\x07\x02\x01\x04\x12\x04\xb2\x01\x04\x0c\n\r\n\x05\x04\x07\x02\ - \x01\x05\x12\x04\xb2\x01\r\x13\n\r\n\x05\x04\x07\x02\x01\x01\x12\x04\xb2\ - \x01\x14)\n\r\n\x05\x04\x07\x02\x01\x03\x12\x04\xb2\x01,-\n\x0c\n\x04\ - \x04\x07\x02\x02\x12\x04\xb4\x01\x041\n\r\n\x05\x04\x07\x02\x02\x04\x12\ - \x04\xb4\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x02\x06\x12\x04\xb4\x01\r\x1b\ - \n\r\n\x05\x04\x07\x02\x02\x01\x12\x04\xb4\x01\x1c,\n\r\n\x05\x04\x07\ - \x02\x02\x03\x12\x04\xb4\x01/0\n\x80\x01\n\x04\x04\x07\x02\x03\x12\x04\ - \xb8\x01\x04$\x1ar\x20The\x20position\x20in\x20the\x20overall\x20session\ - 's\x20upload\x20sequence\x20where\x20the\x20current\n\x20YIELD=>ACQUIRE\ - \x20switchover\x20is\x20happening.\n\n\r\n\x05\x04\x07\x02\x03\x04\x12\ - \x04\xb8\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x03\x05\x12\x04\xb8\x01\r\x13\ - \n\r\n\x05\x04\x07\x02\x03\x01\x12\x04\xb8\x01\x14\x1f\n\r\n\x05\x04\x07\ - \x02\x03\x03\x12\x04\xb8\x01\"#\nq\n\x04\x04\x07\x02\x04\x12\x04\xbd\x01\ - \x04'\x1ac\x20List\x20of\x20decoys\x20that\x20client\x20have\x20unsucces\ - sfully\x20tried\x20in\x20current\x20session.\n\x20Could\x20be\x20sent\ - \x20in\x20chunks\n\n\r\n\x05\x04\x07\x02\x04\x04\x12\x04\xbd\x01\x04\x0c\ - \n\r\n\x05\x04\x07\x02\x04\x05\x12\x04\xbd\x01\r\x13\n\r\n\x05\x04\x07\ - \x02\x04\x01\x12\x04\xbd\x01\x14!\n\r\n\x05\x04\x07\x02\x04\x03\x12\x04\ - \xbd\x01$&\n\x0c\n\x04\x04\x07\x02\x05\x12\x04\xbf\x01\x04%\n\r\n\x05\ - \x04\x07\x02\x05\x04\x12\x04\xbf\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x05\ - \x06\x12\x04\xbf\x01\r\x19\n\r\n\x05\x04\x07\x02\x05\x01\x12\x04\xbf\x01\ - \x1a\x1f\n\r\n\x05\x04\x07\x02\x05\x03\x12\x04\xbf\x01\"$\nk\n\x04\x04\ - \x07\x02\x06\x12\x04\xc2\x01\x04*\x1a]\x20NullTransport,\x20MinTransport\ - ,\x20Obfs4Transport,\x20etc.\x20Transport\x20type\x20we\x20want\x20from\ - \x20phantom\x20proxy\n\n\r\n\x05\x04\x07\x02\x06\x04\x12\x04\xc2\x01\x04\ - \x0c\n\r\n\x05\x04\x07\x02\x06\x06\x12\x04\xc2\x01\r\x1a\n\r\n\x05\x04\ - \x07\x02\x06\x01\x12\x04\xc2\x01\x1b$\n\r\n\x05\x04\x07\x02\x06\x03\x12\ - \x04\xc2\x01')\n\xc8\x03\n\x04\x04\x07\x02\x07\x12\x04\xca\x01\x04(\x1a\ - \xb9\x03\x20Station\x20is\x20only\x20required\x20to\x20check\x20this\x20\ - variable\x20during\x20session\x20initialization.\n\x20If\x20set,\x20stat\ - ion\x20must\x20facilitate\x20connection\x20to\x20said\x20target\x20by\ - \x20itself,\x20i.e.\x20write\x20into\x20squid\n\x20socket\x20an\x20HTTP/\ - SOCKS/any\x20other\x20connection\x20request.\n\x20covert_address\x20must\ - \x20have\x20exactly\x20one\x20':'\x20colon,\x20that\x20separates\x20host\ - \x20(literal\x20IP\x20address\x20or\n\x20resolvable\x20hostname)\x20and\ - \x20port\n\x20TODO:\x20make\x20it\x20required\x20for\x20initialization,\ - \x20and\x20stop\x20connecting\x20any\x20client\x20straight\x20to\x20squi\ - d?\n\n\r\n\x05\x04\x07\x02\x07\x04\x12\x04\xca\x01\x04\x0c\n\r\n\x05\x04\ - \x07\x02\x07\x05\x12\x04\xca\x01\r\x13\n\r\n\x05\x04\x07\x02\x07\x01\x12\ - \x04\xca\x01\x14\"\n\r\n\x05\x04\x07\x02\x07\x03\x12\x04\xca\x01%'\nR\n\ - \x04\x04\x07\x02\x08\x12\x04\xcd\x01\x042\x1aD\x20Used\x20in\x20dark\x20\ - decoys\x20to\x20signal\x20which\x20dark\x20decoy\x20it\x20will\x20connec\ - t\x20to.\n\n\r\n\x05\x04\x07\x02\x08\x04\x12\x04\xcd\x01\x04\x0c\n\r\n\ - \x05\x04\x07\x02\x08\x05\x12\x04\xcd\x01\r\x13\n\r\n\x05\x04\x07\x02\x08\ - \x01\x12\x04\xcd\x01\x14,\n\r\n\x05\x04\x07\x02\x08\x03\x12\x04\xcd\x01/\ - 1\nR\n\x04\x04\x07\x02\t\x12\x04\xd0\x01\x04\"\x1aD\x20Used\x20to\x20ind\ - icate\x20to\x20server\x20if\x20client\x20is\x20registering\x20v4,\x20v6\ - \x20or\x20both\n\n\r\n\x05\x04\x07\x02\t\x04\x12\x04\xd0\x01\x04\x0c\n\r\ - \n\x05\x04\x07\x02\t\x05\x12\x04\xd0\x01\r\x11\n\r\n\x05\x04\x07\x02\t\ - \x01\x12\x04\xd0\x01\x12\x1c\n\r\n\x05\x04\x07\x02\t\x03\x12\x04\xd0\x01\ - \x1f!\n\x0c\n\x04\x04\x07\x02\n\x12\x04\xd1\x01\x04\"\n\r\n\x05\x04\x07\ - \x02\n\x04\x12\x04\xd1\x01\x04\x0c\n\r\n\x05\x04\x07\x02\n\x05\x12\x04\ - \xd1\x01\r\x11\n\r\n\x05\x04\x07\x02\n\x01\x12\x04\xd1\x01\x12\x1c\n\r\n\ - \x05\x04\x07\x02\n\x03\x12\x04\xd1\x01\x1f!\nD\n\x04\x04\x07\x02\x0b\x12\ - \x04\xd4\x01\x08.\x1a6\x20A\x20collection\x20of\x20optional\x20flags\x20\ - for\x20the\x20registration.\n\n\r\n\x05\x04\x07\x02\x0b\x04\x12\x04\xd4\ - \x01\x08\x10\n\r\n\x05\x04\x07\x02\x0b\x06\x12\x04\xd4\x01\x11\"\n\r\n\ - \x05\x04\x07\x02\x0b\x01\x12\x04\xd4\x01#(\n\r\n\x05\x04\x07\x02\x0b\x03\ - \x12\x04\xd4\x01+-\nG\n\x04\x04\x07\x02\x0c\x12\x04\xd7\x01\x04!\x1a9\ - \x20Random-sized\x20junk\x20to\x20defeat\x20packet\x20size\x20fingerprin\ - ting.\n\n\r\n\x05\x04\x07\x02\x0c\x04\x12\x04\xd7\x01\x04\x0c\n\r\n\x05\ - \x04\x07\x02\x0c\x05\x12\x04\xd7\x01\r\x12\n\r\n\x05\x04\x07\x02\x0c\x01\ - \x12\x04\xd7\x01\x13\x1a\n\r\n\x05\x04\x07\x02\x0c\x03\x12\x04\xd7\x01\ - \x1d\x20\n\xbe\x01\n\x02\x04\x08\x12\x06\xdc\x01\0\xe2\x01\x01\x1a\xaf\ - \x01\x20Message\x20type\x20used\x20as\x20the\x20request\x20body\x20when\ - \x20registering\x20via\x20the\x20HTTP\x20API.\n\x20This\x20message\x20is\ - \x20assumed\x20to\x20be\x20sent\x20via\x20TLS,\x20meaning\x20that\x20sen\ - ding\x20the\x20secret\x20outright\x20is\x20acceptable.\n\n\x0b\n\x03\x04\ - \x08\x01\x12\x04\xdc\x01\x08\x13\nN\n\x04\x04\x08\x02\0\x12\x04\xde\x01\ - \x04\x1e\x1a@\x20The\x20secret\x20that\x20will\x20be\x20used\x20when\x20\ - forming\x20phantom\x20connections.\n\n\r\n\x05\x04\x08\x02\0\x04\x12\x04\ - \xde\x01\x04\x0c\n\r\n\x05\x04\x08\x02\0\x05\x12\x04\xde\x01\r\x12\n\r\n\ - \x05\x04\x08\x02\0\x01\x12\x04\xde\x01\x13\x19\n\r\n\x05\x04\x08\x02\0\ - \x03\x12\x04\xde\x01\x1c\x1d\nU\n\x04\x04\x08\x02\x01\x12\x04\xe1\x01\ - \x046\x1aG\x20The\x20ClientToStation\x20payload;\x20the\x20same\x20as\ - \x20used\x20in\x20decoy\x20registrations.\n\n\r\n\x05\x04\x08\x02\x01\ - \x04\x12\x04\xe1\x01\x04\x0c\n\r\n\x05\x04\x08\x02\x01\x06\x12\x04\xe1\ - \x01\r\x1c\n\r\n\x05\x04\x08\x02\x01\x01\x12\x04\xe1\x01\x1d1\n\r\n\x05\ - \x04\x08\x02\x01\x03\x12\x04\xe1\x0145\n\x0c\n\x02\x04\t\x12\x06\xe4\x01\ - \0\xe7\x01\x01\n\x0b\n\x03\x04\t\x01\x12\x04\xe4\x01\x08\x12\n\x0c\n\x04\ - \x04\t\x02\0\x12\x04\xe5\x01\x08)\n\r\n\x05\x04\t\x02\0\x04\x12\x04\xe5\ - \x01\x08\x10\n\r\n\x05\x04\t\x02\0\x05\x12\x04\xe5\x01\x11\x16\n\r\n\x05\ - \x04\t\x02\0\x01\x12\x04\xe5\x01\x17$\n\r\n\x05\x04\t\x02\0\x03\x12\x04\ - \xe5\x01'(\n\x0c\n\x04\x04\t\x02\x01\x12\x04\xe6\x01\x08:\n\r\n\x05\x04\ - \t\x02\x01\x04\x12\x04\xe6\x01\x08\x10\n\r\n\x05\x04\t\x02\x01\x06\x12\ - \x04\xe6\x01\x11\x20\n\r\n\x05\x04\t\x02\x01\x01\x12\x04\xe6\x01!5\n\r\n\ - \x05\x04\t\x02\x01\x03\x12\x04\xe6\x0189\n\x0c\n\x02\x04\n\x12\x06\xe9\ - \x01\0\xf5\x01\x01\n\x0b\n\x03\x04\n\x01\x12\x04\xe9\x01\x08\x14\n9\n\ - \x04\x04\n\x02\0\x12\x04\xea\x01\x04.\"+\x20how\x20many\x20decoys\x20wer\ - e\x20tried\x20before\x20success\n\n\r\n\x05\x04\n\x02\0\x04\x12\x04\xea\ - \x01\x04\x0c\n\r\n\x05\x04\n\x02\0\x05\x12\x04\xea\x01\r\x13\n\r\n\x05\ - \x04\n\x02\0\x01\x12\x04\xea\x01\x14(\n\r\n\x05\x04\n\x02\0\x03\x12\x04\ - \xea\x01+-\nm\n\x04\x04\n\x02\x01\x12\x04\xef\x01\x04/\x1a\x1e\x20Applic\ - able\x20to\x20whole\x20session:\n\"\x1a\x20includes\x20failed\x20attempt\ - s\n2#\x20Timings\x20below\x20are\x20in\x20milliseconds\n\n\r\n\x05\x04\n\ - \x02\x01\x04\x12\x04\xef\x01\x04\x0c\n\r\n\x05\x04\n\x02\x01\x05\x12\x04\ - \xef\x01\r\x13\n\r\n\x05\x04\n\x02\x01\x01\x12\x04\xef\x01\x14)\n\r\n\ - \x05\x04\n\x02\x01\x03\x12\x04\xef\x01,.\nR\n\x04\x04\n\x02\x02\x12\x04\ - \xf2\x01\x04(\x1a\x1f\x20Last\x20(i.e.\x20successful)\x20decoy:\n\"#\x20\ - measured\x20during\x20initial\x20handshake\n\n\r\n\x05\x04\n\x02\x02\x04\ - \x12\x04\xf2\x01\x04\x0c\n\r\n\x05\x04\n\x02\x02\x05\x12\x04\xf2\x01\r\ - \x13\n\r\n\x05\x04\n\x02\x02\x01\x12\x04\xf2\x01\x14\"\n\r\n\x05\x04\n\ - \x02\x02\x03\x12\x04\xf2\x01%'\n%\n\x04\x04\n\x02\x03\x12\x04\xf3\x01\ - \x04&\"\x17\x20includes\x20tcp\x20to\x20decoy\n\n\r\n\x05\x04\n\x02\x03\ - \x04\x12\x04\xf3\x01\x04\x0c\n\r\n\x05\x04\n\x02\x03\x05\x12\x04\xf3\x01\ - \r\x13\n\r\n\x05\x04\n\x02\x03\x01\x12\x04\xf3\x01\x14\x20\n\r\n\x05\x04\ - \n\x02\x03\x03\x12\x04\xf3\x01#%\nB\n\x04\x04\n\x02\x04\x12\x04\xf4\x01\ - \x04&\"4\x20measured\x20when\x20establishing\x20tcp\x20connection\x20to\ - \x20decot\n\n\r\n\x05\x04\n\x02\x04\x04\x12\x04\xf4\x01\x04\x0c\n\r\n\ - \x05\x04\n\x02\x04\x05\x12\x04\xf4\x01\r\x13\n\r\n\x05\x04\n\x02\x04\x01\ - \x12\x04\xf4\x01\x14\x20\n\r\n\x05\x04\n\x02\x04\x03\x12\x04\xf4\x01#%\ + \x12\x04\x88\x01\x04\x07\n\r\n\x05\x05\x04\x02\x01\x02\x12\x04\x88\x01\n\ + \x0b\n$\n\x04\x05\x04\x02\x02\x12\x04\x89\x01\x04\x0e\"\x16\x20Not\x20im\ + plemented\x20yet?\n\n\r\n\x05\x05\x04\x02\x02\x01\x12\x04\x89\x01\x04\t\ + \n\r\n\x05\x05\x04\x02\x02\x02\x12\x04\x89\x01\x0c\r\n\x0c\n\x02\x04\x05\ + \x12\x06\x8c\x01\0\xa3\x01\x01\n\x0b\n\x03\x04\x05\x01\x12\x04\x8c\x01\ + \x08\x17\nO\n\x04\x04\x05\x02\0\x12\x04\x8e\x01\x04)\x1aA\x20Should\x20a\ + ccompany\x20(at\x20least)\x20SESSION_INIT\x20and\x20CONFIRM_RECONNECT.\n\ + \n\r\n\x05\x04\x05\x02\0\x04\x12\x04\x8e\x01\x04\x0c\n\r\n\x05\x04\x05\ + \x02\0\x05\x12\x04\x8e\x01\r\x13\n\r\n\x05\x04\x05\x02\0\x01\x12\x04\x8e\ + \x01\x14$\n\r\n\x05\x04\x05\x02\0\x03\x12\x04\x8e\x01'(\nv\n\x04\x04\x05\ + \x02\x01\x12\x04\x92\x01\x041\x1ah\x20There\x20might\x20be\x20a\x20state\ + \x20transition.\x20May\x20be\x20absent;\x20absence\x20should\x20be\n\x20\ + treated\x20identically\x20to\x20NO_CHANGE.\n\n\r\n\x05\x04\x05\x02\x01\ + \x04\x12\x04\x92\x01\x04\x0c\n\r\n\x05\x04\x05\x02\x01\x06\x12\x04\x92\ + \x01\r\x1b\n\r\n\x05\x04\x05\x02\x01\x01\x12\x04\x92\x01\x1c,\n\r\n\x05\ + \x04\x05\x02\x01\x03\x12\x04\x92\x01/0\nc\n\x04\x04\x05\x02\x02\x12\x04\ + \x96\x01\x04(\x1aU\x20The\x20station\x20can\x20send\x20client\x20config\ + \x20info\x20piggybacked\n\x20on\x20any\x20message,\x20as\x20it\x20sees\ + \x20fit\n\n\r\n\x05\x04\x05\x02\x02\x04\x12\x04\x96\x01\x04\x0c\n\r\n\ + \x05\x04\x05\x02\x02\x06\x12\x04\x96\x01\r\x17\n\r\n\x05\x04\x05\x02\x02\ + \x01\x12\x04\x96\x01\x18#\n\r\n\x05\x04\x05\x02\x02\x03\x12\x04\x96\x01&\ + '\nP\n\x04\x04\x05\x02\x03\x12\x04\x99\x01\x04+\x1aB\x20If\x20state_tran\ + sition\x20==\x20S2C_ERROR,\x20this\x20field\x20is\x20the\x20explanation.\ + \n\n\r\n\x05\x04\x05\x02\x03\x04\x12\x04\x99\x01\x04\x0c\n\r\n\x05\x04\ + \x05\x02\x03\x06\x12\x04\x99\x01\r\x1b\n\r\n\x05\x04\x05\x02\x03\x01\x12\ + \x04\x99\x01\x1c&\n\r\n\x05\x04\x05\x02\x03\x03\x12\x04\x99\x01)*\nQ\n\ + \x04\x04\x05\x02\x04\x12\x04\x9c\x01\x04$\x1aC\x20Signals\x20client\x20t\ + o\x20stop\x20connecting\x20for\x20following\x20amount\x20of\x20seconds\n\ + \n\r\n\x05\x04\x05\x02\x04\x04\x12\x04\x9c\x01\x04\x0c\n\r\n\x05\x04\x05\ + \x02\x04\x05\x12\x04\x9c\x01\r\x13\n\r\n\x05\x04\x05\x02\x04\x01\x12\x04\ + \x9c\x01\x14\x1f\n\r\n\x05\x04\x05\x02\x04\x03\x12\x04\x9c\x01\"#\nK\n\ + \x04\x04\x05\x02\x05\x12\x04\x9f\x01\x04#\x1a=\x20Sent\x20in\x20SESSION_\ + INIT,\x20identifies\x20the\x20station\x20that\x20picked\x20up\n\n\r\n\ + \x05\x04\x05\x02\x05\x04\x12\x04\x9f\x01\x04\x0c\n\r\n\x05\x04\x05\x02\ + \x05\x05\x12\x04\x9f\x01\r\x13\n\r\n\x05\x04\x05\x02\x05\x01\x12\x04\x9f\ + \x01\x14\x1e\n\r\n\x05\x04\x05\x02\x05\x03\x12\x04\x9f\x01!\"\nG\n\x04\ + \x04\x05\x02\x06\x12\x04\xa2\x01\x04!\x1a9\x20Random-sized\x20junk\x20to\ + \x20defeat\x20packet\x20size\x20fingerprinting.\n\n\r\n\x05\x04\x05\x02\ + \x06\x04\x12\x04\xa2\x01\x04\x0c\n\r\n\x05\x04\x05\x02\x06\x05\x12\x04\ + \xa2\x01\r\x12\n\r\n\x05\x04\x05\x02\x06\x01\x12\x04\xa2\x01\x13\x1a\n\r\ + \n\x05\x04\x05\x02\x06\x03\x12\x04\xa2\x01\x1d\x20\n\x0c\n\x02\x04\x06\ + \x12\x06\xa5\x01\0\xab\x01\x01\n\x0b\n\x03\x04\x06\x01\x12\x04\xa5\x01\ + \x08\x19\n\x0c\n\x04\x04\x06\x02\0\x12\x04\xa6\x01\x08&\n\r\n\x05\x04\ + \x06\x02\0\x04\x12\x04\xa6\x01\x08\x10\n\r\n\x05\x04\x06\x02\0\x05\x12\ + \x04\xa6\x01\x11\x15\n\r\n\x05\x04\x06\x02\0\x01\x12\x04\xa6\x01\x16!\n\ + \r\n\x05\x04\x06\x02\0\x03\x12\x04\xa6\x01$%\n\x0c\n\x04\x04\x06\x02\x01\ + \x12\x04\xa7\x01\x08%\n\r\n\x05\x04\x06\x02\x01\x04\x12\x04\xa7\x01\x08\ + \x10\n\r\n\x05\x04\x06\x02\x01\x05\x12\x04\xa7\x01\x11\x15\n\r\n\x05\x04\ + \x06\x02\x01\x01\x12\x04\xa7\x01\x16\x20\n\r\n\x05\x04\x06\x02\x01\x03\ + \x12\x04\xa7\x01#$\n\x0c\n\x04\x04\x06\x02\x02\x12\x04\xa8\x01\x08'\n\r\ + \n\x05\x04\x06\x02\x02\x04\x12\x04\xa8\x01\x08\x10\n\r\n\x05\x04\x06\x02\ + \x02\x05\x12\x04\xa8\x01\x11\x15\n\r\n\x05\x04\x06\x02\x02\x01\x12\x04\ + \xa8\x01\x16\"\n\r\n\x05\x04\x06\x02\x02\x03\x12\x04\xa8\x01%&\n\x0c\n\ + \x04\x04\x06\x02\x03\x12\x04\xa9\x01\x04\x1e\n\r\n\x05\x04\x06\x02\x03\ + \x04\x12\x04\xa9\x01\x04\x0c\n\r\n\x05\x04\x06\x02\x03\x05\x12\x04\xa9\ + \x01\r\x11\n\r\n\x05\x04\x06\x02\x03\x01\x12\x04\xa9\x01\x12\x19\n\r\n\ + \x05\x04\x06\x02\x03\x03\x12\x04\xa9\x01\x1c\x1d\n\x0c\n\x04\x04\x06\x02\ + \x04\x12\x04\xaa\x01\x04!\n\r\n\x05\x04\x06\x02\x04\x04\x12\x04\xaa\x01\ + \x04\x0c\n\r\n\x05\x04\x06\x02\x04\x05\x12\x04\xaa\x01\r\x11\n\r\n\x05\ + \x04\x06\x02\x04\x01\x12\x04\xaa\x01\x12\x1c\n\r\n\x05\x04\x06\x02\x04\ + \x03\x12\x04\xaa\x01\x1f\x20\n\x0c\n\x02\x04\x07\x12\x06\xad\x01\0\xd9\ + \x01\x01\n\x0b\n\x03\x04\x07\x01\x12\x04\xad\x01\x08\x17\n\x0c\n\x04\x04\ + \x07\x02\0\x12\x04\xae\x01\x04)\n\r\n\x05\x04\x07\x02\0\x04\x12\x04\xae\ + \x01\x04\x0c\n\r\n\x05\x04\x07\x02\0\x05\x12\x04\xae\x01\r\x13\n\r\n\x05\ + \x04\x07\x02\0\x01\x12\x04\xae\x01\x14$\n\r\n\x05\x04\x07\x02\0\x03\x12\ + \x04\xae\x01'(\n\xd0\x01\n\x04\x04\x07\x02\x01\x12\x04\xb3\x01\x04.\x1a\ + \xc1\x01\x20The\x20client\x20reports\x20its\x20decoy\x20list's\x20versio\ + n\x20number\x20here,\x20which\x20the\n\x20station\x20can\x20use\x20to\ + \x20decide\x20whether\x20to\x20send\x20an\x20updated\x20one.\x20The\x20s\ + tation\n\x20should\x20always\x20send\x20a\x20list\x20if\x20this\x20field\ + \x20is\x20set\x20to\x200.\n\n\r\n\x05\x04\x07\x02\x01\x04\x12\x04\xb3\ + \x01\x04\x0c\n\r\n\x05\x04\x07\x02\x01\x05\x12\x04\xb3\x01\r\x13\n\r\n\ + \x05\x04\x07\x02\x01\x01\x12\x04\xb3\x01\x14)\n\r\n\x05\x04\x07\x02\x01\ + \x03\x12\x04\xb3\x01,-\n\x0c\n\x04\x04\x07\x02\x02\x12\x04\xb5\x01\x041\ + \n\r\n\x05\x04\x07\x02\x02\x04\x12\x04\xb5\x01\x04\x0c\n\r\n\x05\x04\x07\ + \x02\x02\x06\x12\x04\xb5\x01\r\x1b\n\r\n\x05\x04\x07\x02\x02\x01\x12\x04\ + \xb5\x01\x1c,\n\r\n\x05\x04\x07\x02\x02\x03\x12\x04\xb5\x01/0\n\x80\x01\ + \n\x04\x04\x07\x02\x03\x12\x04\xb9\x01\x04$\x1ar\x20The\x20position\x20i\ + n\x20the\x20overall\x20session's\x20upload\x20sequence\x20where\x20the\ + \x20current\n\x20YIELD=>ACQUIRE\x20switchover\x20is\x20happening.\n\n\r\ + \n\x05\x04\x07\x02\x03\x04\x12\x04\xb9\x01\x04\x0c\n\r\n\x05\x04\x07\x02\ + \x03\x05\x12\x04\xb9\x01\r\x13\n\r\n\x05\x04\x07\x02\x03\x01\x12\x04\xb9\ + \x01\x14\x1f\n\r\n\x05\x04\x07\x02\x03\x03\x12\x04\xb9\x01\"#\nq\n\x04\ + \x04\x07\x02\x04\x12\x04\xbe\x01\x04'\x1ac\x20List\x20of\x20decoys\x20th\ + at\x20client\x20have\x20unsuccessfully\x20tried\x20in\x20current\x20sess\ + ion.\n\x20Could\x20be\x20sent\x20in\x20chunks\n\n\r\n\x05\x04\x07\x02\ + \x04\x04\x12\x04\xbe\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x04\x05\x12\x04\ + \xbe\x01\r\x13\n\r\n\x05\x04\x07\x02\x04\x01\x12\x04\xbe\x01\x14!\n\r\n\ + \x05\x04\x07\x02\x04\x03\x12\x04\xbe\x01$&\n\x0c\n\x04\x04\x07\x02\x05\ + \x12\x04\xc0\x01\x04%\n\r\n\x05\x04\x07\x02\x05\x04\x12\x04\xc0\x01\x04\ + \x0c\n\r\n\x05\x04\x07\x02\x05\x06\x12\x04\xc0\x01\r\x19\n\r\n\x05\x04\ + \x07\x02\x05\x01\x12\x04\xc0\x01\x1a\x1f\n\r\n\x05\x04\x07\x02\x05\x03\ + \x12\x04\xc0\x01\"$\nk\n\x04\x04\x07\x02\x06\x12\x04\xc3\x01\x04*\x1a]\ + \x20NullTransport,\x20MinTransport,\x20Obfs4Transport,\x20etc.\x20Transp\ + ort\x20type\x20we\x20want\x20from\x20phantom\x20proxy\n\n\r\n\x05\x04\ + \x07\x02\x06\x04\x12\x04\xc3\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x06\x06\ + \x12\x04\xc3\x01\r\x1a\n\r\n\x05\x04\x07\x02\x06\x01\x12\x04\xc3\x01\x1b\ + $\n\r\n\x05\x04\x07\x02\x06\x03\x12\x04\xc3\x01')\n\xc8\x03\n\x04\x04\ + \x07\x02\x07\x12\x04\xcb\x01\x04(\x1a\xb9\x03\x20Station\x20is\x20only\ + \x20required\x20to\x20check\x20this\x20variable\x20during\x20session\x20\ + initialization.\n\x20If\x20set,\x20station\x20must\x20facilitate\x20conn\ + ection\x20to\x20said\x20target\x20by\x20itself,\x20i.e.\x20write\x20into\ + \x20squid\n\x20socket\x20an\x20HTTP/SOCKS/any\x20other\x20connection\x20\ + request.\n\x20covert_address\x20must\x20have\x20exactly\x20one\x20':'\ + \x20colon,\x20that\x20separates\x20host\x20(literal\x20IP\x20address\x20\ + or\n\x20resolvable\x20hostname)\x20and\x20port\n\x20TODO:\x20make\x20it\ + \x20required\x20for\x20initialization,\x20and\x20stop\x20connecting\x20a\ + ny\x20client\x20straight\x20to\x20squid?\n\n\r\n\x05\x04\x07\x02\x07\x04\ + \x12\x04\xcb\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x07\x05\x12\x04\xcb\x01\r\ + \x13\n\r\n\x05\x04\x07\x02\x07\x01\x12\x04\xcb\x01\x14\"\n\r\n\x05\x04\ + \x07\x02\x07\x03\x12\x04\xcb\x01%'\nR\n\x04\x04\x07\x02\x08\x12\x04\xce\ + \x01\x042\x1aD\x20Used\x20in\x20dark\x20decoys\x20to\x20signal\x20which\ + \x20dark\x20decoy\x20it\x20will\x20connect\x20to.\n\n\r\n\x05\x04\x07\ + \x02\x08\x04\x12\x04\xce\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x08\x05\x12\ + \x04\xce\x01\r\x13\n\r\n\x05\x04\x07\x02\x08\x01\x12\x04\xce\x01\x14,\n\ + \r\n\x05\x04\x07\x02\x08\x03\x12\x04\xce\x01/1\nR\n\x04\x04\x07\x02\t\ + \x12\x04\xd1\x01\x04\"\x1aD\x20Used\x20to\x20indicate\x20to\x20server\ + \x20if\x20client\x20is\x20registering\x20v4,\x20v6\x20or\x20both\n\n\r\n\ + \x05\x04\x07\x02\t\x04\x12\x04\xd1\x01\x04\x0c\n\r\n\x05\x04\x07\x02\t\ + \x05\x12\x04\xd1\x01\r\x11\n\r\n\x05\x04\x07\x02\t\x01\x12\x04\xd1\x01\ + \x12\x1c\n\r\n\x05\x04\x07\x02\t\x03\x12\x04\xd1\x01\x1f!\n\x0c\n\x04\ + \x04\x07\x02\n\x12\x04\xd2\x01\x04\"\n\r\n\x05\x04\x07\x02\n\x04\x12\x04\ + \xd2\x01\x04\x0c\n\r\n\x05\x04\x07\x02\n\x05\x12\x04\xd2\x01\r\x11\n\r\n\ + \x05\x04\x07\x02\n\x01\x12\x04\xd2\x01\x12\x1c\n\r\n\x05\x04\x07\x02\n\ + \x03\x12\x04\xd2\x01\x1f!\nD\n\x04\x04\x07\x02\x0b\x12\x04\xd5\x01\x08.\ + \x1a6\x20A\x20collection\x20of\x20optional\x20flags\x20for\x20the\x20reg\ + istration.\n\n\r\n\x05\x04\x07\x02\x0b\x04\x12\x04\xd5\x01\x08\x10\n\r\n\ + \x05\x04\x07\x02\x0b\x06\x12\x04\xd5\x01\x11\"\n\r\n\x05\x04\x07\x02\x0b\ + \x01\x12\x04\xd5\x01#(\n\r\n\x05\x04\x07\x02\x0b\x03\x12\x04\xd5\x01+-\n\ + G\n\x04\x04\x07\x02\x0c\x12\x04\xd8\x01\x04!\x1a9\x20Random-sized\x20jun\ + k\x20to\x20defeat\x20packet\x20size\x20fingerprinting.\n\n\r\n\x05\x04\ + \x07\x02\x0c\x04\x12\x04\xd8\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x0c\x05\ + \x12\x04\xd8\x01\r\x12\n\r\n\x05\x04\x07\x02\x0c\x01\x12\x04\xd8\x01\x13\ + \x1a\n\r\n\x05\x04\x07\x02\x0c\x03\x12\x04\xd8\x01\x1d\x20\n\x0c\n\x02\ + \x05\x05\x12\x06\xdc\x01\0\xe0\x01\x01\n\x0b\n\x03\x05\x05\x01\x12\x04\ + \xdc\x01\x05\x17\n\x0c\n\x04\x05\x05\x02\0\x12\x04\xdd\x01\x08\x15\n\r\n\ + \x05\x05\x05\x02\0\x01\x12\x04\xdd\x01\x08\x10\n\r\n\x05\x05\x05\x02\0\ + \x02\x12\x04\xdd\x01\x13\x14\n\x0c\n\x04\x05\x05\x02\x01\x12\x04\xde\x01\ + \x08\x10\n\r\n\x05\x05\x05\x02\x01\x01\x12\x04\xde\x01\x08\x0b\n\r\n\x05\ + \x05\x05\x02\x01\x02\x12\x04\xde\x01\x0e\x0f\n\x0c\n\x04\x05\x05\x02\x02\ + \x12\x04\xdf\x01\x04\x18\n\r\n\x05\x05\x05\x02\x02\x01\x12\x04\xdf\x01\ + \x04\x13\n\r\n\x05\x05\x05\x02\x02\x02\x12\x04\xdf\x01\x16\x17\n\x0c\n\ + \x02\x04\x08\x12\x06\xe2\x01\0\xec\x01\x01\n\x0b\n\x03\x04\x08\x01\x12\ + \x04\xe2\x01\x08\x12\n\x0c\n\x04\x04\x08\x02\0\x12\x04\xe3\x01\x08)\n\r\ + \n\x05\x04\x08\x02\0\x04\x12\x04\xe3\x01\x08\x10\n\r\n\x05\x04\x08\x02\0\ + \x05\x12\x04\xe3\x01\x11\x16\n\r\n\x05\x04\x08\x02\0\x01\x12\x04\xe3\x01\ + \x17$\n\r\n\x05\x04\x08\x02\0\x03\x12\x04\xe3\x01'(\n\x0c\n\x04\x04\x08\ + \x02\x01\x12\x04\xe4\x01\x08:\n\r\n\x05\x04\x08\x02\x01\x04\x12\x04\xe4\ + \x01\x08\x10\n\r\n\x05\x04\x08\x02\x01\x06\x12\x04\xe4\x01\x11\x20\n\r\n\ + \x05\x04\x08\x02\x01\x01\x12\x04\xe4\x01!5\n\r\n\x05\x04\x08\x02\x01\x03\ + \x12\x04\xe4\x0189\n\x0c\n\x04\x04\x08\x02\x02\x12\x04\xe5\x01\x048\n\r\ + \n\x05\x04\x08\x02\x02\x04\x12\x04\xe5\x01\x04\x0c\n\r\n\x05\x04\x08\x02\ + \x02\x06\x12\x04\xe5\x01\r\x1f\n\r\n\x05\x04\x08\x02\x02\x01\x12\x04\xe5\ + \x01\x203\n\r\n\x05\x04\x08\x02\x02\x03\x12\x04\xe5\x0167\nC\n\x04\x04\ + \x08\x02\x03\x12\x04\xe8\x01\x04,\x1a5\x20client\x20source\x20address\ + \x20when\x20receiving\x20a\x20registration\n\n\r\n\x05\x04\x08\x02\x03\ + \x04\x12\x04\xe8\x01\x04\x0c\n\r\n\x05\x04\x08\x02\x03\x05\x12\x04\xe8\ + \x01\r\x12\n\r\n\x05\x04\x08\x02\x03\x01\x12\x04\xe8\x01\x13'\n\r\n\x05\ + \x04\x08\x02\x03\x03\x12\x04\xe8\x01*+\nH\n\x04\x04\x08\x02\x04\x12\x04\ + \xeb\x01\x04%\x1a:\x20Decoy\x20address\x20used\x20when\x20registering\ + \x20over\x20Decoy\x20registrar\n\n\r\n\x05\x04\x08\x02\x04\x04\x12\x04\ + \xeb\x01\x04\x0c\n\r\n\x05\x04\x08\x02\x04\x05\x12\x04\xeb\x01\r\x12\n\r\ + \n\x05\x04\x08\x02\x04\x01\x12\x04\xeb\x01\x13\x20\n\r\n\x05\x04\x08\x02\ + \x04\x03\x12\x04\xeb\x01#$\n\x0c\n\x02\x04\t\x12\x06\xee\x01\0\xfa\x01\ + \x01\n\x0b\n\x03\x04\t\x01\x12\x04\xee\x01\x08\x14\n9\n\x04\x04\t\x02\0\ + \x12\x04\xef\x01\x04.\"+\x20how\x20many\x20decoys\x20were\x20tried\x20be\ + fore\x20success\n\n\r\n\x05\x04\t\x02\0\x04\x12\x04\xef\x01\x04\x0c\n\r\ + \n\x05\x04\t\x02\0\x05\x12\x04\xef\x01\r\x13\n\r\n\x05\x04\t\x02\0\x01\ + \x12\x04\xef\x01\x14(\n\r\n\x05\x04\t\x02\0\x03\x12\x04\xef\x01+-\nm\n\ + \x04\x04\t\x02\x01\x12\x04\xf4\x01\x04/\x1a\x1e\x20Applicable\x20to\x20w\ + hole\x20session:\n\"\x1a\x20includes\x20failed\x20attempts\n2#\x20Timing\ + s\x20below\x20are\x20in\x20milliseconds\n\n\r\n\x05\x04\t\x02\x01\x04\ + \x12\x04\xf4\x01\x04\x0c\n\r\n\x05\x04\t\x02\x01\x05\x12\x04\xf4\x01\r\ + \x13\n\r\n\x05\x04\t\x02\x01\x01\x12\x04\xf4\x01\x14)\n\r\n\x05\x04\t\ + \x02\x01\x03\x12\x04\xf4\x01,.\nR\n\x04\x04\t\x02\x02\x12\x04\xf7\x01\ + \x04(\x1a\x1f\x20Last\x20(i.e.\x20successful)\x20decoy:\n\"#\x20measured\ + \x20during\x20initial\x20handshake\n\n\r\n\x05\x04\t\x02\x02\x04\x12\x04\ + \xf7\x01\x04\x0c\n\r\n\x05\x04\t\x02\x02\x05\x12\x04\xf7\x01\r\x13\n\r\n\ + \x05\x04\t\x02\x02\x01\x12\x04\xf7\x01\x14\"\n\r\n\x05\x04\t\x02\x02\x03\ + \x12\x04\xf7\x01%'\n%\n\x04\x04\t\x02\x03\x12\x04\xf8\x01\x04&\"\x17\x20\ + includes\x20tcp\x20to\x20decoy\n\n\r\n\x05\x04\t\x02\x03\x04\x12\x04\xf8\ + \x01\x04\x0c\n\r\n\x05\x04\t\x02\x03\x05\x12\x04\xf8\x01\r\x13\n\r\n\x05\ + \x04\t\x02\x03\x01\x12\x04\xf8\x01\x14\x20\n\r\n\x05\x04\t\x02\x03\x03\ + \x12\x04\xf8\x01#%\nB\n\x04\x04\t\x02\x04\x12\x04\xf9\x01\x04&\"4\x20mea\ + sured\x20when\x20establishing\x20tcp\x20connection\x20to\x20decot\n\n\r\ + \n\x05\x04\t\x02\x04\x04\x12\x04\xf9\x01\x04\x0c\n\r\n\x05\x04\t\x02\x04\ + \x05\x12\x04\xf9\x01\r\x13\n\r\n\x05\x04\t\x02\x04\x01\x12\x04\xf9\x01\ + \x14\x20\n\r\n\x05\x04\t\x02\x04\x03\x12\x04\xf9\x01#%\ "; -static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT; +static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::descriptor::FileDescriptorProto, +}; fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto { ::protobuf::parse_from_bytes(file_descriptor_proto_data).unwrap() } pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto { - file_descriptor_proto_lazy.get(|| { - parse_descriptor_proto() - }) + unsafe { + file_descriptor_proto_lazy.get(|| { + parse_descriptor_proto() + }) + } } diff --git a/registration-api/api_test.go b/registration-api/api_test.go index 0ee42d92..fc427ef0 100644 --- a/registration-api/api_test.go +++ b/registration-api/api_test.go @@ -6,6 +6,7 @@ import ( "fmt" "io/ioutil" "log" + "net" "net/http" "net/http/httptest" "os" @@ -29,7 +30,7 @@ func init() { hex.Decode(secret, secretHex) } -func generateClientToAPIPayload() (c2API *pb.ClientToAPI, marshaledc2API []byte) { +func generateC2SWrapperPayload() (c2API *pb.C2SWrapper, marshaledc2API []byte) { generation := uint32(0) covert := "1.2.3.4:1234" @@ -49,8 +50,8 @@ func generateClientToAPIPayload() (c2API *pb.ClientToAPI, marshaledc2API []byte) }, } - c2API = &pb.ClientToAPI{ - Secret: secret, + c2API = &pb.C2SWrapper{ + SharedSecret: secret, RegistrationPayload: &c2s, } @@ -59,15 +60,15 @@ func generateClientToAPIPayload() (c2API *pb.ClientToAPI, marshaledc2API []byte) return } -func TestZMQPayloadGeneration(t *testing.T) { - c2API, _ := generateClientToAPIPayload() +func TestC2SWrapperProcessing(t *testing.T) { + c2API, _ := generateC2SWrapperPayload() - zmqPayload, err := generateZMQPayload(c2API) + zmqPayload, err := processC2SWrapper(c2API, []byte(net.ParseIP("127.0.0.1").To16())) if err != nil { t.Fatalf("failed to generate ZMQ payload: expected nil, got %v", err) } - var retrievedPayload pb.ZMQPayload + var retrievedPayload pb.C2SWrapper err = proto.Unmarshal(zmqPayload, &retrievedPayload) if err != nil { t.Fatalf("failed to unmarshal ClientToStation from ZMQ payload: expected nil, got %v", err) @@ -88,6 +89,31 @@ func TestZMQPayloadGeneration(t *testing.T) { if retrievedPayload.RegistrationPayload.GetV6Support() != c2API.RegistrationPayload.GetV6Support() { t.Fatalf("v6 support in retrieved ClientToStation doesn't match: expected %v, got %v", c2API.RegistrationPayload.GetV6Support(), retrievedPayload.RegistrationPayload.GetV6Support()) } + + if net.IP(retrievedPayload.GetRegistrationAddress()).String() != "127.0.0.1" { + t.Fatalf("source address in retrieved C2Swrapper doesn't match: expected %v, got %v", "127.0.0.1", net.IP(retrievedPayload.GetRegistrationAddress()).String()) + } + + if retrievedPayload.GetRegistrationSource() != pb.RegistrationSource_API { + t.Fatalf("Registration source in retrieved C2Swrapper doesn't match: expected %v, got %v", pb.RegistrationSource_API, retrievedPayload.GetRegistrationSource()) + } + + altSource := pb.RegistrationSource_DetectorPrescan + c2API.RegistrationSource = &altSource + zmqPayload, err = processC2SWrapper(c2API, []byte(net.ParseIP("127.0.0.1").To16())) + if err != nil { + t.Fatalf("failed to generate ZMQ payload: expected nil, got %v", err) + } + + var retrievedPayload1 pb.C2SWrapper + err = proto.Unmarshal(zmqPayload, &retrievedPayload1) + if err != nil { + t.Fatalf("failed to unmarshal ClientToStation from ZMQ payload: expected nil, got %v", err) + } + + if retrievedPayload1.GetRegistrationSource() != pb.RegistrationSource_DetectorPrescan { + t.Fatalf("Registration source in retrieved C2Swrapper doesn't match: expected %v, got %v", pb.RegistrationSource_DetectorPrescan, retrievedPayload.GetRegistrationSource()) + } } func TestCorrectRegistration(t *testing.T) { @@ -102,7 +128,7 @@ func TestCorrectRegistration(t *testing.T) { logger: logger, } - _, body := generateClientToAPIPayload() + _, body := generateC2SWrapperPayload() r := httptest.NewRequest("POST", "/register", bytes.NewReader(body)) w := httptest.NewRecorder() @@ -136,6 +162,34 @@ func TestIncorrectMethod(t *testing.T) { } } +func TestParseIP(t *testing.T) { + resp := parseIP("127.0.0.1") + if resp.String() != "127.0.0.1" { + t.Fatalf("parseIP unable to parse raw ipv4 address") + } + + resp = parseIP("127.0.0.1:443") + if resp.String() != "127.0.0.1" { + t.Fatalf("parseIP unable to parse raw ipv4 address with port") + } + + resp = parseIP("2001::1") + if resp.String() != "2001::1" { + t.Fatalf("parseIP unable to parse raw ipv6 address") + } + + resp = parseIP("[2001::1]") + if resp != nil { + t.Fatal("parseIP unable to parse ipv6 address with brackets") + } + + resp = parseIP("[2001::1]:80") + if resp.String() != "2001::1" { + t.Fatal("parseIP unable to parse ipv6 address with port") + } + +} + func TestEmptyBody(t *testing.T) { s := server{ messageAccepter: nil, @@ -163,7 +217,7 @@ func TestBadAccepter(t *testing.T) { logger: logger, } - _, body := generateClientToAPIPayload() + _, body := generateC2SWrapperPayload() r := httptest.NewRequest("POST", "/register", bytes.NewReader(body)) w := httptest.NewRecorder() @@ -195,7 +249,7 @@ func BenchmarkRegistration(b *testing.B) { } s.messageAccepter = s.sendToZMQ - _, body := generateClientToAPIPayload() + _, body := generateC2SWrapperPayload() b.ResetTimer() for i := 0; i < b.N; i++ { diff --git a/registration-api/main.go b/registration-api/main.go index e3fda0b7..6fdd51f6 100644 --- a/registration-api/main.go +++ b/registration-api/main.go @@ -4,6 +4,7 @@ import ( "fmt" "io/ioutil" "log" + "net" "net/http" "os" "sync" @@ -69,7 +70,7 @@ func (s *server) register(w http.ResponseWriter, r *http.Request) { return } - payload := &pb.ClientToAPI{} + payload := &pb.C2SWrapper{} if err = proto.Unmarshal(in, payload); err != nil { s.logger.Println("failed to decode protobuf body:", err) http.Error(w, "Failed to decode protobuf body", http.StatusBadRequest) @@ -78,7 +79,12 @@ func (s *server) register(w http.ResponseWriter, r *http.Request) { // s.logger.Printf("received successful registration for covert address %s\n", payload.RegistrationPayload.GetCovertAddress()) - zmqPayload, err := generateZMQPayload(payload) + clientAddr := parseIP(requestIP) + if err != nil { + s.logger.Println("failed to get source address:", err) + } + + zmqPayload, err := processC2SWrapper(payload, []byte(clientAddr.To16())) if err != nil { s.logger.Println("failed to marshal ClientToStation into VSP:", err) w.WriteHeader(http.StatusInternalServerError) @@ -106,17 +112,56 @@ func (s *server) sendToZMQ(message []byte) error { return err } -func generateZMQPayload(clientToAPIProto *pb.ClientToAPI) ([]byte, error) { - payload := &pb.ZMQPayload{} - source := pb.RegistrationSource_API +func processC2SWrapper(clientToAPIProto *pb.C2SWrapper, clientAddr []byte) ([]byte, error) { + payload := &pb.C2SWrapper{} + + if clientToAPIProto == nil { + return nil, fmt.Errorf("unable to process nil C2SWrapper") + } + + // If the channel that the registration was received over was not specified + // in the C2SWrapper set it here as API. + if clientToAPIProto.RegistrationSource == nil { + source := pb.RegistrationSource_API + payload.RegistrationSource = &source + } else { + source := clientToAPIProto.GetRegistrationSource() + payload.RegistrationSource = &source + } + + // If the address that the registration was received from was NOT set in the + // C2SWrapper set it here to the source address of the API request. + if clientToAPIProto.RegistrationAddress == nil { + payload.RegistrationAddress = clientAddr + } - payload.SharedSecret = clientToAPIProto.Secret + payload.SharedSecret = clientToAPIProto.SharedSecret payload.RegistrationPayload = clientToAPIProto.RegistrationPayload - payload.RegistrationSource = &source return proto.Marshal(payload) } +// parseIP attempts to parse the IP address of a request from string format wether +// it has a port attached to it or not. Returns nil if parse fails. +func parseIP(addrPort string) *net.IP { + + // by default format from r.RemoteAddr is host:port + host, _, err := net.SplitHostPort(addrPort) + if err != nil || host == "" { + // if the request ends up as host only this should catch it. + addr := net.ParseIP(addrPort) + if addr == nil { + return nil + } + return &addr + } + + addr := net.ParseIP(host) + + return &addr + +} + func main() { var s server s.logger = log.New(os.Stdout, "[API] ", log.Ldate|log.Lmicroseconds) diff --git a/src/process_packet.rs b/src/process_packet.rs index 20aaf63b..f3ec82bb 100644 --- a/src/process_packet.rs +++ b/src/process_packet.rs @@ -21,7 +21,7 @@ use PerCoreGlobal; use util::IpPacket; use elligator; use protobuf::{Message, SingularPtrField}; -use signalling::{ZMQPayload, RegistrationSource}; +use signalling::{C2SWrapper, RegistrationSource}; const TLS_TYPE_APPLICATION_DATA: u8 = 0x17; @@ -305,7 +305,7 @@ impl PerCoreGlobal // res.2 => variable size payload (c2s) // form message for zmq - let mut zmq_msg = ZMQPayload::new(); + let mut zmq_msg = C2SWrapper::new(); let shared_secret = res.0.to_vec(); let vsp = res.2; diff --git a/src/signalling.rs b/src/signalling.rs index ca235b4c..87de47d1 100644 --- a/src/signalling.rs +++ b/src/signalling.rs @@ -1,12 +1,11 @@ -// This file is generated by rust-protobuf 2.16.2. Do not edit +// This file is generated by rust-protobuf 2.6.2. Do not edit // @generated -// https://github.com/rust-lang/rust-clippy/issues/702 +// https://github.com/Manishearth/rust-clippy/issues/702 #![allow(unknown_lints)] -#![allow(clippy::all)] +#![allow(clippy)] -#![allow(unused_attributes)] -#![rustfmt::skip] +#![cfg_attr(rustfmt, rustfmt_skip)] #![allow(box_pointers)] #![allow(dead_code)] @@ -15,13 +14,12 @@ #![allow(non_snake_case)] #![allow(non_upper_case_globals)] #![allow(trivial_casts)] +#![allow(unsafe_code)] #![allow(unused_imports)] #![allow(unused_results)] -//! Generated file from `signalling.proto` -/// Generated files are compatible only with the same version -/// of protobuf runtime. -// const _PROTOBUF_VERSION_CHECK: () = ::protobuf::VERSION_2_16_2; +use protobuf::Message as Message_imported_for_functions; +use protobuf::ProtobufEnum as ProtobufEnum_imported_for_functions; #[derive(PartialEq,Clone,Default)] pub struct PubKey { @@ -105,7 +103,7 @@ impl ::protobuf::Message for PubKey { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -138,12 +136,12 @@ impl ::protobuf::Message for PubKey { my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { if let Some(ref v) = self.key.as_ref() { os.write_bytes(1, &v)?; } if let Some(v) = self.field_type { - os.write_enum(2, ::protobuf::ProtobufEnum::value(&v))?; + os.write_enum(2, v.value())?; } os.write_unknown_fields(self.get_unknown_fields())?; ::std::result::Result::Ok(()) @@ -161,13 +159,13 @@ impl ::protobuf::Message for PubKey { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -180,30 +178,40 @@ impl ::protobuf::Message for PubKey { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "key", - |m: &PubKey| { &m.key }, - |m: &mut PubKey| { &mut m.key }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( - "type", - |m: &PubKey| { &m.field_type }, - |m: &mut PubKey| { &mut m.field_type }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "PubKey", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "key", + |m: &PubKey| { &m.key }, + |m: &mut PubKey| { &mut m.key }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( + "type", + |m: &PubKey| { &m.field_type }, + |m: &mut PubKey| { &mut m.field_type }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "PubKey", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static PubKey { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(PubKey::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const PubKey, + }; + unsafe { + instance.get(PubKey::new) + } } } @@ -216,14 +224,14 @@ impl ::protobuf::Clear for PubKey { } impl ::std::fmt::Debug for PubKey { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for PubKey { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } @@ -233,7 +241,7 @@ pub struct TLSDecoySpec { hostname: ::protobuf::SingularField<::std::string::String>, ipv4addr: ::std::option::Option, ipv6addr: ::protobuf::SingularField<::std::vec::Vec>, - pub pubkey: ::protobuf::SingularPtrField, + pubkey: ::protobuf::SingularPtrField, timeout: ::std::option::Option, tcpwin: ::std::option::Option, // special fields @@ -347,7 +355,7 @@ impl TLSDecoySpec { pub fn get_pubkey(&self) -> &PubKey { - self.pubkey.as_ref().unwrap_or_else(|| ::default_instance()) + self.pubkey.as_ref().unwrap_or_else(|| PubKey::default_instance()) } pub fn clear_pubkey(&mut self) { self.pubkey.clear(); @@ -425,7 +433,7 @@ impl ::protobuf::Message for TLSDecoySpec { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -495,7 +503,7 @@ impl ::protobuf::Message for TLSDecoySpec { my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { if let Some(ref v) = self.hostname.as_ref() { os.write_string(1, &v)?; } @@ -532,13 +540,13 @@ impl ::protobuf::Message for TLSDecoySpec { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -551,50 +559,60 @@ impl ::protobuf::Message for TLSDecoySpec { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( - "hostname", - |m: &TLSDecoySpec| { &m.hostname }, - |m: &mut TLSDecoySpec| { &mut m.hostname }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeFixed32>( - "ipv4addr", - |m: &TLSDecoySpec| { &m.ipv4addr }, - |m: &mut TLSDecoySpec| { &mut m.ipv4addr }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "ipv6addr", - |m: &TLSDecoySpec| { &m.ipv6addr }, - |m: &mut TLSDecoySpec| { &mut m.ipv6addr }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "pubkey", - |m: &TLSDecoySpec| { &m.pubkey }, - |m: &mut TLSDecoySpec| { &mut m.pubkey }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "timeout", - |m: &TLSDecoySpec| { &m.timeout }, - |m: &mut TLSDecoySpec| { &mut m.timeout }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "tcpwin", - |m: &TLSDecoySpec| { &m.tcpwin }, - |m: &mut TLSDecoySpec| { &mut m.tcpwin }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "TLSDecoySpec", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( + "hostname", + |m: &TLSDecoySpec| { &m.hostname }, + |m: &mut TLSDecoySpec| { &mut m.hostname }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeFixed32>( + "ipv4addr", + |m: &TLSDecoySpec| { &m.ipv4addr }, + |m: &mut TLSDecoySpec| { &mut m.ipv4addr }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "ipv6addr", + |m: &TLSDecoySpec| { &m.ipv6addr }, + |m: &mut TLSDecoySpec| { &mut m.ipv6addr }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "pubkey", + |m: &TLSDecoySpec| { &m.pubkey }, + |m: &mut TLSDecoySpec| { &mut m.pubkey }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "timeout", + |m: &TLSDecoySpec| { &m.timeout }, + |m: &mut TLSDecoySpec| { &mut m.timeout }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "tcpwin", + |m: &TLSDecoySpec| { &m.tcpwin }, + |m: &mut TLSDecoySpec| { &mut m.tcpwin }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "TLSDecoySpec", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static TLSDecoySpec { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(TLSDecoySpec::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const TLSDecoySpec, + }; + unsafe { + instance.get(TLSDecoySpec::new) + } } } @@ -611,25 +629,25 @@ impl ::protobuf::Clear for TLSDecoySpec { } impl ::std::fmt::Debug for TLSDecoySpec { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for TLSDecoySpec { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } #[derive(PartialEq,Clone,Default)] pub struct ClientConf { // message fields - pub decoy_list: ::protobuf::SingularPtrField, + decoy_list: ::protobuf::SingularPtrField, generation: ::std::option::Option, - pub default_pubkey: ::protobuf::SingularPtrField, - pub dark_decoy_blocks: ::protobuf::SingularPtrField, - pub conjure_pubkey: ::protobuf::SingularPtrField, + default_pubkey: ::protobuf::SingularPtrField, + dark_decoy_blocks: ::protobuf::SingularPtrField, + conjure_pubkey: ::protobuf::SingularPtrField, // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, @@ -650,7 +668,7 @@ impl ClientConf { pub fn get_decoy_list(&self) -> &DecoyList { - self.decoy_list.as_ref().unwrap_or_else(|| ::default_instance()) + self.decoy_list.as_ref().unwrap_or_else(|| DecoyList::default_instance()) } pub fn clear_decoy_list(&mut self) { self.decoy_list.clear(); @@ -702,7 +720,7 @@ impl ClientConf { pub fn get_default_pubkey(&self) -> &PubKey { - self.default_pubkey.as_ref().unwrap_or_else(|| ::default_instance()) + self.default_pubkey.as_ref().unwrap_or_else(|| PubKey::default_instance()) } pub fn clear_default_pubkey(&mut self) { self.default_pubkey.clear(); @@ -735,7 +753,7 @@ impl ClientConf { pub fn get_dark_decoy_blocks(&self) -> &DarkDecoyBlocks { - self.dark_decoy_blocks.as_ref().unwrap_or_else(|| ::default_instance()) + self.dark_decoy_blocks.as_ref().unwrap_or_else(|| DarkDecoyBlocks::default_instance()) } pub fn clear_dark_decoy_blocks(&mut self) { self.dark_decoy_blocks.clear(); @@ -768,7 +786,7 @@ impl ClientConf { pub fn get_conjure_pubkey(&self) -> &PubKey { - self.conjure_pubkey.as_ref().unwrap_or_else(|| ::default_instance()) + self.conjure_pubkey.as_ref().unwrap_or_else(|| PubKey::default_instance()) } pub fn clear_conjure_pubkey(&mut self) { self.conjure_pubkey.clear(); @@ -823,7 +841,7 @@ impl ::protobuf::Message for ClientConf { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -882,7 +900,7 @@ impl ::protobuf::Message for ClientConf { my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { if let Some(ref v) = self.decoy_list.as_ref() { os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?; os.write_raw_varint32(v.get_cached_size())?; @@ -922,13 +940,13 @@ impl ::protobuf::Message for ClientConf { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -941,45 +959,55 @@ impl ::protobuf::Message for ClientConf { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "decoy_list", - |m: &ClientConf| { &m.decoy_list }, - |m: &mut ClientConf| { &mut m.decoy_list }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "generation", - |m: &ClientConf| { &m.generation }, - |m: &mut ClientConf| { &mut m.generation }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "default_pubkey", - |m: &ClientConf| { &m.default_pubkey }, - |m: &mut ClientConf| { &mut m.default_pubkey }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "dark_decoy_blocks", - |m: &ClientConf| { &m.dark_decoy_blocks }, - |m: &mut ClientConf| { &mut m.dark_decoy_blocks }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "conjure_pubkey", - |m: &ClientConf| { &m.conjure_pubkey }, - |m: &mut ClientConf| { &mut m.conjure_pubkey }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "ClientConf", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "decoy_list", + |m: &ClientConf| { &m.decoy_list }, + |m: &mut ClientConf| { &mut m.decoy_list }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "generation", + |m: &ClientConf| { &m.generation }, + |m: &mut ClientConf| { &mut m.generation }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "default_pubkey", + |m: &ClientConf| { &m.default_pubkey }, + |m: &mut ClientConf| { &mut m.default_pubkey }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "dark_decoy_blocks", + |m: &ClientConf| { &m.dark_decoy_blocks }, + |m: &mut ClientConf| { &mut m.dark_decoy_blocks }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "conjure_pubkey", + |m: &ClientConf| { &m.conjure_pubkey }, + |m: &mut ClientConf| { &mut m.conjure_pubkey }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "ClientConf", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static ClientConf { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(ClientConf::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ClientConf, + }; + unsafe { + instance.get(ClientConf::new) + } } } @@ -995,21 +1023,21 @@ impl ::protobuf::Clear for ClientConf { } impl ::std::fmt::Debug for ClientConf { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for ClientConf { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } #[derive(PartialEq,Clone,Default)] pub struct DecoyList { // message fields - pub tls_decoys: ::protobuf::RepeatedField, + tls_decoys: ::protobuf::RepeatedField, // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, @@ -1062,7 +1090,7 @@ impl ::protobuf::Message for DecoyList { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -1090,7 +1118,7 @@ impl ::protobuf::Message for DecoyList { my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { for v in &self.tls_decoys { os.write_tag(1, ::protobuf::wire_format::WireTypeLengthDelimited)?; os.write_raw_varint32(v.get_cached_size())?; @@ -1112,13 +1140,13 @@ impl ::protobuf::Message for DecoyList { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -1131,25 +1159,35 @@ impl ::protobuf::Message for DecoyList { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "tls_decoys", - |m: &DecoyList| { &m.tls_decoys }, - |m: &mut DecoyList| { &mut m.tls_decoys }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "DecoyList", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "tls_decoys", + |m: &DecoyList| { &m.tls_decoys }, + |m: &mut DecoyList| { &mut m.tls_decoys }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "DecoyList", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static DecoyList { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(DecoyList::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const DecoyList, + }; + unsafe { + instance.get(DecoyList::new) + } } } @@ -1161,21 +1199,21 @@ impl ::protobuf::Clear for DecoyList { } impl ::std::fmt::Debug for DecoyList { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for DecoyList { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } #[derive(PartialEq,Clone,Default)] pub struct DarkDecoyBlocks { // message fields - pub blocks: ::protobuf::RepeatedField<::std::string::String>, + blocks: ::protobuf::RepeatedField<::std::string::String>, // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, @@ -1223,7 +1261,7 @@ impl ::protobuf::Message for DarkDecoyBlocks { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -1250,7 +1288,7 @@ impl ::protobuf::Message for DarkDecoyBlocks { my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { for v in &self.blocks { os.write_string(1, &v)?; }; @@ -1270,13 +1308,13 @@ impl ::protobuf::Message for DarkDecoyBlocks { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -1289,25 +1327,35 @@ impl ::protobuf::Message for DarkDecoyBlocks { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( - "blocks", - |m: &DarkDecoyBlocks| { &m.blocks }, - |m: &mut DarkDecoyBlocks| { &mut m.blocks }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "DarkDecoyBlocks", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( + "blocks", + |m: &DarkDecoyBlocks| { &m.blocks }, + |m: &mut DarkDecoyBlocks| { &mut m.blocks }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "DarkDecoyBlocks", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static DarkDecoyBlocks { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(DarkDecoyBlocks::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const DarkDecoyBlocks, + }; + unsafe { + instance.get(DarkDecoyBlocks::new) + } } } @@ -1319,14 +1367,14 @@ impl ::protobuf::Clear for DarkDecoyBlocks { } impl ::std::fmt::Debug for DarkDecoyBlocks { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for DarkDecoyBlocks { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } @@ -1335,7 +1383,7 @@ pub struct StationToClient { // message fields protocol_version: ::std::option::Option, state_transition: ::std::option::Option, - pub config_info: ::protobuf::SingularPtrField, + config_info: ::protobuf::SingularPtrField, err_reason: ::std::option::Option, tmp_backoff: ::std::option::Option, station_id: ::protobuf::SingularField<::std::string::String>, @@ -1398,7 +1446,7 @@ impl StationToClient { pub fn get_config_info(&self) -> &ClientConf { - self.config_info.as_ref().unwrap_or_else(|| ::default_instance()) + self.config_info.as_ref().unwrap_or_else(|| ClientConf::default_instance()) } pub fn clear_config_info(&mut self) { self.config_info.clear(); @@ -1548,7 +1596,7 @@ impl ::protobuf::Message for StationToClient { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -1620,12 +1668,12 @@ impl ::protobuf::Message for StationToClient { my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { if let Some(v) = self.protocol_version { os.write_uint32(1, v)?; } if let Some(v) = self.state_transition { - os.write_enum(2, ::protobuf::ProtobufEnum::value(&v))?; + os.write_enum(2, v.value())?; } if let Some(ref v) = self.config_info.as_ref() { os.write_tag(3, ::protobuf::wire_format::WireTypeLengthDelimited)?; @@ -1633,7 +1681,7 @@ impl ::protobuf::Message for StationToClient { v.write_to_with_cached_sizes(os)?; } if let Some(v) = self.err_reason { - os.write_enum(4, ::protobuf::ProtobufEnum::value(&v))?; + os.write_enum(4, v.value())?; } if let Some(v) = self.tmp_backoff { os.write_uint32(5, v)?; @@ -1660,13 +1708,13 @@ impl ::protobuf::Message for StationToClient { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -1679,55 +1727,65 @@ impl ::protobuf::Message for StationToClient { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "protocol_version", - |m: &StationToClient| { &m.protocol_version }, - |m: &mut StationToClient| { &mut m.protocol_version }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( - "state_transition", - |m: &StationToClient| { &m.state_transition }, - |m: &mut StationToClient| { &mut m.state_transition }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "config_info", - |m: &StationToClient| { &m.config_info }, - |m: &mut StationToClient| { &mut m.config_info }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( - "err_reason", - |m: &StationToClient| { &m.err_reason }, - |m: &mut StationToClient| { &mut m.err_reason }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "tmp_backoff", - |m: &StationToClient| { &m.tmp_backoff }, - |m: &mut StationToClient| { &mut m.tmp_backoff }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( - "station_id", - |m: &StationToClient| { &m.station_id }, - |m: &mut StationToClient| { &mut m.station_id }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "padding", - |m: &StationToClient| { &m.padding }, - |m: &mut StationToClient| { &mut m.padding }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "StationToClient", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "protocol_version", + |m: &StationToClient| { &m.protocol_version }, + |m: &mut StationToClient| { &mut m.protocol_version }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( + "state_transition", + |m: &StationToClient| { &m.state_transition }, + |m: &mut StationToClient| { &mut m.state_transition }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "config_info", + |m: &StationToClient| { &m.config_info }, + |m: &mut StationToClient| { &mut m.config_info }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( + "err_reason", + |m: &StationToClient| { &m.err_reason }, + |m: &mut StationToClient| { &mut m.err_reason }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "tmp_backoff", + |m: &StationToClient| { &m.tmp_backoff }, + |m: &mut StationToClient| { &mut m.tmp_backoff }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( + "station_id", + |m: &StationToClient| { &m.station_id }, + |m: &mut StationToClient| { &mut m.station_id }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "padding", + |m: &StationToClient| { &m.padding }, + |m: &mut StationToClient| { &mut m.padding }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "StationToClient", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static StationToClient { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(StationToClient::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const StationToClient, + }; + unsafe { + instance.get(StationToClient::new) + } } } @@ -1745,14 +1803,14 @@ impl ::protobuf::Clear for StationToClient { } impl ::std::fmt::Debug for StationToClient { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for StationToClient { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } @@ -1763,6 +1821,7 @@ pub struct RegistrationFlags { dark_decoy: ::std::option::Option, proxy_header: ::std::option::Option, use_TIL: ::std::option::Option, + prescanned: ::std::option::Option, // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, @@ -1854,6 +1913,25 @@ impl RegistrationFlags { pub fn set_use_TIL(&mut self, v: bool) { self.use_TIL = ::std::option::Option::Some(v); } + + // optional bool prescanned = 5; + + + pub fn get_prescanned(&self) -> bool { + self.prescanned.unwrap_or(false) + } + pub fn clear_prescanned(&mut self) { + self.prescanned = ::std::option::Option::None; + } + + pub fn has_prescanned(&self) -> bool { + self.prescanned.is_some() + } + + // Param is passed by value, moved + pub fn set_prescanned(&mut self, v: bool) { + self.prescanned = ::std::option::Option::Some(v); + } } impl ::protobuf::Message for RegistrationFlags { @@ -1861,7 +1939,7 @@ impl ::protobuf::Message for RegistrationFlags { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -1893,6 +1971,13 @@ impl ::protobuf::Message for RegistrationFlags { let tmp = is.read_bool()?; self.use_TIL = ::std::option::Option::Some(tmp); }, + 5 => { + if wire_type != ::protobuf::wire_format::WireTypeVarint { + return ::std::result::Result::Err(::protobuf::rt::unexpected_wire_type(wire_type)); + } + let tmp = is.read_bool()?; + self.prescanned = ::std::option::Option::Some(tmp); + }, _ => { ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; }, @@ -1917,12 +2002,15 @@ impl ::protobuf::Message for RegistrationFlags { if let Some(v) = self.use_TIL { my_size += 2; } + if let Some(v) = self.prescanned { + my_size += 2; + } my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); self.cached_size.set(my_size); my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { if let Some(v) = self.upload_only { os.write_bool(1, v)?; } @@ -1935,6 +2023,9 @@ impl ::protobuf::Message for RegistrationFlags { if let Some(v) = self.use_TIL { os.write_bool(4, v)?; } + if let Some(v) = self.prescanned { + os.write_bool(5, v)?; + } os.write_unknown_fields(self.get_unknown_fields())?; ::std::result::Result::Ok(()) } @@ -1951,13 +2042,13 @@ impl ::protobuf::Message for RegistrationFlags { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -1970,40 +2061,55 @@ impl ::protobuf::Message for RegistrationFlags { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( - "upload_only", - |m: &RegistrationFlags| { &m.upload_only }, - |m: &mut RegistrationFlags| { &mut m.upload_only }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( - "dark_decoy", - |m: &RegistrationFlags| { &m.dark_decoy }, - |m: &mut RegistrationFlags| { &mut m.dark_decoy }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( - "proxy_header", - |m: &RegistrationFlags| { &m.proxy_header }, - |m: &mut RegistrationFlags| { &mut m.proxy_header }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( - "use_TIL", - |m: &RegistrationFlags| { &m.use_TIL }, - |m: &mut RegistrationFlags| { &mut m.use_TIL }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "RegistrationFlags", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( + "upload_only", + |m: &RegistrationFlags| { &m.upload_only }, + |m: &mut RegistrationFlags| { &mut m.upload_only }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( + "dark_decoy", + |m: &RegistrationFlags| { &m.dark_decoy }, + |m: &mut RegistrationFlags| { &mut m.dark_decoy }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( + "proxy_header", + |m: &RegistrationFlags| { &m.proxy_header }, + |m: &mut RegistrationFlags| { &mut m.proxy_header }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( + "use_TIL", + |m: &RegistrationFlags| { &m.use_TIL }, + |m: &mut RegistrationFlags| { &mut m.use_TIL }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( + "prescanned", + |m: &RegistrationFlags| { &m.prescanned }, + |m: &mut RegistrationFlags| { &mut m.prescanned }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "RegistrationFlags", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static RegistrationFlags { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(RegistrationFlags::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const RegistrationFlags, + }; + unsafe { + instance.get(RegistrationFlags::new) + } } } @@ -2013,19 +2119,20 @@ impl ::protobuf::Clear for RegistrationFlags { self.dark_decoy = ::std::option::Option::None; self.proxy_header = ::std::option::Option::None; self.use_TIL = ::std::option::Option::None; + self.prescanned = ::std::option::Option::None; self.unknown_fields.clear(); } } impl ::std::fmt::Debug for RegistrationFlags { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for RegistrationFlags { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } @@ -2036,14 +2143,14 @@ pub struct ClientToStation { decoy_list_generation: ::std::option::Option, state_transition: ::std::option::Option, upload_sync: ::std::option::Option, - pub failed_decoys: ::protobuf::RepeatedField<::std::string::String>, - pub stats: ::protobuf::SingularPtrField, + failed_decoys: ::protobuf::RepeatedField<::std::string::String>, + stats: ::protobuf::SingularPtrField, transport: ::std::option::Option, covert_address: ::protobuf::SingularField<::std::string::String>, masked_decoy_server_name: ::protobuf::SingularField<::std::string::String>, v6_support: ::std::option::Option, v4_support: ::std::option::Option, - pub flags: ::protobuf::SingularPtrField, + flags: ::protobuf::SingularPtrField, padding: ::protobuf::SingularField<::std::vec::Vec>, // special fields pub unknown_fields: ::protobuf::UnknownFields, @@ -2166,7 +2273,7 @@ impl ClientToStation { pub fn get_stats(&self) -> &SessionStats { - self.stats.as_ref().unwrap_or_else(|| ::default_instance()) + self.stats.as_ref().unwrap_or_else(|| SessionStats::default_instance()) } pub fn clear_stats(&mut self) { self.stats.clear(); @@ -2199,7 +2306,7 @@ impl ClientToStation { pub fn get_transport(&self) -> TransportType { - self.transport.unwrap_or(TransportType::NullTransport) + self.transport.unwrap_or(TransportType::Null) } pub fn clear_transport(&mut self) { self.transport = ::std::option::Option::None; @@ -2328,7 +2435,7 @@ impl ClientToStation { pub fn get_flags(&self) -> &RegistrationFlags { - self.flags.as_ref().unwrap_or_else(|| ::default_instance()) + self.flags.as_ref().unwrap_or_else(|| RegistrationFlags::default_instance()) } pub fn clear_flags(&mut self) { self.flags.clear(); @@ -2409,7 +2516,7 @@ impl ::protobuf::Message for ClientToStation { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -2530,7 +2637,7 @@ impl ::protobuf::Message for ClientToStation { my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { if let Some(v) = self.protocol_version { os.write_uint32(1, v)?; } @@ -2538,7 +2645,7 @@ impl ::protobuf::Message for ClientToStation { os.write_uint32(2, v)?; } if let Some(v) = self.state_transition { - os.write_enum(3, ::protobuf::ProtobufEnum::value(&v))?; + os.write_enum(3, v.value())?; } if let Some(v) = self.upload_sync { os.write_uint64(4, v)?; @@ -2552,7 +2659,7 @@ impl ::protobuf::Message for ClientToStation { v.write_to_with_cached_sizes(os)?; } if let Some(v) = self.transport { - os.write_enum(12, ::protobuf::ProtobufEnum::value(&v))?; + os.write_enum(12, v.value())?; } if let Some(ref v) = self.covert_address.as_ref() { os.write_string(20, &v)?; @@ -2590,13 +2697,13 @@ impl ::protobuf::Message for ClientToStation { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -2609,85 +2716,95 @@ impl ::protobuf::Message for ClientToStation { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "protocol_version", - |m: &ClientToStation| { &m.protocol_version }, - |m: &mut ClientToStation| { &mut m.protocol_version }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "decoy_list_generation", - |m: &ClientToStation| { &m.decoy_list_generation }, - |m: &mut ClientToStation| { &mut m.decoy_list_generation }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( - "state_transition", - |m: &ClientToStation| { &m.state_transition }, - |m: &mut ClientToStation| { &mut m.state_transition }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint64>( - "upload_sync", - |m: &ClientToStation| { &m.upload_sync }, - |m: &mut ClientToStation| { &mut m.upload_sync }, - )); - fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( - "failed_decoys", - |m: &ClientToStation| { &m.failed_decoys }, - |m: &mut ClientToStation| { &mut m.failed_decoys }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "stats", - |m: &ClientToStation| { &m.stats }, - |m: &mut ClientToStation| { &mut m.stats }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( - "transport", - |m: &ClientToStation| { &m.transport }, - |m: &mut ClientToStation| { &mut m.transport }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( - "covert_address", - |m: &ClientToStation| { &m.covert_address }, - |m: &mut ClientToStation| { &mut m.covert_address }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( - "masked_decoy_server_name", - |m: &ClientToStation| { &m.masked_decoy_server_name }, - |m: &mut ClientToStation| { &mut m.masked_decoy_server_name }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( - "v6_support", - |m: &ClientToStation| { &m.v6_support }, - |m: &mut ClientToStation| { &mut m.v6_support }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( - "v4_support", - |m: &ClientToStation| { &m.v4_support }, - |m: &mut ClientToStation| { &mut m.v4_support }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "flags", - |m: &ClientToStation| { &m.flags }, - |m: &mut ClientToStation| { &mut m.flags }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "padding", - |m: &ClientToStation| { &m.padding }, - |m: &mut ClientToStation| { &mut m.padding }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "ClientToStation", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "protocol_version", + |m: &ClientToStation| { &m.protocol_version }, + |m: &mut ClientToStation| { &mut m.protocol_version }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "decoy_list_generation", + |m: &ClientToStation| { &m.decoy_list_generation }, + |m: &mut ClientToStation| { &mut m.decoy_list_generation }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( + "state_transition", + |m: &ClientToStation| { &m.state_transition }, + |m: &mut ClientToStation| { &mut m.state_transition }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint64>( + "upload_sync", + |m: &ClientToStation| { &m.upload_sync }, + |m: &mut ClientToStation| { &mut m.upload_sync }, + )); + fields.push(::protobuf::reflect::accessor::make_repeated_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( + "failed_decoys", + |m: &ClientToStation| { &m.failed_decoys }, + |m: &mut ClientToStation| { &mut m.failed_decoys }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "stats", + |m: &ClientToStation| { &m.stats }, + |m: &mut ClientToStation| { &mut m.stats }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( + "transport", + |m: &ClientToStation| { &m.transport }, + |m: &mut ClientToStation| { &mut m.transport }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( + "covert_address", + |m: &ClientToStation| { &m.covert_address }, + |m: &mut ClientToStation| { &mut m.covert_address }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeString>( + "masked_decoy_server_name", + |m: &ClientToStation| { &m.masked_decoy_server_name }, + |m: &mut ClientToStation| { &mut m.masked_decoy_server_name }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( + "v6_support", + |m: &ClientToStation| { &m.v6_support }, + |m: &mut ClientToStation| { &mut m.v6_support }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeBool>( + "v4_support", + |m: &ClientToStation| { &m.v4_support }, + |m: &mut ClientToStation| { &mut m.v4_support }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "flags", + |m: &ClientToStation| { &m.flags }, + |m: &mut ClientToStation| { &mut m.flags }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "padding", + |m: &ClientToStation| { &m.padding }, + |m: &mut ClientToStation| { &mut m.padding }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "ClientToStation", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static ClientToStation { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(ClientToStation::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ClientToStation, + }; + unsafe { + instance.get(ClientToStation::new) + } } } @@ -2711,79 +2828,82 @@ impl ::protobuf::Clear for ClientToStation { } impl ::std::fmt::Debug for ClientToStation { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for ClientToStation { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } #[derive(PartialEq,Clone,Default)] -pub struct ClientToAPI { +pub struct C2SWrapper { // message fields - secret: ::protobuf::SingularField<::std::vec::Vec>, - pub registration_payload: ::protobuf::SingularPtrField, + shared_secret: ::protobuf::SingularField<::std::vec::Vec>, + registration_payload: ::protobuf::SingularPtrField, + registration_source: ::std::option::Option, + registration_address: ::protobuf::SingularField<::std::vec::Vec>, + decoy_address: ::protobuf::SingularField<::std::vec::Vec>, // special fields pub unknown_fields: ::protobuf::UnknownFields, pub cached_size: ::protobuf::CachedSize, } -impl<'a> ::std::default::Default for &'a ClientToAPI { - fn default() -> &'a ClientToAPI { - ::default_instance() +impl<'a> ::std::default::Default for &'a C2SWrapper { + fn default() -> &'a C2SWrapper { + ::default_instance() } } -impl ClientToAPI { - pub fn new() -> ClientToAPI { +impl C2SWrapper { + pub fn new() -> C2SWrapper { ::std::default::Default::default() } - // optional bytes secret = 1; + // optional bytes shared_secret = 1; - pub fn get_secret(&self) -> &[u8] { - match self.secret.as_ref() { + pub fn get_shared_secret(&self) -> &[u8] { + match self.shared_secret.as_ref() { Some(v) => &v, None => &[], } } - pub fn clear_secret(&mut self) { - self.secret.clear(); + pub fn clear_shared_secret(&mut self) { + self.shared_secret.clear(); } - pub fn has_secret(&self) -> bool { - self.secret.is_some() + pub fn has_shared_secret(&self) -> bool { + self.shared_secret.is_some() } // Param is passed by value, moved - pub fn set_secret(&mut self, v: ::std::vec::Vec) { - self.secret = ::protobuf::SingularField::some(v); + pub fn set_shared_secret(&mut self, v: ::std::vec::Vec) { + self.shared_secret = ::protobuf::SingularField::some(v); } // Mutable pointer to the field. // If field is not initialized, it is initialized with default value first. - pub fn mut_secret(&mut self) -> &mut ::std::vec::Vec { - if self.secret.is_none() { - self.secret.set_default(); + pub fn mut_shared_secret(&mut self) -> &mut ::std::vec::Vec { + if self.shared_secret.is_none() { + self.shared_secret.set_default(); } - self.secret.as_mut().unwrap() + self.shared_secret.as_mut().unwrap() } // Take field - pub fn take_secret(&mut self) -> ::std::vec::Vec { - self.secret.take().unwrap_or_else(|| ::std::vec::Vec::new()) + pub fn take_shared_secret(&mut self) -> ::std::vec::Vec { + self.shared_secret.take().unwrap_or_else(|| ::std::vec::Vec::new()) } - // optional .tapdance.ClientToStation registration_payload = 2; + // optional .tapdance.ClientToStation registration_payload = 3; pub fn get_registration_payload(&self) -> &ClientToStation { - self.registration_payload.as_ref().unwrap_or_else(|| ::default_instance()) + self.registration_payload.as_ref().unwrap_or_else(|| ClientToStation::default_instance()) } pub fn clear_registration_payload(&mut self) { self.registration_payload.clear(); @@ -2811,255 +2931,100 @@ impl ClientToAPI { pub fn take_registration_payload(&mut self) -> ClientToStation { self.registration_payload.take().unwrap_or_else(|| ClientToStation::new()) } -} - -impl ::protobuf::Message for ClientToAPI { - fn is_initialized(&self) -> bool { - for v in &self.registration_payload { - if !v.is_initialized() { - return false; - } - }; - true - } - - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { - while !is.eof()? { - let (field_number, wire_type) = is.read_tag_unpack()?; - match field_number { - 1 => { - ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.secret)?; - }, - 2 => { - ::protobuf::rt::read_singular_message_into(wire_type, is, &mut self.registration_payload)?; - }, - _ => { - ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; - }, - }; - } - ::std::result::Result::Ok(()) - } - - // Compute sizes of nested messages - #[allow(unused_variables)] - fn compute_size(&self) -> u32 { - let mut my_size = 0; - if let Some(ref v) = self.secret.as_ref() { - my_size += ::protobuf::rt::bytes_size(1, &v); - } - if let Some(ref v) = self.registration_payload.as_ref() { - let len = v.compute_size(); - my_size += 1 + ::protobuf::rt::compute_raw_varint32_size(len) + len; - } - my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); - self.cached_size.set(my_size); - my_size - } - - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { - if let Some(ref v) = self.secret.as_ref() { - os.write_bytes(1, &v)?; - } - if let Some(ref v) = self.registration_payload.as_ref() { - os.write_tag(2, ::protobuf::wire_format::WireTypeLengthDelimited)?; - os.write_raw_varint32(v.get_cached_size())?; - v.write_to_with_cached_sizes(os)?; - } - os.write_unknown_fields(self.get_unknown_fields())?; - ::std::result::Result::Ok(()) - } - - fn get_cached_size(&self) -> u32 { - self.cached_size.get() - } - - fn get_unknown_fields(&self) -> &::protobuf::UnknownFields { - &self.unknown_fields - } - - fn mut_unknown_fields(&mut self) -> &mut ::protobuf::UnknownFields { - &mut self.unknown_fields - } - - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) - } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) - } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { - self - } - - fn descriptor(&self) -> &'static ::protobuf::reflect::MessageDescriptor { - Self::descriptor_static() - } - - fn new() -> ClientToAPI { - ClientToAPI::new() - } - fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "secret", - |m: &ClientToAPI| { &m.secret }, - |m: &mut ClientToAPI| { &mut m.secret }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "registration_payload", - |m: &ClientToAPI| { &m.registration_payload }, - |m: &mut ClientToAPI| { &mut m.registration_payload }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "ClientToAPI", - fields, - file_descriptor_proto() - ) - }) - } - - fn default_instance() -> &'static ClientToAPI { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(ClientToAPI::new) - } -} + // optional .tapdance.RegistrationSource registration_source = 4; -impl ::protobuf::Clear for ClientToAPI { - fn clear(&mut self) { - self.secret.clear(); - self.registration_payload.clear(); - self.unknown_fields.clear(); - } -} -impl ::std::fmt::Debug for ClientToAPI { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { - ::protobuf::text_format::fmt(self, f) + pub fn get_registration_source(&self) -> RegistrationSource { + self.registration_source.unwrap_or(RegistrationSource::Detector) } -} - -impl ::protobuf::reflect::ProtobufValue for ClientToAPI { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + pub fn clear_registration_source(&mut self) { + self.registration_source = ::std::option::Option::None; } -} - -#[derive(PartialEq,Clone,Default)] -pub struct ZMQPayload { - // message fields - shared_secret: ::protobuf::SingularField<::std::vec::Vec>, - pub registration_payload: ::protobuf::SingularPtrField, - registration_source: ::std::option::Option, - // special fields - pub unknown_fields: ::protobuf::UnknownFields, - pub cached_size: ::protobuf::CachedSize, -} -impl<'a> ::std::default::Default for &'a ZMQPayload { - fn default() -> &'a ZMQPayload { - ::default_instance() + pub fn has_registration_source(&self) -> bool { + self.registration_source.is_some() } -} -impl ZMQPayload { - pub fn new() -> ZMQPayload { - ::std::default::Default::default() + // Param is passed by value, moved + pub fn set_registration_source(&mut self, v: RegistrationSource) { + self.registration_source = ::std::option::Option::Some(v); } - // optional bytes shared_secret = 1; + // optional bytes registration_address = 6; - pub fn get_shared_secret(&self) -> &[u8] { - match self.shared_secret.as_ref() { + pub fn get_registration_address(&self) -> &[u8] { + match self.registration_address.as_ref() { Some(v) => &v, None => &[], } } - pub fn clear_shared_secret(&mut self) { - self.shared_secret.clear(); + pub fn clear_registration_address(&mut self) { + self.registration_address.clear(); } - pub fn has_shared_secret(&self) -> bool { - self.shared_secret.is_some() + pub fn has_registration_address(&self) -> bool { + self.registration_address.is_some() } // Param is passed by value, moved - pub fn set_shared_secret(&mut self, v: ::std::vec::Vec) { - self.shared_secret = ::protobuf::SingularField::some(v); + pub fn set_registration_address(&mut self, v: ::std::vec::Vec) { + self.registration_address = ::protobuf::SingularField::some(v); } // Mutable pointer to the field. // If field is not initialized, it is initialized with default value first. - pub fn mut_shared_secret(&mut self) -> &mut ::std::vec::Vec { - if self.shared_secret.is_none() { - self.shared_secret.set_default(); + pub fn mut_registration_address(&mut self) -> &mut ::std::vec::Vec { + if self.registration_address.is_none() { + self.registration_address.set_default(); } - self.shared_secret.as_mut().unwrap() + self.registration_address.as_mut().unwrap() } // Take field - pub fn take_shared_secret(&mut self) -> ::std::vec::Vec { - self.shared_secret.take().unwrap_or_else(|| ::std::vec::Vec::new()) + pub fn take_registration_address(&mut self) -> ::std::vec::Vec { + self.registration_address.take().unwrap_or_else(|| ::std::vec::Vec::new()) } - // optional .tapdance.ClientToStation registration_payload = 3; + // optional bytes decoy_address = 7; - pub fn get_registration_payload(&self) -> &ClientToStation { - self.registration_payload.as_ref().unwrap_or_else(|| ::default_instance()) + pub fn get_decoy_address(&self) -> &[u8] { + match self.decoy_address.as_ref() { + Some(v) => &v, + None => &[], + } } - pub fn clear_registration_payload(&mut self) { - self.registration_payload.clear(); + pub fn clear_decoy_address(&mut self) { + self.decoy_address.clear(); } - pub fn has_registration_payload(&self) -> bool { - self.registration_payload.is_some() + pub fn has_decoy_address(&self) -> bool { + self.decoy_address.is_some() } // Param is passed by value, moved - pub fn set_registration_payload(&mut self, v: ClientToStation) { - self.registration_payload = ::protobuf::SingularPtrField::some(v); + pub fn set_decoy_address(&mut self, v: ::std::vec::Vec) { + self.decoy_address = ::protobuf::SingularField::some(v); } // Mutable pointer to the field. // If field is not initialized, it is initialized with default value first. - pub fn mut_registration_payload(&mut self) -> &mut ClientToStation { - if self.registration_payload.is_none() { - self.registration_payload.set_default(); + pub fn mut_decoy_address(&mut self) -> &mut ::std::vec::Vec { + if self.decoy_address.is_none() { + self.decoy_address.set_default(); } - self.registration_payload.as_mut().unwrap() + self.decoy_address.as_mut().unwrap() } // Take field - pub fn take_registration_payload(&mut self) -> ClientToStation { - self.registration_payload.take().unwrap_or_else(|| ClientToStation::new()) - } - - // optional .tapdance.RegistrationSource registration_source = 4; - - - pub fn get_registration_source(&self) -> RegistrationSource { - self.registration_source.unwrap_or(RegistrationSource::Detector) - } - pub fn clear_registration_source(&mut self) { - self.registration_source = ::std::option::Option::None; - } - - pub fn has_registration_source(&self) -> bool { - self.registration_source.is_some() - } - - // Param is passed by value, moved - pub fn set_registration_source(&mut self, v: RegistrationSource) { - self.registration_source = ::std::option::Option::Some(v); + pub fn take_decoy_address(&mut self) -> ::std::vec::Vec { + self.decoy_address.take().unwrap_or_else(|| ::std::vec::Vec::new()) } } -impl ::protobuf::Message for ZMQPayload { +impl ::protobuf::Message for C2SWrapper { fn is_initialized(&self) -> bool { for v in &self.registration_payload { if !v.is_initialized() { @@ -3069,7 +3034,7 @@ impl ::protobuf::Message for ZMQPayload { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -3082,6 +3047,12 @@ impl ::protobuf::Message for ZMQPayload { 4 => { ::protobuf::rt::read_proto2_enum_with_unknown_fields_into(wire_type, is, &mut self.registration_source, 4, &mut self.unknown_fields)? }, + 6 => { + ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.registration_address)?; + }, + 7 => { + ::protobuf::rt::read_singular_bytes_into(wire_type, is, &mut self.decoy_address)?; + }, _ => { ::protobuf::rt::read_unknown_or_skip_group(field_number, wire_type, is, self.mut_unknown_fields())?; }, @@ -3104,12 +3075,18 @@ impl ::protobuf::Message for ZMQPayload { if let Some(v) = self.registration_source { my_size += ::protobuf::rt::enum_size(4, v); } + if let Some(ref v) = self.registration_address.as_ref() { + my_size += ::protobuf::rt::bytes_size(6, &v); + } + if let Some(ref v) = self.decoy_address.as_ref() { + my_size += ::protobuf::rt::bytes_size(7, &v); + } my_size += ::protobuf::rt::unknown_fields_size(self.get_unknown_fields()); self.cached_size.set(my_size); my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { if let Some(ref v) = self.shared_secret.as_ref() { os.write_bytes(1, &v)?; } @@ -3119,7 +3096,13 @@ impl ::protobuf::Message for ZMQPayload { v.write_to_with_cached_sizes(os)?; } if let Some(v) = self.registration_source { - os.write_enum(4, ::protobuf::ProtobufEnum::value(&v))?; + os.write_enum(4, v.value())?; + } + if let Some(ref v) = self.registration_address.as_ref() { + os.write_bytes(6, &v)?; + } + if let Some(ref v) = self.decoy_address.as_ref() { + os.write_bytes(7, &v)?; } os.write_unknown_fields(self.get_unknown_fields())?; ::std::result::Result::Ok(()) @@ -3137,13 +3120,13 @@ impl ::protobuf::Message for ZMQPayload { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -3151,61 +3134,83 @@ impl ::protobuf::Message for ZMQPayload { Self::descriptor_static() } - fn new() -> ZMQPayload { - ZMQPayload::new() + fn new() -> C2SWrapper { + C2SWrapper::new() } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( - "shared_secret", - |m: &ZMQPayload| { &m.shared_secret }, - |m: &mut ZMQPayload| { &mut m.shared_secret }, - )); - fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( - "registration_payload", - |m: &ZMQPayload| { &m.registration_payload }, - |m: &mut ZMQPayload| { &mut m.registration_payload }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( - "registration_source", - |m: &ZMQPayload| { &m.registration_source }, - |m: &mut ZMQPayload| { &mut m.registration_source }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "ZMQPayload", - fields, - file_descriptor_proto() - ) - }) - } - - fn default_instance() -> &'static ZMQPayload { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(ZMQPayload::new) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "shared_secret", + |m: &C2SWrapper| { &m.shared_secret }, + |m: &mut C2SWrapper| { &mut m.shared_secret }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_ptr_field_accessor::<_, ::protobuf::types::ProtobufTypeMessage>( + "registration_payload", + |m: &C2SWrapper| { &m.registration_payload }, + |m: &mut C2SWrapper| { &mut m.registration_payload }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeEnum>( + "registration_source", + |m: &C2SWrapper| { &m.registration_source }, + |m: &mut C2SWrapper| { &mut m.registration_source }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "registration_address", + |m: &C2SWrapper| { &m.registration_address }, + |m: &mut C2SWrapper| { &mut m.registration_address }, + )); + fields.push(::protobuf::reflect::accessor::make_singular_field_accessor::<_, ::protobuf::types::ProtobufTypeBytes>( + "decoy_address", + |m: &C2SWrapper| { &m.decoy_address }, + |m: &mut C2SWrapper| { &mut m.decoy_address }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "C2SWrapper", + fields, + file_descriptor_proto() + ) + }) + } + } + + fn default_instance() -> &'static C2SWrapper { + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const C2SWrapper, + }; + unsafe { + instance.get(C2SWrapper::new) + } } } -impl ::protobuf::Clear for ZMQPayload { +impl ::protobuf::Clear for C2SWrapper { fn clear(&mut self) { self.shared_secret.clear(); self.registration_payload.clear(); self.registration_source = ::std::option::Option::None; + self.registration_address.clear(); + self.decoy_address.clear(); self.unknown_fields.clear(); } } -impl ::std::fmt::Debug for ZMQPayload { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { +impl ::std::fmt::Debug for C2SWrapper { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } -impl ::protobuf::reflect::ProtobufValue for ZMQPayload { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) +impl ::protobuf::reflect::ProtobufValue for C2SWrapper { + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } @@ -3334,7 +3339,7 @@ impl ::protobuf::Message for SessionStats { true } - fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream) -> ::protobuf::ProtobufResult<()> { while !is.eof()? { let (field_number, wire_type) = is.read_tag_unpack()?; match field_number { @@ -3405,7 +3410,7 @@ impl ::protobuf::Message for SessionStats { my_size } - fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::ProtobufResult<()> { + fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream) -> ::protobuf::ProtobufResult<()> { if let Some(v) = self.failed_decoys_amount { os.write_uint32(20, v)?; } @@ -3437,13 +3442,13 @@ impl ::protobuf::Message for SessionStats { &mut self.unknown_fields } - fn as_any(&self) -> &dyn (::std::any::Any) { - self as &dyn (::std::any::Any) + fn as_any(&self) -> &::std::any::Any { + self as &::std::any::Any } - fn as_any_mut(&mut self) -> &mut dyn (::std::any::Any) { - self as &mut dyn (::std::any::Any) + fn as_any_mut(&mut self) -> &mut ::std::any::Any { + self as &mut ::std::any::Any } - fn into_any(self: ::std::boxed::Box) -> ::std::boxed::Box { + fn into_any(self: Box) -> ::std::boxed::Box<::std::any::Any> { self } @@ -3456,45 +3461,55 @@ impl ::protobuf::Message for SessionStats { } fn descriptor_static() -> &'static ::protobuf::reflect::MessageDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - let mut fields = ::std::vec::Vec::new(); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "failed_decoys_amount", - |m: &SessionStats| { &m.failed_decoys_amount }, - |m: &mut SessionStats| { &mut m.failed_decoys_amount }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "total_time_to_connect", - |m: &SessionStats| { &m.total_time_to_connect }, - |m: &mut SessionStats| { &mut m.total_time_to_connect }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "rtt_to_station", - |m: &SessionStats| { &m.rtt_to_station }, - |m: &mut SessionStats| { &mut m.rtt_to_station }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "tls_to_decoy", - |m: &SessionStats| { &m.tls_to_decoy }, - |m: &mut SessionStats| { &mut m.tls_to_decoy }, - )); - fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( - "tcp_to_decoy", - |m: &SessionStats| { &m.tcp_to_decoy }, - |m: &mut SessionStats| { &mut m.tcp_to_decoy }, - )); - ::protobuf::reflect::MessageDescriptor::new_pb_name::( - "SessionStats", - fields, - file_descriptor_proto() - ) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::MessageDescriptor, + }; + unsafe { + descriptor.get(|| { + let mut fields = ::std::vec::Vec::new(); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "failed_decoys_amount", + |m: &SessionStats| { &m.failed_decoys_amount }, + |m: &mut SessionStats| { &mut m.failed_decoys_amount }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "total_time_to_connect", + |m: &SessionStats| { &m.total_time_to_connect }, + |m: &mut SessionStats| { &mut m.total_time_to_connect }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "rtt_to_station", + |m: &SessionStats| { &m.rtt_to_station }, + |m: &mut SessionStats| { &mut m.rtt_to_station }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "tls_to_decoy", + |m: &SessionStats| { &m.tls_to_decoy }, + |m: &mut SessionStats| { &mut m.tls_to_decoy }, + )); + fields.push(::protobuf::reflect::accessor::make_option_accessor::<_, ::protobuf::types::ProtobufTypeUint32>( + "tcp_to_decoy", + |m: &SessionStats| { &m.tcp_to_decoy }, + |m: &mut SessionStats| { &mut m.tcp_to_decoy }, + )); + ::protobuf::reflect::MessageDescriptor::new::( + "SessionStats", + fields, + file_descriptor_proto() + ) + }) + } } fn default_instance() -> &'static SessionStats { - static instance: ::protobuf::rt::LazyV2 = ::protobuf::rt::LazyV2::INIT; - instance.get(SessionStats::new) + static mut instance: ::protobuf::lazy::Lazy = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const SessionStats, + }; + unsafe { + instance.get(SessionStats::new) + } } } @@ -3510,14 +3525,14 @@ impl ::protobuf::Clear for SessionStats { } impl ::std::fmt::Debug for SessionStats { - fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { ::protobuf::text_format::fmt(self, f) } } impl ::protobuf::reflect::ProtobufValue for SessionStats { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Message(self) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Message(self) } } @@ -3549,10 +3564,15 @@ impl ::protobuf::ProtobufEnum for KeyType { } fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - ::protobuf::reflect::EnumDescriptor::new_pb_name::("KeyType", file_descriptor_proto()) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::EnumDescriptor, + }; + unsafe { + descriptor.get(|| { + ::protobuf::reflect::EnumDescriptor::new("KeyType", file_descriptor_proto()) + }) + } } } @@ -3567,8 +3587,8 @@ impl ::std::default::Default for KeyType { } impl ::protobuf::reflect::ProtobufValue for KeyType { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self)) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Enum(self.descriptor()) } } @@ -3621,10 +3641,15 @@ impl ::protobuf::ProtobufEnum for C2S_Transition { } fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - ::protobuf::reflect::EnumDescriptor::new_pb_name::("C2S_Transition", file_descriptor_proto()) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::EnumDescriptor, + }; + unsafe { + descriptor.get(|| { + ::protobuf::reflect::EnumDescriptor::new("C2S_Transition", file_descriptor_proto()) + }) + } } } @@ -3638,8 +3663,8 @@ impl ::std::default::Default for C2S_Transition { } impl ::protobuf::reflect::ProtobufValue for C2S_Transition { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self)) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Enum(self.descriptor()) } } @@ -3683,10 +3708,15 @@ impl ::protobuf::ProtobufEnum for S2C_Transition { } fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - ::protobuf::reflect::EnumDescriptor::new_pb_name::("S2C_Transition", file_descriptor_proto()) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::EnumDescriptor, + }; + unsafe { + descriptor.get(|| { + ::protobuf::reflect::EnumDescriptor::new("S2C_Transition", file_descriptor_proto()) + }) + } } } @@ -3700,8 +3730,8 @@ impl ::std::default::Default for S2C_Transition { } impl ::protobuf::reflect::ProtobufValue for S2C_Transition { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self)) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Enum(self.descriptor()) } } @@ -3751,10 +3781,15 @@ impl ::protobuf::ProtobufEnum for ErrorReasonS2C { } fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - ::protobuf::reflect::EnumDescriptor::new_pb_name::("ErrorReasonS2C", file_descriptor_proto()) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::EnumDescriptor, + }; + unsafe { + descriptor.get(|| { + ::protobuf::reflect::EnumDescriptor::new("ErrorReasonS2C", file_descriptor_proto()) + }) + } } } @@ -3768,16 +3803,16 @@ impl ::std::default::Default for ErrorReasonS2C { } impl ::protobuf::reflect::ProtobufValue for ErrorReasonS2C { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self)) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Enum(self.descriptor()) } } #[derive(Clone,PartialEq,Eq,Debug,Hash)] pub enum TransportType { - NullTransport = 0, - MinTransport = 1, - Obfs4Transport = 2, + Null = 0, + Min = 1, + Obfs4 = 2, } impl ::protobuf::ProtobufEnum for TransportType { @@ -3787,27 +3822,32 @@ impl ::protobuf::ProtobufEnum for TransportType { fn from_i32(value: i32) -> ::std::option::Option { match value { - 0 => ::std::option::Option::Some(TransportType::NullTransport), - 1 => ::std::option::Option::Some(TransportType::MinTransport), - 2 => ::std::option::Option::Some(TransportType::Obfs4Transport), + 0 => ::std::option::Option::Some(TransportType::Null), + 1 => ::std::option::Option::Some(TransportType::Min), + 2 => ::std::option::Option::Some(TransportType::Obfs4), _ => ::std::option::Option::None } } fn values() -> &'static [Self] { static values: &'static [TransportType] = &[ - TransportType::NullTransport, - TransportType::MinTransport, - TransportType::Obfs4Transport, + TransportType::Null, + TransportType::Min, + TransportType::Obfs4, ]; values } fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - ::protobuf::reflect::EnumDescriptor::new_pb_name::("TransportType", file_descriptor_proto()) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::EnumDescriptor, + }; + unsafe { + descriptor.get(|| { + ::protobuf::reflect::EnumDescriptor::new("TransportType", file_descriptor_proto()) + }) + } } } @@ -3816,13 +3856,13 @@ impl ::std::marker::Copy for TransportType { impl ::std::default::Default for TransportType { fn default() -> Self { - TransportType::NullTransport + TransportType::Null } } impl ::protobuf::reflect::ProtobufValue for TransportType { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self)) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Enum(self.descriptor()) } } @@ -3830,6 +3870,7 @@ impl ::protobuf::reflect::ProtobufValue for TransportType { pub enum RegistrationSource { Detector = 0, API = 1, + DetectorPrescan = 2, } impl ::protobuf::ProtobufEnum for RegistrationSource { @@ -3841,6 +3882,7 @@ impl ::protobuf::ProtobufEnum for RegistrationSource { match value { 0 => ::std::option::Option::Some(RegistrationSource::Detector), 1 => ::std::option::Option::Some(RegistrationSource::API), + 2 => ::std::option::Option::Some(RegistrationSource::DetectorPrescan), _ => ::std::option::Option::None } } @@ -3849,15 +3891,21 @@ impl ::protobuf::ProtobufEnum for RegistrationSource { static values: &'static [RegistrationSource] = &[ RegistrationSource::Detector, RegistrationSource::API, + RegistrationSource::DetectorPrescan, ]; values } fn enum_descriptor_static() -> &'static ::protobuf::reflect::EnumDescriptor { - static descriptor: ::protobuf::rt::LazyV2<::protobuf::reflect::EnumDescriptor> = ::protobuf::rt::LazyV2::INIT; - descriptor.get(|| { - ::protobuf::reflect::EnumDescriptor::new_pb_name::("RegistrationSource", file_descriptor_proto()) - }) + static mut descriptor: ::protobuf::lazy::Lazy<::protobuf::reflect::EnumDescriptor> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::reflect::EnumDescriptor, + }; + unsafe { + descriptor.get(|| { + ::protobuf::reflect::EnumDescriptor::new("RegistrationSource", file_descriptor_proto()) + }) + } } } @@ -3871,8 +3919,8 @@ impl ::std::default::Default for RegistrationSource { } impl ::protobuf::reflect::ProtobufValue for RegistrationSource { - fn as_ref(&self) -> ::protobuf::reflect::ReflectValueRef { - ::protobuf::reflect::ReflectValueRef::Enum(::protobuf::ProtobufEnum::descriptor(self)) + fn as_ref(&self) -> ::protobuf::reflect::ProtobufValueRef { + ::protobuf::reflect::ProtobufValueRef::Enum(self.descriptor()) } } @@ -3899,329 +3947,333 @@ static file_descriptor_proto_data: &'static [u8] = b"\ \x14.tapdance.ClientConfR\nconfigInfo\x127\n\nerr_reason\x18\x04\x20\x01\ (\x0e2\x18.tapdance.ErrorReasonS2CR\terrReason\x12\x1f\n\x0btmp_backoff\ \x18\x05\x20\x01(\rR\ntmpBackoff\x12\x1d\n\nstation_id\x18\x06\x20\x01(\ - \tR\tstationId\x12\x18\n\x07padding\x18d\x20\x01(\x0cR\x07padding\"\x8f\ + \tR\tstationId\x12\x18\n\x07padding\x18d\x20\x01(\x0cR\x07padding\"\xaf\ \x01\n\x11RegistrationFlags\x12\x1f\n\x0bupload_only\x18\x01\x20\x01(\ \x08R\nuploadOnly\x12\x1d\n\ndark_decoy\x18\x02\x20\x01(\x08R\tdarkDecoy\ \x12!\n\x0cproxy_header\x18\x03\x20\x01(\x08R\x0bproxyHeader\x12\x17\n\ - \x07use_TIL\x18\x04\x20\x01(\x08R\x06useTIL\"\xcb\x04\n\x0fClientToStati\ - on\x12)\n\x10protocol_version\x18\x01\x20\x01(\rR\x0fprotocolVersion\x12\ - 2\n\x15decoy_list_generation\x18\x02\x20\x01(\rR\x13decoyListGeneration\ - \x12C\n\x10state_transition\x18\x03\x20\x01(\x0e2\x18.tapdance.C2S_Trans\ - itionR\x0fstateTransition\x12\x1f\n\x0bupload_sync\x18\x04\x20\x01(\x04R\ - \nuploadSync\x12#\n\rfailed_decoys\x18\n\x20\x03(\tR\x0cfailedDecoys\x12\ - ,\n\x05stats\x18\x0b\x20\x01(\x0b2\x16.tapdance.SessionStatsR\x05stats\ - \x125\n\ttransport\x18\x0c\x20\x01(\x0e2\x17.tapdance.TransportTypeR\ttr\ - ansport\x12%\n\x0ecovert_address\x18\x14\x20\x01(\tR\rcovertAddress\x127\ - \n\x18masked_decoy_server_name\x18\x15\x20\x01(\tR\x15maskedDecoyServerN\ - ame\x12\x1d\n\nv6_support\x18\x16\x20\x01(\x08R\tv6Support\x12\x1d\n\nv4\ - _support\x18\x17\x20\x01(\x08R\tv4Support\x121\n\x05flags\x18\x18\x20\ - \x01(\x0b2\x1b.tapdance.RegistrationFlagsR\x05flags\x12\x18\n\x07padding\ - \x18d\x20\x01(\x0cR\x07padding\"s\n\x0bClientToAPI\x12\x16\n\x06secret\ - \x18\x01\x20\x01(\x0cR\x06secret\x12L\n\x14registration_payload\x18\x02\ - \x20\x01(\x0b2\x19.tapdance.ClientToStationR\x13registrationPayload\"\ - \xce\x01\n\nZMQPayload\x12#\n\rshared_secret\x18\x01\x20\x01(\x0cR\x0csh\ - aredSecret\x12L\n\x14registration_payload\x18\x03\x20\x01(\x0b2\x19.tapd\ - ance.ClientToStationR\x13registrationPayload\x12M\n\x13registration_sour\ - ce\x18\x04\x20\x01(\x0e2\x1c.tapdance.RegistrationSourceR\x12registratio\ - nSource\"\xdd\x01\n\x0cSessionStats\x120\n\x14failed_decoys_amount\x18\ - \x14\x20\x01(\rR\x12failedDecoysAmount\x121\n\x15total_time_to_connect\ - \x18\x1f\x20\x01(\rR\x12totalTimeToConnect\x12$\n\x0ertt_to_station\x18!\ - \x20\x01(\rR\x0crttToStation\x12\x20\n\x0ctls_to_decoy\x18&\x20\x01(\rR\ - \ntlsToDecoy\x12\x20\n\x0ctcp_to_decoy\x18'\x20\x01(\rR\ntcpToDecoy*+\n\ - \x07KeyType\x12\x0f\n\x0bAES_GCM_128\x10Z\x12\x0f\n\x0bAES_GCM_256\x10[*\ - \xe7\x01\n\x0eC2S_Transition\x12\x11\n\rC2S_NO_CHANGE\x10\0\x12\x14\n\ - \x10C2S_SESSION_INIT\x10\x01\x12\x1b\n\x17C2S_SESSION_COVERT_INIT\x10\ - \x0b\x12\x18\n\x14C2S_EXPECT_RECONNECT\x10\x02\x12\x15\n\x11C2S_SESSION_\ - CLOSE\x10\x03\x12\x14\n\x10C2S_YIELD_UPLOAD\x10\x04\x12\x16\n\x12C2S_ACQ\ - UIRE_UPLOAD\x10\x05\x12\x20\n\x1cC2S_EXPECT_UPLOADONLY_RECONN\x10\x06\ - \x12\x0e\n\tC2S_ERROR\x10\xff\x01*\x98\x01\n\x0eS2C_Transition\x12\x11\n\ - \rS2C_NO_CHANGE\x10\0\x12\x14\n\x10S2C_SESSION_INIT\x10\x01\x12\x1b\n\ - \x17S2C_SESSION_COVERT_INIT\x10\x0b\x12\x19\n\x15S2C_CONFIRM_RECONNECT\ - \x10\x02\x12\x15\n\x11S2C_SESSION_CLOSE\x10\x03\x12\x0e\n\tS2C_ERROR\x10\ - \xff\x01*\xac\x01\n\x0eErrorReasonS2C\x12\x0c\n\x08NO_ERROR\x10\0\x12\ - \x11\n\rCOVERT_STREAM\x10\x01\x12\x13\n\x0fCLIENT_REPORTED\x10\x02\x12\ - \x13\n\x0fCLIENT_PROTOCOL\x10\x03\x12\x14\n\x10STATION_INTERNAL\x10\x04\ - \x12\x12\n\x0eDECOY_OVERLOAD\x10\x05\x12\x11\n\rCLIENT_STREAM\x10d\x12\ - \x12\n\x0eCLIENT_TIMEOUT\x10e*H\n\rTransportType\x12\x11\n\rNullTranspor\ - t\x10\0\x12\x10\n\x0cMinTransport\x10\x01\x12\x12\n\x0eObfs4Transport\ - \x10\x02*+\n\x12RegistrationSource\x12\x0c\n\x08Detector\x10\0\x12\x07\n\ - \x03API\x10\x01J\x9bS\n\x07\x12\x05\0\0\xfb\x01\x01\n\x08\n\x01\x0c\x12\ - \x03\0\0\x12\n\xb0\x01\n\x01\x02\x12\x03\x06\0\x112\xa5\x01\x20TODO:\x20\ - We're\x20using\x20proto2\x20because\x20it's\x20the\x20default\x20on\x20U\ - buntu\x2016.04.\n\x20At\x20some\x20point\x20we\x20will\x20want\x20to\x20\ - migrate\x20to\x20proto3,\x20but\x20we\x20are\x20not\n\x20using\x20any\ - \x20proto3\x20features\x20yet.\n\n\n\n\x02\x05\0\x12\x04\x08\0\x0b\x01\n\ - \n\n\x03\x05\0\x01\x12\x03\x08\x05\x0c\n\x0b\n\x04\x05\0\x02\0\x12\x03\t\ - \x04\x15\n\x0c\n\x05\x05\0\x02\0\x01\x12\x03\t\x04\x0f\n\x0c\n\x05\x05\0\ - \x02\0\x02\x12\x03\t\x12\x14\n\x20\n\x04\x05\0\x02\x01\x12\x03\n\x04\x15\ - \"\x13\x20not\x20supported\x20atm\n\n\x0c\n\x05\x05\0\x02\x01\x01\x12\ - \x03\n\x04\x0f\n\x0c\n\x05\x05\0\x02\x01\x02\x12\x03\n\x12\x14\n\n\n\x02\ - \x04\0\x12\x04\r\0\x12\x01\n\n\n\x03\x04\0\x01\x12\x03\r\x08\x0e\n4\n\ - \x04\x04\0\x02\0\x12\x03\x0f\x04\x1b\x1a'\x20A\x20public\x20key,\x20as\ - \x20used\x20by\x20the\x20station.\n\n\x0c\n\x05\x04\0\x02\0\x04\x12\x03\ - \x0f\x04\x0c\n\x0c\n\x05\x04\0\x02\0\x05\x12\x03\x0f\r\x12\n\x0c\n\x05\ - \x04\0\x02\0\x01\x12\x03\x0f\x13\x16\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\ - \x0f\x19\x1a\n\x0b\n\x04\x04\0\x02\x01\x12\x03\x11\x04\x1e\n\x0c\n\x05\ - \x04\0\x02\x01\x04\x12\x03\x11\x04\x0c\n\x0c\n\x05\x04\0\x02\x01\x06\x12\ - \x03\x11\r\x14\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03\x11\x15\x19\n\x0c\n\ - \x05\x04\0\x02\x01\x03\x12\x03\x11\x1c\x1d\n\n\n\x02\x04\x01\x12\x04\x14\ - \0:\x01\n\n\n\x03\x04\x01\x01\x12\x03\x14\x08\x14\n\xa1\x01\n\x04\x04\ - \x01\x02\0\x12\x03\x19\x04!\x1a\x93\x01\x20The\x20hostname/SNI\x20to\x20\ - use\x20for\x20this\x20host\n\n\x20The\x20hostname\x20is\x20the\x20only\ - \x20required\x20field,\x20although\x20other\n\x20fields\x20are\x20expect\ - ed\x20to\x20be\x20present\x20in\x20most\x20cases.\n\n\x0c\n\x05\x04\x01\ - \x02\0\x04\x12\x03\x19\x04\x0c\n\x0c\n\x05\x04\x01\x02\0\x05\x12\x03\x19\ - \r\x13\n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03\x19\x14\x1c\n\x0c\n\x05\x04\ - \x01\x02\0\x03\x12\x03\x19\x1f\x20\n\xf7\x01\n\x04\x04\x01\x02\x01\x12\ - \x03\x20\x04\"\x1a\xe9\x01\x20The\x2032-bit\x20ipv4\x20address,\x20in\ - \x20network\x20byte\x20order\n\n\x20If\x20the\x20IPv4\x20address\x20is\ - \x20absent,\x20then\x20it\x20may\x20be\x20resolved\x20via\n\x20DNS\x20by\ - \x20the\x20client,\x20or\x20the\x20client\x20may\x20discard\x20this\x20d\ - ecoy\x20spec\n\x20if\x20local\x20DNS\x20is\x20untrusted,\x20or\x20the\ - \x20service\x20may\x20be\x20multihomed.\n\n\x0c\n\x05\x04\x01\x02\x01\ - \x04\x12\x03\x20\x04\x0c\n\x0c\n\x05\x04\x01\x02\x01\x05\x12\x03\x20\r\ - \x14\n\x0c\n\x05\x04\x01\x02\x01\x01\x12\x03\x20\x15\x1d\n\x0c\n\x05\x04\ - \x01\x02\x01\x03\x12\x03\x20\x20!\n>\n\x04\x04\x01\x02\x02\x12\x03#\x04\ - \x20\x1a1\x20The\x20128-bit\x20ipv6\x20address,\x20in\x20network\x20byte\ - \x20order\n\n\x0c\n\x05\x04\x01\x02\x02\x04\x12\x03#\x04\x0c\n\x0c\n\x05\ - \x04\x01\x02\x02\x05\x12\x03#\r\x12\n\x0c\n\x05\x04\x01\x02\x02\x01\x12\ - \x03#\x13\x1b\n\x0c\n\x05\x04\x01\x02\x02\x03\x12\x03#\x1e\x1f\n\x91\x01\ - \n\x04\x04\x01\x02\x03\x12\x03)\x04\x1f\x1a\x83\x01\x20The\x20Tapdance\ - \x20station\x20public\x20key\x20to\x20use\x20when\x20contacting\x20this\ - \n\x20decoy\n\n\x20If\x20omitted,\x20the\x20default\x20station\x20public\ - \x20key\x20(if\x20any)\x20is\x20used.\n\n\x0c\n\x05\x04\x01\x02\x03\x04\ - \x12\x03)\x04\x0c\n\x0c\n\x05\x04\x01\x02\x03\x06\x12\x03)\r\x13\n\x0c\n\ - \x05\x04\x01\x02\x03\x01\x12\x03)\x14\x1a\n\x0c\n\x05\x04\x01\x02\x03\ - \x03\x12\x03)\x1d\x1e\n\xee\x01\n\x04\x04\x01\x02\x04\x12\x030\x04\x20\ - \x1a\xe0\x01\x20The\x20maximum\x20duration,\x20in\x20milliseconds,\x20to\ - \x20maintain\x20an\x20open\n\x20connection\x20to\x20this\x20decoy\x20(be\ - cause\x20the\x20decoy\x20may\x20close\x20the\n\x20connection\x20itself\ - \x20after\x20this\x20length\x20of\x20time)\n\n\x20If\x20omitted,\x20a\ - \x20default\x20of\x2030,000\x20milliseconds\x20is\x20assumed.\n\n\x0c\n\ - \x05\x04\x01\x02\x04\x04\x12\x030\x04\x0c\n\x0c\n\x05\x04\x01\x02\x04\ - \x05\x12\x030\r\x13\n\x0c\n\x05\x04\x01\x02\x04\x01\x12\x030\x14\x1b\n\ - \x0c\n\x05\x04\x01\x02\x04\x03\x12\x030\x1e\x1f\n\xb0\x02\n\x04\x04\x01\ - \x02\x05\x12\x039\x04\x1f\x1a\xa2\x02\x20The\x20maximum\x20TCP\x20window\ - \x20size\x20to\x20attempt\x20to\x20use\x20for\x20this\x20decoy.\n\n\x20I\ - f\x20omitted,\x20a\x20default\x20of\x2015360\x20is\x20assumed.\n\n\x20TO\ - DO:\x20the\x20default\x20is\x20based\x20on\x20the\x20current\x20heuristi\ - c\x20of\x20only\n\x20using\x20decoys\x20that\x20permit\x20windows\x20of\ - \x2015KB\x20or\x20larger.\x20\x20If\x20this\n\x20heuristic\x20changes,\ - \x20then\x20this\x20default\x20doesn't\x20make\x20sense.\n\n\x0c\n\x05\ - \x04\x01\x02\x05\x04\x12\x039\x04\x0c\n\x0c\n\x05\x04\x01\x02\x05\x05\ - \x12\x039\r\x13\n\x0c\n\x05\x04\x01\x02\x05\x01\x12\x039\x14\x1a\n\x0c\n\ - \x05\x04\x01\x02\x05\x03\x12\x039\x1d\x1e\n\x83\x08\n\x02\x04\x02\x12\ - \x04Q\0W\x012\xf6\x07\x20In\x20version\x201,\x20the\x20request\x20is\x20\ - very\x20simple:\x20when\n\x20the\x20client\x20sends\x20a\x20MSG_PROTO\ - \x20to\x20the\x20station,\x20if\x20the\n\x20generation\x20number\x20is\ - \x20present,\x20then\x20this\x20request\x20includes\n\x20(in\x20addition\ - \x20to\x20whatever\x20other\x20operations\x20are\x20part\x20of\x20the\n\ - \x20request)\x20a\x20request\x20for\x20the\x20station\x20to\x20send\x20a\ - \x20copy\x20of\n\x20the\x20current\x20decoy\x20set\x20that\x20has\x20a\ - \x20generation\x20number\x20greater\n\x20than\x20the\x20generation\x20nu\ - mber\x20in\x20its\x20request.\n\n\x20If\x20the\x20response\x20contains\ - \x20a\x20DecoyListUpdate\x20with\x20a\x20generation\x20number\x20equal\n\ - \x20to\x20that\x20which\x20the\x20client\x20sent,\x20then\x20the\x20clie\ - nt\x20is\x20\"caught\x20up\"\x20with\n\x20the\x20station\x20and\x20the\ - \x20response\x20contains\x20no\x20new\x20information\n\x20(and\x20all\ - \x20other\x20fields\x20may\x20be\x20omitted\x20or\x20empty).\x20\x20Othe\ - rwise,\n\x20the\x20station\x20will\x20send\x20the\x20latest\x20configura\ - tion\x20information,\n\x20along\x20with\x20its\x20generation\x20number.\ - \n\n\x20The\x20station\x20can\x20also\x20send\x20ClientConf\x20messages\ - \n\x20(as\x20part\x20of\x20Station2Client\x20messages)\x20whenever\x20it\ - \x20wants.\n\x20The\x20client\x20is\x20expected\x20to\x20react\x20as\x20\ - if\x20it\x20had\x20requested\n\x20such\x20messages\x20--\x20possibly\x20\ - by\x20ignoring\x20them,\x20if\x20the\x20client\n\x20is\x20already\x20up-\ - to-date\x20according\x20to\x20the\x20generation\x20number.\n\n\n\n\x03\ - \x04\x02\x01\x12\x03Q\x08\x12\n\x0b\n\x04\x04\x02\x02\0\x12\x03R\x04&\n\ - \x0c\n\x05\x04\x02\x02\0\x04\x12\x03R\x04\x0c\n\x0c\n\x05\x04\x02\x02\0\ - \x06\x12\x03R\r\x16\n\x0c\n\x05\x04\x02\x02\0\x01\x12\x03R\x17!\n\x0c\n\ - \x05\x04\x02\x02\0\x03\x12\x03R$%\n\x0b\n\x04\x04\x02\x02\x01\x12\x03S\ - \x04#\n\x0c\n\x05\x04\x02\x02\x01\x04\x12\x03S\x04\x0c\n\x0c\n\x05\x04\ - \x02\x02\x01\x05\x12\x03S\r\x13\n\x0c\n\x05\x04\x02\x02\x01\x01\x12\x03S\ - \x14\x1e\n\x0c\n\x05\x04\x02\x02\x01\x03\x12\x03S!\"\n\x0b\n\x04\x04\x02\ - \x02\x02\x12\x03T\x04'\n\x0c\n\x05\x04\x02\x02\x02\x04\x12\x03T\x04\x0c\ - \n\x0c\n\x05\x04\x02\x02\x02\x06\x12\x03T\r\x13\n\x0c\n\x05\x04\x02\x02\ - \x02\x01\x12\x03T\x14\"\n\x0c\n\x05\x04\x02\x02\x02\x03\x12\x03T%&\n\x0b\ - \n\x04\x04\x02\x02\x03\x12\x03U\x043\n\x0c\n\x05\x04\x02\x02\x03\x04\x12\ - \x03U\x04\x0c\n\x0c\n\x05\x04\x02\x02\x03\x06\x12\x03U\r\x1c\n\x0c\n\x05\ - \x04\x02\x02\x03\x01\x12\x03U\x1d.\n\x0c\n\x05\x04\x02\x02\x03\x03\x12\ - \x03U12\n\x0b\n\x04\x04\x02\x02\x04\x12\x03V\x04'\n\x0c\n\x05\x04\x02\ - \x02\x04\x04\x12\x03V\x04\x0c\n\x0c\n\x05\x04\x02\x02\x04\x06\x12\x03V\r\ - \x13\n\x0c\n\x05\x04\x02\x02\x04\x01\x12\x03V\x14\"\n\x0c\n\x05\x04\x02\ - \x02\x04\x03\x12\x03V%&\n\n\n\x02\x04\x03\x12\x04Y\0[\x01\n\n\n\x03\x04\ - \x03\x01\x12\x03Y\x08\x11\n\x0b\n\x04\x04\x03\x02\0\x12\x03Z\x04)\n\x0c\ - \n\x05\x04\x03\x02\0\x04\x12\x03Z\x04\x0c\n\x0c\n\x05\x04\x03\x02\0\x06\ - \x12\x03Z\r\x19\n\x0c\n\x05\x04\x03\x02\0\x01\x12\x03Z\x1a$\n\x0c\n\x05\ - \x04\x03\x02\0\x03\x12\x03Z'(\n\n\n\x02\x04\x04\x12\x04]\0_\x01\n\n\n\ - \x03\x04\x04\x01\x12\x03]\x08\x17\n\x0b\n\x04\x04\x04\x02\0\x12\x03^\x04\ - \x1f\n\x0c\n\x05\x04\x04\x02\0\x04\x12\x03^\x04\x0c\n\x0c\n\x05\x04\x04\ - \x02\0\x05\x12\x03^\r\x13\n\x0c\n\x05\x04\x04\x02\0\x01\x12\x03^\x14\x1a\ - \n\x0c\n\x05\x04\x04\x02\0\x03\x12\x03^\x1d\x1e\n-\n\x02\x05\x01\x12\x04\ - b\0l\x01\x1a!\x20State\x20transitions\x20of\x20the\x20client\n\n\n\n\x03\ - \x05\x01\x01\x12\x03b\x05\x13\n\x0b\n\x04\x05\x01\x02\0\x12\x03c\x04\x16\ - \n\x0c\n\x05\x05\x01\x02\0\x01\x12\x03c\x04\x11\n\x0c\n\x05\x05\x01\x02\ - \0\x02\x12\x03c\x14\x15\n\"\n\x04\x05\x01\x02\x01\x12\x03d\x04\x19\"\x15\ - \x20connect\x20me\x20to\x20squid\n\n\x0c\n\x05\x05\x01\x02\x01\x01\x12\ - \x03d\x04\x14\n\x0c\n\x05\x05\x01\x02\x01\x02\x12\x03d\x17\x18\n,\n\x04\ - \x05\x01\x02\x02\x12\x03e\x04!\"\x1f\x20connect\x20me\x20to\x20provided\ - \x20covert\n\n\x0c\n\x05\x05\x01\x02\x02\x01\x12\x03e\x04\x1b\n\x0c\n\ - \x05\x05\x01\x02\x02\x02\x12\x03e\x1e\x20\n\x0b\n\x04\x05\x01\x02\x03\ - \x12\x03f\x04\x1d\n\x0c\n\x05\x05\x01\x02\x03\x01\x12\x03f\x04\x18\n\x0c\ - \n\x05\x05\x01\x02\x03\x02\x12\x03f\x1b\x1c\n\x0b\n\x04\x05\x01\x02\x04\ - \x12\x03g\x04\x1a\n\x0c\n\x05\x05\x01\x02\x04\x01\x12\x03g\x04\x15\n\x0c\ - \n\x05\x05\x01\x02\x04\x02\x12\x03g\x18\x19\n\x0b\n\x04\x05\x01\x02\x05\ - \x12\x03h\x04\x19\n\x0c\n\x05\x05\x01\x02\x05\x01\x12\x03h\x04\x14\n\x0c\ - \n\x05\x05\x01\x02\x05\x02\x12\x03h\x17\x18\n\x0b\n\x04\x05\x01\x02\x06\ - \x12\x03i\x04\x1b\n\x0c\n\x05\x05\x01\x02\x06\x01\x12\x03i\x04\x16\n\x0c\ - \n\x05\x05\x01\x02\x06\x02\x12\x03i\x19\x1a\n\x0b\n\x04\x05\x01\x02\x07\ - \x12\x03j\x04%\n\x0c\n\x05\x05\x01\x02\x07\x01\x12\x03j\x04\x20\n\x0c\n\ - \x05\x05\x01\x02\x07\x02\x12\x03j#$\n\x0b\n\x04\x05\x01\x02\x08\x12\x03k\ - \x04\x14\n\x0c\n\x05\x05\x01\x02\x08\x01\x12\x03k\x04\r\n\x0c\n\x05\x05\ - \x01\x02\x08\x02\x12\x03k\x10\x13\n-\n\x02\x05\x02\x12\x04o\0w\x01\x1a!\ - \x20State\x20transitions\x20of\x20the\x20server\n\n\n\n\x03\x05\x02\x01\ - \x12\x03o\x05\x13\n\x0b\n\x04\x05\x02\x02\0\x12\x03p\x04\x16\n\x0c\n\x05\ - \x05\x02\x02\0\x01\x12\x03p\x04\x11\n\x0c\n\x05\x05\x02\x02\0\x02\x12\ - \x03p\x14\x15\n!\n\x04\x05\x02\x02\x01\x12\x03q\x04\x19\"\x14\x20connect\ - ed\x20to\x20squid\n\n\x0c\n\x05\x05\x02\x02\x01\x01\x12\x03q\x04\x14\n\ - \x0c\n\x05\x05\x02\x02\x01\x02\x12\x03q\x17\x18\n'\n\x04\x05\x02\x02\x02\ - \x12\x03r\x04!\"\x1a\x20connected\x20to\x20covert\x20host\n\n\x0c\n\x05\ - \x05\x02\x02\x02\x01\x12\x03r\x04\x1b\n\x0c\n\x05\x05\x02\x02\x02\x02\ - \x12\x03r\x1e\x20\n\x0b\n\x04\x05\x02\x02\x03\x12\x03s\x04\x1e\n\x0c\n\ - \x05\x05\x02\x02\x03\x01\x12\x03s\x04\x19\n\x0c\n\x05\x05\x02\x02\x03\ - \x02\x12\x03s\x1c\x1d\n\x0b\n\x04\x05\x02\x02\x04\x12\x03t\x04\x1a\n\x0c\ - \n\x05\x05\x02\x02\x04\x01\x12\x03t\x04\x15\n\x0c\n\x05\x05\x02\x02\x04\ - \x02\x12\x03t\x18\x19\nR\n\x04\x05\x02\x02\x05\x12\x03v\x04\x14\x1aE\x20\ - TODO\x20should\x20probably\x20also\x20allow\x20EXPECT_RECONNECT\x20here,\ - \x20for\x20DittoTap\n\n\x0c\n\x05\x05\x02\x02\x05\x01\x12\x03v\x04\r\n\ - \x0c\n\x05\x05\x02\x02\x05\x02\x12\x03v\x10\x13\n7\n\x02\x05\x03\x12\x05\ - z\0\x84\x01\x01\x1a*\x20Should\x20accompany\x20all\x20S2C_ERROR\x20messa\ - ges.\n\n\n\n\x03\x05\x03\x01\x12\x03z\x05\x13\n\x0b\n\x04\x05\x03\x02\0\ - \x12\x03{\x04\x11\n\x0c\n\x05\x05\x03\x02\0\x01\x12\x03{\x04\x0c\n\x0c\n\ - \x05\x05\x03\x02\0\x02\x12\x03{\x0f\x10\n)\n\x04\x05\x03\x02\x01\x12\x03\ - |\x04\x16\"\x1c\x20Squid\x20TCP\x20connection\x20broke\n\n\x0c\n\x05\x05\ - \x03\x02\x01\x01\x12\x03|\x04\x11\n\x0c\n\x05\x05\x03\x02\x01\x02\x12\ - \x03|\x14\x15\n6\n\x04\x05\x03\x02\x02\x12\x03}\x04\x18\")\x20You\x20tol\ - d\x20me\x20something\x20was\x20wrong,\x20client\n\n\x0c\n\x05\x05\x03\ - \x02\x02\x01\x12\x03}\x04\x13\n\x0c\n\x05\x05\x03\x02\x02\x02\x12\x03}\ - \x16\x17\n?\n\x04\x05\x03\x02\x03\x12\x03~\x04\x18\"2\x20You\x20messed\ - \x20up,\x20client\x20(e.g.\x20sent\x20a\x20bad\x20protobuf)\n\n\x0c\n\ - \x05\x05\x03\x02\x03\x01\x12\x03~\x04\x13\n\x0c\n\x05\x05\x03\x02\x03\ - \x02\x12\x03~\x16\x17\n\x16\n\x04\x05\x03\x02\x04\x12\x03\x7f\x04\x19\"\ - \t\x20I\x20broke\n\n\x0c\n\x05\x05\x03\x02\x04\x01\x12\x03\x7f\x04\x14\n\ - \x0c\n\x05\x05\x03\x02\x04\x02\x12\x03\x7f\x17\x18\nE\n\x04\x05\x03\x02\ - \x05\x12\x04\x80\x01\x04\x17\"7\x20Everything's\x20fine,\x20but\x20don't\ - \x20use\x20this\x20decoy\x20right\x20now\n\n\r\n\x05\x05\x03\x02\x05\x01\ - \x12\x04\x80\x01\x04\x12\n\r\n\x05\x05\x03\x02\x05\x02\x12\x04\x80\x01\ - \x15\x16\nD\n\x04\x05\x03\x02\x06\x12\x04\x82\x01\x04\x18\"6\x20My\x20st\ - ream\x20to\x20you\x20broke.\x20(This\x20is\x20impossible\x20to\x20send)\ - \n\n\r\n\x05\x05\x03\x02\x06\x01\x12\x04\x82\x01\x04\x11\n\r\n\x05\x05\ - \x03\x02\x06\x02\x12\x04\x82\x01\x14\x17\nA\n\x04\x05\x03\x02\x07\x12\ - \x04\x83\x01\x04\x19\"3\x20You\x20never\x20came\x20back.\x20(This\x20is\ - \x20impossible\x20to\x20send)\n\n\r\n\x05\x05\x03\x02\x07\x01\x12\x04\ - \x83\x01\x04\x12\n\r\n\x05\x05\x03\x02\x07\x02\x12\x04\x83\x01\x15\x18\n\ - \x0c\n\x02\x05\x04\x12\x06\x86\x01\0\x8a\x01\x01\n\x0b\n\x03\x05\x04\x01\ - \x12\x04\x86\x01\x05\x12\n\x0c\n\x04\x05\x04\x02\0\x12\x04\x87\x01\x04\ - \x16\n\r\n\x05\x05\x04\x02\0\x01\x12\x04\x87\x01\x04\x11\n\r\n\x05\x05\ - \x04\x02\0\x02\x12\x04\x87\x01\x14\x15\n`\n\x04\x05\x04\x02\x01\x12\x04\ - \x88\x01\x04\x15\"R\x20Send\x20a\x2032-byte\x20HMAC\x20id\x20to\x20let\ - \x20the\x20station\x20distinguish\x20registrations\x20to\x20same\x20host\ - \n\n\r\n\x05\x05\x04\x02\x01\x01\x12\x04\x88\x01\x04\x10\n\r\n\x05\x05\ - \x04\x02\x01\x02\x12\x04\x88\x01\x13\x14\n$\n\x04\x05\x04\x02\x02\x12\ - \x04\x89\x01\x04\x17\"\x16\x20Not\x20implemented\x20yet?\n\n\r\n\x05\x05\ - \x04\x02\x02\x01\x12\x04\x89\x01\x04\x12\n\r\n\x05\x05\x04\x02\x02\x02\ - \x12\x04\x89\x01\x15\x16\n\x0c\n\x02\x04\x05\x12\x06\x8c\x01\0\xa3\x01\ - \x01\n\x0b\n\x03\x04\x05\x01\x12\x04\x8c\x01\x08\x17\nO\n\x04\x04\x05\ - \x02\0\x12\x04\x8e\x01\x04)\x1aA\x20Should\x20accompany\x20(at\x20least)\ - \x20SESSION_INIT\x20and\x20CONFIRM_RECONNECT.\n\n\r\n\x05\x04\x05\x02\0\ - \x04\x12\x04\x8e\x01\x04\x0c\n\r\n\x05\x04\x05\x02\0\x05\x12\x04\x8e\x01\ - \r\x13\n\r\n\x05\x04\x05\x02\0\x01\x12\x04\x8e\x01\x14$\n\r\n\x05\x04\ - \x05\x02\0\x03\x12\x04\x8e\x01'(\nv\n\x04\x04\x05\x02\x01\x12\x04\x92\ - \x01\x041\x1ah\x20There\x20might\x20be\x20a\x20state\x20transition.\x20M\ - ay\x20be\x20absent;\x20absence\x20should\x20be\n\x20treated\x20identical\ - ly\x20to\x20NO_CHANGE.\n\n\r\n\x05\x04\x05\x02\x01\x04\x12\x04\x92\x01\ - \x04\x0c\n\r\n\x05\x04\x05\x02\x01\x06\x12\x04\x92\x01\r\x1b\n\r\n\x05\ - \x04\x05\x02\x01\x01\x12\x04\x92\x01\x1c,\n\r\n\x05\x04\x05\x02\x01\x03\ - \x12\x04\x92\x01/0\nc\n\x04\x04\x05\x02\x02\x12\x04\x96\x01\x04(\x1aU\ - \x20The\x20station\x20can\x20send\x20client\x20config\x20info\x20piggyba\ - cked\n\x20on\x20any\x20message,\x20as\x20it\x20sees\x20fit\n\n\r\n\x05\ - \x04\x05\x02\x02\x04\x12\x04\x96\x01\x04\x0c\n\r\n\x05\x04\x05\x02\x02\ - \x06\x12\x04\x96\x01\r\x17\n\r\n\x05\x04\x05\x02\x02\x01\x12\x04\x96\x01\ - \x18#\n\r\n\x05\x04\x05\x02\x02\x03\x12\x04\x96\x01&'\nP\n\x04\x04\x05\ - \x02\x03\x12\x04\x99\x01\x04+\x1aB\x20If\x20state_transition\x20==\x20S2\ - C_ERROR,\x20this\x20field\x20is\x20the\x20explanation.\n\n\r\n\x05\x04\ - \x05\x02\x03\x04\x12\x04\x99\x01\x04\x0c\n\r\n\x05\x04\x05\x02\x03\x06\ - \x12\x04\x99\x01\r\x1b\n\r\n\x05\x04\x05\x02\x03\x01\x12\x04\x99\x01\x1c\ - &\n\r\n\x05\x04\x05\x02\x03\x03\x12\x04\x99\x01)*\nQ\n\x04\x04\x05\x02\ - \x04\x12\x04\x9c\x01\x04$\x1aC\x20Signals\x20client\x20to\x20stop\x20con\ - necting\x20for\x20following\x20amount\x20of\x20seconds\n\n\r\n\x05\x04\ - \x05\x02\x04\x04\x12\x04\x9c\x01\x04\x0c\n\r\n\x05\x04\x05\x02\x04\x05\ - \x12\x04\x9c\x01\r\x13\n\r\n\x05\x04\x05\x02\x04\x01\x12\x04\x9c\x01\x14\ - \x1f\n\r\n\x05\x04\x05\x02\x04\x03\x12\x04\x9c\x01\"#\nK\n\x04\x04\x05\ - \x02\x05\x12\x04\x9f\x01\x04#\x1a=\x20Sent\x20in\x20SESSION_INIT,\x20ide\ - ntifies\x20the\x20station\x20that\x20picked\x20up\n\n\r\n\x05\x04\x05\ - \x02\x05\x04\x12\x04\x9f\x01\x04\x0c\n\r\n\x05\x04\x05\x02\x05\x05\x12\ - \x04\x9f\x01\r\x13\n\r\n\x05\x04\x05\x02\x05\x01\x12\x04\x9f\x01\x14\x1e\ - \n\r\n\x05\x04\x05\x02\x05\x03\x12\x04\x9f\x01!\"\nG\n\x04\x04\x05\x02\ - \x06\x12\x04\xa2\x01\x04!\x1a9\x20Random-sized\x20junk\x20to\x20defeat\ - \x20packet\x20size\x20fingerprinting.\n\n\r\n\x05\x04\x05\x02\x06\x04\ - \x12\x04\xa2\x01\x04\x0c\n\r\n\x05\x04\x05\x02\x06\x05\x12\x04\xa2\x01\r\ - \x12\n\r\n\x05\x04\x05\x02\x06\x01\x12\x04\xa2\x01\x13\x1a\n\r\n\x05\x04\ - \x05\x02\x06\x03\x12\x04\xa2\x01\x1d\x20\n\x0c\n\x02\x04\x06\x12\x06\xa5\ - \x01\0\xaa\x01\x01\n\x0b\n\x03\x04\x06\x01\x12\x04\xa5\x01\x08\x19\n\x0c\ - \n\x04\x04\x06\x02\0\x12\x04\xa6\x01\x08&\n\r\n\x05\x04\x06\x02\0\x04\ - \x12\x04\xa6\x01\x08\x10\n\r\n\x05\x04\x06\x02\0\x05\x12\x04\xa6\x01\x11\ - \x15\n\r\n\x05\x04\x06\x02\0\x01\x12\x04\xa6\x01\x16!\n\r\n\x05\x04\x06\ - \x02\0\x03\x12\x04\xa6\x01$%\n\x0c\n\x04\x04\x06\x02\x01\x12\x04\xa7\x01\ - \x08%\n\r\n\x05\x04\x06\x02\x01\x04\x12\x04\xa7\x01\x08\x10\n\r\n\x05\ - \x04\x06\x02\x01\x05\x12\x04\xa7\x01\x11\x15\n\r\n\x05\x04\x06\x02\x01\ - \x01\x12\x04\xa7\x01\x16\x20\n\r\n\x05\x04\x06\x02\x01\x03\x12\x04\xa7\ - \x01#$\n\x0c\n\x04\x04\x06\x02\x02\x12\x04\xa8\x01\x08'\n\r\n\x05\x04\ - \x06\x02\x02\x04\x12\x04\xa8\x01\x08\x10\n\r\n\x05\x04\x06\x02\x02\x05\ - \x12\x04\xa8\x01\x11\x15\n\r\n\x05\x04\x06\x02\x02\x01\x12\x04\xa8\x01\ - \x16\"\n\r\n\x05\x04\x06\x02\x02\x03\x12\x04\xa8\x01%&\n\x0c\n\x04\x04\ - \x06\x02\x03\x12\x04\xa9\x01\x08\"\n\r\n\x05\x04\x06\x02\x03\x04\x12\x04\ - \xa9\x01\x08\x10\n\r\n\x05\x04\x06\x02\x03\x05\x12\x04\xa9\x01\x11\x15\n\ - \r\n\x05\x04\x06\x02\x03\x01\x12\x04\xa9\x01\x16\x1d\n\r\n\x05\x04\x06\ - \x02\x03\x03\x12\x04\xa9\x01\x20!\n\x0c\n\x02\x04\x07\x12\x06\xac\x01\0\ - \xd8\x01\x01\n\x0b\n\x03\x04\x07\x01\x12\x04\xac\x01\x08\x17\n\x0c\n\x04\ - \x04\x07\x02\0\x12\x04\xad\x01\x04)\n\r\n\x05\x04\x07\x02\0\x04\x12\x04\ - \xad\x01\x04\x0c\n\r\n\x05\x04\x07\x02\0\x05\x12\x04\xad\x01\r\x13\n\r\n\ - \x05\x04\x07\x02\0\x01\x12\x04\xad\x01\x14$\n\r\n\x05\x04\x07\x02\0\x03\ - \x12\x04\xad\x01'(\n\xd0\x01\n\x04\x04\x07\x02\x01\x12\x04\xb2\x01\x04.\ - \x1a\xc1\x01\x20The\x20client\x20reports\x20its\x20decoy\x20list's\x20ve\ - rsion\x20number\x20here,\x20which\x20the\n\x20station\x20can\x20use\x20t\ - o\x20decide\x20whether\x20to\x20send\x20an\x20updated\x20one.\x20The\x20\ - station\n\x20should\x20always\x20send\x20a\x20list\x20if\x20this\x20fiel\ - d\x20is\x20set\x20to\x200.\n\n\r\n\x05\x04\x07\x02\x01\x04\x12\x04\xb2\ - \x01\x04\x0c\n\r\n\x05\x04\x07\x02\x01\x05\x12\x04\xb2\x01\r\x13\n\r\n\ - \x05\x04\x07\x02\x01\x01\x12\x04\xb2\x01\x14)\n\r\n\x05\x04\x07\x02\x01\ - \x03\x12\x04\xb2\x01,-\n\x0c\n\x04\x04\x07\x02\x02\x12\x04\xb4\x01\x041\ - \n\r\n\x05\x04\x07\x02\x02\x04\x12\x04\xb4\x01\x04\x0c\n\r\n\x05\x04\x07\ - \x02\x02\x06\x12\x04\xb4\x01\r\x1b\n\r\n\x05\x04\x07\x02\x02\x01\x12\x04\ - \xb4\x01\x1c,\n\r\n\x05\x04\x07\x02\x02\x03\x12\x04\xb4\x01/0\n\x80\x01\ - \n\x04\x04\x07\x02\x03\x12\x04\xb8\x01\x04$\x1ar\x20The\x20position\x20i\ + \x07use_TIL\x18\x04\x20\x01(\x08R\x06useTIL\x12\x1e\n\nprescanned\x18\ + \x05\x20\x01(\x08R\nprescanned\"\xcb\x04\n\x0fClientToStation\x12)\n\x10\ + protocol_version\x18\x01\x20\x01(\rR\x0fprotocolVersion\x122\n\x15decoy_\ + list_generation\x18\x02\x20\x01(\rR\x13decoyListGeneration\x12C\n\x10sta\ + te_transition\x18\x03\x20\x01(\x0e2\x18.tapdance.C2S_TransitionR\x0fstat\ + eTransition\x12\x1f\n\x0bupload_sync\x18\x04\x20\x01(\x04R\nuploadSync\ + \x12#\n\rfailed_decoys\x18\n\x20\x03(\tR\x0cfailedDecoys\x12,\n\x05stats\ + \x18\x0b\x20\x01(\x0b2\x16.tapdance.SessionStatsR\x05stats\x125\n\ttrans\ + port\x18\x0c\x20\x01(\x0e2\x17.tapdance.TransportTypeR\ttransport\x12%\n\ + \x0ecovert_address\x18\x14\x20\x01(\tR\rcovertAddress\x127\n\x18masked_d\ + ecoy_server_name\x18\x15\x20\x01(\tR\x15maskedDecoyServerName\x12\x1d\n\ + \nv6_support\x18\x16\x20\x01(\x08R\tv6Support\x12\x1d\n\nv4_support\x18\ + \x17\x20\x01(\x08R\tv4Support\x121\n\x05flags\x18\x18\x20\x01(\x0b2\x1b.\ + tapdance.RegistrationFlagsR\x05flags\x12\x18\n\x07padding\x18d\x20\x01(\ + \x0cR\x07padding\"\xa6\x02\n\nC2SWrapper\x12#\n\rshared_secret\x18\x01\ + \x20\x01(\x0cR\x0csharedSecret\x12L\n\x14registration_payload\x18\x03\ + \x20\x01(\x0b2\x19.tapdance.ClientToStationR\x13registrationPayload\x12M\ + \n\x13registration_source\x18\x04\x20\x01(\x0e2\x1c.tapdance.Registratio\ + nSourceR\x12registrationSource\x121\n\x14registration_address\x18\x06\ + \x20\x01(\x0cR\x13registrationAddress\x12#\n\rdecoy_address\x18\x07\x20\ + \x01(\x0cR\x0cdecoyAddress\"\xdd\x01\n\x0cSessionStats\x120\n\x14failed_\ + decoys_amount\x18\x14\x20\x01(\rR\x12failedDecoysAmount\x121\n\x15total_\ + time_to_connect\x18\x1f\x20\x01(\rR\x12totalTimeToConnect\x12$\n\x0ertt_\ + to_station\x18!\x20\x01(\rR\x0crttToStation\x12\x20\n\x0ctls_to_decoy\ + \x18&\x20\x01(\rR\ntlsToDecoy\x12\x20\n\x0ctcp_to_decoy\x18'\x20\x01(\rR\ + \ntcpToDecoy*+\n\x07KeyType\x12\x0f\n\x0bAES_GCM_128\x10Z\x12\x0f\n\x0bA\ + ES_GCM_256\x10[*\xe7\x01\n\x0eC2S_Transition\x12\x11\n\rC2S_NO_CHANGE\ + \x10\0\x12\x14\n\x10C2S_SESSION_INIT\x10\x01\x12\x1b\n\x17C2S_SESSION_CO\ + VERT_INIT\x10\x0b\x12\x18\n\x14C2S_EXPECT_RECONNECT\x10\x02\x12\x15\n\ + \x11C2S_SESSION_CLOSE\x10\x03\x12\x14\n\x10C2S_YIELD_UPLOAD\x10\x04\x12\ + \x16\n\x12C2S_ACQUIRE_UPLOAD\x10\x05\x12\x20\n\x1cC2S_EXPECT_UPLOADONLY_\ + RECONN\x10\x06\x12\x0e\n\tC2S_ERROR\x10\xff\x01*\x98\x01\n\x0eS2C_Transi\ + tion\x12\x11\n\rS2C_NO_CHANGE\x10\0\x12\x14\n\x10S2C_SESSION_INIT\x10\ + \x01\x12\x1b\n\x17S2C_SESSION_COVERT_INIT\x10\x0b\x12\x19\n\x15S2C_CONFI\ + RM_RECONNECT\x10\x02\x12\x15\n\x11S2C_SESSION_CLOSE\x10\x03\x12\x0e\n\tS\ + 2C_ERROR\x10\xff\x01*\xac\x01\n\x0eErrorReasonS2C\x12\x0c\n\x08NO_ERROR\ + \x10\0\x12\x11\n\rCOVERT_STREAM\x10\x01\x12\x13\n\x0fCLIENT_REPORTED\x10\ + \x02\x12\x13\n\x0fCLIENT_PROTOCOL\x10\x03\x12\x14\n\x10STATION_INTERNAL\ + \x10\x04\x12\x12\n\x0eDECOY_OVERLOAD\x10\x05\x12\x11\n\rCLIENT_STREAM\ + \x10d\x12\x12\n\x0eCLIENT_TIMEOUT\x10e*-\n\rTransportType\x12\x08\n\x04N\ + ull\x10\0\x12\x07\n\x03Min\x10\x01\x12\t\n\x05Obfs4\x10\x02*@\n\x12Regis\ + trationSource\x12\x0c\n\x08Detector\x10\0\x12\x07\n\x03API\x10\x01\x12\ + \x13\n\x0fDetectorPrescan\x10\x02J\xabR\n\x07\x12\x05\0\0\xfa\x01\x01\n\ + \x08\n\x01\x0c\x12\x03\0\0\x12\n\xb0\x01\n\x01\x02\x12\x03\x06\x08\x102\ + \xa5\x01\x20TODO:\x20We're\x20using\x20proto2\x20because\x20it's\x20the\ + \x20default\x20on\x20Ubuntu\x2016.04.\n\x20At\x20some\x20point\x20we\x20\ + will\x20want\x20to\x20migrate\x20to\x20proto3,\x20but\x20we\x20are\x20no\ + t\n\x20using\x20any\x20proto3\x20features\x20yet.\n\n\n\n\x02\x05\0\x12\ + \x04\x08\0\x0b\x01\n\n\n\x03\x05\0\x01\x12\x03\x08\x05\x0c\n\x0b\n\x04\ + \x05\0\x02\0\x12\x03\t\x04\x15\n\x0c\n\x05\x05\0\x02\0\x01\x12\x03\t\x04\ + \x0f\n\x0c\n\x05\x05\0\x02\0\x02\x12\x03\t\x12\x14\n\x20\n\x04\x05\0\x02\ + \x01\x12\x03\n\x04\x15\"\x13\x20not\x20supported\x20atm\n\n\x0c\n\x05\ + \x05\0\x02\x01\x01\x12\x03\n\x04\x0f\n\x0c\n\x05\x05\0\x02\x01\x02\x12\ + \x03\n\x12\x14\n\n\n\x02\x04\0\x12\x04\r\0\x12\x01\n\n\n\x03\x04\0\x01\ + \x12\x03\r\x08\x0e\n4\n\x04\x04\0\x02\0\x12\x03\x0f\x04\x1b\x1a'\x20A\ + \x20public\x20key,\x20as\x20used\x20by\x20the\x20station.\n\n\x0c\n\x05\ + \x04\0\x02\0\x04\x12\x03\x0f\x04\x0c\n\x0c\n\x05\x04\0\x02\0\x05\x12\x03\ + \x0f\r\x12\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\x0f\x13\x16\n\x0c\n\x05\ + \x04\0\x02\0\x03\x12\x03\x0f\x19\x1a\n\x0b\n\x04\x04\0\x02\x01\x12\x03\ + \x11\x04\x1e\n\x0c\n\x05\x04\0\x02\x01\x04\x12\x03\x11\x04\x0c\n\x0c\n\ + \x05\x04\0\x02\x01\x06\x12\x03\x11\r\x14\n\x0c\n\x05\x04\0\x02\x01\x01\ + \x12\x03\x11\x15\x19\n\x0c\n\x05\x04\0\x02\x01\x03\x12\x03\x11\x1c\x1d\n\ + \n\n\x02\x04\x01\x12\x04\x14\0:\x01\n\n\n\x03\x04\x01\x01\x12\x03\x14\ + \x08\x14\n\xa1\x01\n\x04\x04\x01\x02\0\x12\x03\x19\x04!\x1a\x93\x01\x20T\ + he\x20hostname/SNI\x20to\x20use\x20for\x20this\x20host\n\n\x20The\x20hos\ + tname\x20is\x20the\x20only\x20required\x20field,\x20although\x20other\n\ + \x20fields\x20are\x20expected\x20to\x20be\x20present\x20in\x20most\x20ca\ + ses.\n\n\x0c\n\x05\x04\x01\x02\0\x04\x12\x03\x19\x04\x0c\n\x0c\n\x05\x04\ + \x01\x02\0\x05\x12\x03\x19\r\x13\n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03\ + \x19\x14\x1c\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03\x19\x1f\x20\n\xf7\x01\ + \n\x04\x04\x01\x02\x01\x12\x03\x20\x04\"\x1a\xe9\x01\x20The\x2032-bit\ + \x20ipv4\x20address,\x20in\x20network\x20byte\x20order\n\n\x20If\x20the\ + \x20IPv4\x20address\x20is\x20absent,\x20then\x20it\x20may\x20be\x20resol\ + ved\x20via\n\x20DNS\x20by\x20the\x20client,\x20or\x20the\x20client\x20ma\ + y\x20discard\x20this\x20decoy\x20spec\n\x20if\x20local\x20DNS\x20is\x20u\ + ntrusted,\x20or\x20the\x20service\x20may\x20be\x20multihomed.\n\n\x0c\n\ + \x05\x04\x01\x02\x01\x04\x12\x03\x20\x04\x0c\n\x0c\n\x05\x04\x01\x02\x01\ + \x05\x12\x03\x20\r\x14\n\x0c\n\x05\x04\x01\x02\x01\x01\x12\x03\x20\x15\ + \x1d\n\x0c\n\x05\x04\x01\x02\x01\x03\x12\x03\x20\x20!\n>\n\x04\x04\x01\ + \x02\x02\x12\x03#\x04\x20\x1a1\x20The\x20128-bit\x20ipv6\x20address,\x20\ + in\x20network\x20byte\x20order\n\n\x0c\n\x05\x04\x01\x02\x02\x04\x12\x03\ + #\x04\x0c\n\x0c\n\x05\x04\x01\x02\x02\x05\x12\x03#\r\x12\n\x0c\n\x05\x04\ + \x01\x02\x02\x01\x12\x03#\x13\x1b\n\x0c\n\x05\x04\x01\x02\x02\x03\x12\ + \x03#\x1e\x1f\n\x91\x01\n\x04\x04\x01\x02\x03\x12\x03)\x04\x1f\x1a\x83\ + \x01\x20The\x20Tapdance\x20station\x20public\x20key\x20to\x20use\x20when\ + \x20contacting\x20this\n\x20decoy\n\n\x20If\x20omitted,\x20the\x20defaul\ + t\x20station\x20public\x20key\x20(if\x20any)\x20is\x20used.\n\n\x0c\n\ + \x05\x04\x01\x02\x03\x04\x12\x03)\x04\x0c\n\x0c\n\x05\x04\x01\x02\x03\ + \x06\x12\x03)\r\x13\n\x0c\n\x05\x04\x01\x02\x03\x01\x12\x03)\x14\x1a\n\ + \x0c\n\x05\x04\x01\x02\x03\x03\x12\x03)\x1d\x1e\n\xee\x01\n\x04\x04\x01\ + \x02\x04\x12\x030\x04\x20\x1a\xe0\x01\x20The\x20maximum\x20duration,\x20\ + in\x20milliseconds,\x20to\x20maintain\x20an\x20open\n\x20connection\x20t\ + o\x20this\x20decoy\x20(because\x20the\x20decoy\x20may\x20close\x20the\n\ + \x20connection\x20itself\x20after\x20this\x20length\x20of\x20time)\n\n\ + \x20If\x20omitted,\x20a\x20default\x20of\x2030,000\x20milliseconds\x20is\ + \x20assumed.\n\n\x0c\n\x05\x04\x01\x02\x04\x04\x12\x030\x04\x0c\n\x0c\n\ + \x05\x04\x01\x02\x04\x05\x12\x030\r\x13\n\x0c\n\x05\x04\x01\x02\x04\x01\ + \x12\x030\x14\x1b\n\x0c\n\x05\x04\x01\x02\x04\x03\x12\x030\x1e\x1f\n\xb0\ + \x02\n\x04\x04\x01\x02\x05\x12\x039\x04\x1f\x1a\xa2\x02\x20The\x20maximu\ + m\x20TCP\x20window\x20size\x20to\x20attempt\x20to\x20use\x20for\x20this\ + \x20decoy.\n\n\x20If\x20omitted,\x20a\x20default\x20of\x2015360\x20is\ + \x20assumed.\n\n\x20TODO:\x20the\x20default\x20is\x20based\x20on\x20the\ + \x20current\x20heuristic\x20of\x20only\n\x20using\x20decoys\x20that\x20p\ + ermit\x20windows\x20of\x2015KB\x20or\x20larger.\x20\x20If\x20this\n\x20h\ + euristic\x20changes,\x20then\x20this\x20default\x20doesn't\x20make\x20se\ + nse.\n\n\x0c\n\x05\x04\x01\x02\x05\x04\x12\x039\x04\x0c\n\x0c\n\x05\x04\ + \x01\x02\x05\x05\x12\x039\r\x13\n\x0c\n\x05\x04\x01\x02\x05\x01\x12\x039\ + \x14\x1a\n\x0c\n\x05\x04\x01\x02\x05\x03\x12\x039\x1d\x1e\n\x83\x08\n\ + \x02\x04\x02\x12\x04Q\0W\x012\xf6\x07\x20In\x20version\x201,\x20the\x20r\ + equest\x20is\x20very\x20simple:\x20when\n\x20the\x20client\x20sends\x20a\ + \x20MSG_PROTO\x20to\x20the\x20station,\x20if\x20the\n\x20generation\x20n\ + umber\x20is\x20present,\x20then\x20this\x20request\x20includes\n\x20(in\ + \x20addition\x20to\x20whatever\x20other\x20operations\x20are\x20part\x20\ + of\x20the\n\x20request)\x20a\x20request\x20for\x20the\x20station\x20to\ + \x20send\x20a\x20copy\x20of\n\x20the\x20current\x20decoy\x20set\x20that\ + \x20has\x20a\x20generation\x20number\x20greater\n\x20than\x20the\x20gene\ + ration\x20number\x20in\x20its\x20request.\n\n\x20If\x20the\x20response\ + \x20contains\x20a\x20DecoyListUpdate\x20with\x20a\x20generation\x20numbe\ + r\x20equal\n\x20to\x20that\x20which\x20the\x20client\x20sent,\x20then\ + \x20the\x20client\x20is\x20\"caught\x20up\"\x20with\n\x20the\x20station\ + \x20and\x20the\x20response\x20contains\x20no\x20new\x20information\n\x20\ + (and\x20all\x20other\x20fields\x20may\x20be\x20omitted\x20or\x20empty).\ + \x20\x20Otherwise,\n\x20the\x20station\x20will\x20send\x20the\x20latest\ + \x20configuration\x20information,\n\x20along\x20with\x20its\x20generatio\ + n\x20number.\n\n\x20The\x20station\x20can\x20also\x20send\x20ClientConf\ + \x20messages\n\x20(as\x20part\x20of\x20Station2Client\x20messages)\x20wh\ + enever\x20it\x20wants.\n\x20The\x20client\x20is\x20expected\x20to\x20rea\ + ct\x20as\x20if\x20it\x20had\x20requested\n\x20such\x20messages\x20--\x20\ + possibly\x20by\x20ignoring\x20them,\x20if\x20the\x20client\n\x20is\x20al\ + ready\x20up-to-date\x20according\x20to\x20the\x20generation\x20number.\n\ + \n\n\n\x03\x04\x02\x01\x12\x03Q\x08\x12\n\x0b\n\x04\x04\x02\x02\0\x12\ + \x03R\x04&\n\x0c\n\x05\x04\x02\x02\0\x04\x12\x03R\x04\x0c\n\x0c\n\x05\ + \x04\x02\x02\0\x06\x12\x03R\r\x16\n\x0c\n\x05\x04\x02\x02\0\x01\x12\x03R\ + \x17!\n\x0c\n\x05\x04\x02\x02\0\x03\x12\x03R$%\n\x0b\n\x04\x04\x02\x02\ + \x01\x12\x03S\x04#\n\x0c\n\x05\x04\x02\x02\x01\x04\x12\x03S\x04\x0c\n\ + \x0c\n\x05\x04\x02\x02\x01\x05\x12\x03S\r\x13\n\x0c\n\x05\x04\x02\x02\ + \x01\x01\x12\x03S\x14\x1e\n\x0c\n\x05\x04\x02\x02\x01\x03\x12\x03S!\"\n\ + \x0b\n\x04\x04\x02\x02\x02\x12\x03T\x04'\n\x0c\n\x05\x04\x02\x02\x02\x04\ + \x12\x03T\x04\x0c\n\x0c\n\x05\x04\x02\x02\x02\x06\x12\x03T\r\x13\n\x0c\n\ + \x05\x04\x02\x02\x02\x01\x12\x03T\x14\"\n\x0c\n\x05\x04\x02\x02\x02\x03\ + \x12\x03T%&\n\x0b\n\x04\x04\x02\x02\x03\x12\x03U\x043\n\x0c\n\x05\x04\ + \x02\x02\x03\x04\x12\x03U\x04\x0c\n\x0c\n\x05\x04\x02\x02\x03\x06\x12\ + \x03U\r\x1c\n\x0c\n\x05\x04\x02\x02\x03\x01\x12\x03U\x1d.\n\x0c\n\x05\ + \x04\x02\x02\x03\x03\x12\x03U12\n\x0b\n\x04\x04\x02\x02\x04\x12\x03V\x04\ + '\n\x0c\n\x05\x04\x02\x02\x04\x04\x12\x03V\x04\x0c\n\x0c\n\x05\x04\x02\ + \x02\x04\x06\x12\x03V\r\x13\n\x0c\n\x05\x04\x02\x02\x04\x01\x12\x03V\x14\ + \"\n\x0c\n\x05\x04\x02\x02\x04\x03\x12\x03V%&\n\n\n\x02\x04\x03\x12\x04Y\ + \0[\x01\n\n\n\x03\x04\x03\x01\x12\x03Y\x08\x11\n\x0b\n\x04\x04\x03\x02\0\ + \x12\x03Z\x04)\n\x0c\n\x05\x04\x03\x02\0\x04\x12\x03Z\x04\x0c\n\x0c\n\ + \x05\x04\x03\x02\0\x06\x12\x03Z\r\x19\n\x0c\n\x05\x04\x03\x02\0\x01\x12\ + \x03Z\x1a$\n\x0c\n\x05\x04\x03\x02\0\x03\x12\x03Z'(\n\n\n\x02\x04\x04\ + \x12\x04]\0_\x01\n\n\n\x03\x04\x04\x01\x12\x03]\x08\x17\n\x0b\n\x04\x04\ + \x04\x02\0\x12\x03^\x04\x1f\n\x0c\n\x05\x04\x04\x02\0\x04\x12\x03^\x04\ + \x0c\n\x0c\n\x05\x04\x04\x02\0\x05\x12\x03^\r\x13\n\x0c\n\x05\x04\x04\ + \x02\0\x01\x12\x03^\x14\x1a\n\x0c\n\x05\x04\x04\x02\0\x03\x12\x03^\x1d\ + \x1e\n-\n\x02\x05\x01\x12\x04b\0l\x01\x1a!\x20State\x20transitions\x20of\ + \x20the\x20client\n\n\n\n\x03\x05\x01\x01\x12\x03b\x05\x13\n\x0b\n\x04\ + \x05\x01\x02\0\x12\x03c\x04\x16\n\x0c\n\x05\x05\x01\x02\0\x01\x12\x03c\ + \x04\x11\n\x0c\n\x05\x05\x01\x02\0\x02\x12\x03c\x14\x15\n\"\n\x04\x05\ + \x01\x02\x01\x12\x03d\x04\x19\"\x15\x20connect\x20me\x20to\x20squid\n\n\ + \x0c\n\x05\x05\x01\x02\x01\x01\x12\x03d\x04\x14\n\x0c\n\x05\x05\x01\x02\ + \x01\x02\x12\x03d\x17\x18\n,\n\x04\x05\x01\x02\x02\x12\x03e\x04!\"\x1f\ + \x20connect\x20me\x20to\x20provided\x20covert\n\n\x0c\n\x05\x05\x01\x02\ + \x02\x01\x12\x03e\x04\x1b\n\x0c\n\x05\x05\x01\x02\x02\x02\x12\x03e\x1e\ + \x20\n\x0b\n\x04\x05\x01\x02\x03\x12\x03f\x04\x1d\n\x0c\n\x05\x05\x01\ + \x02\x03\x01\x12\x03f\x04\x18\n\x0c\n\x05\x05\x01\x02\x03\x02\x12\x03f\ + \x1b\x1c\n\x0b\n\x04\x05\x01\x02\x04\x12\x03g\x04\x1a\n\x0c\n\x05\x05\ + \x01\x02\x04\x01\x12\x03g\x04\x15\n\x0c\n\x05\x05\x01\x02\x04\x02\x12\ + \x03g\x18\x19\n\x0b\n\x04\x05\x01\x02\x05\x12\x03h\x04\x19\n\x0c\n\x05\ + \x05\x01\x02\x05\x01\x12\x03h\x04\x14\n\x0c\n\x05\x05\x01\x02\x05\x02\ + \x12\x03h\x17\x18\n\x0b\n\x04\x05\x01\x02\x06\x12\x03i\x04\x1b\n\x0c\n\ + \x05\x05\x01\x02\x06\x01\x12\x03i\x04\x16\n\x0c\n\x05\x05\x01\x02\x06\ + \x02\x12\x03i\x19\x1a\n\x0b\n\x04\x05\x01\x02\x07\x12\x03j\x04%\n\x0c\n\ + \x05\x05\x01\x02\x07\x01\x12\x03j\x04\x20\n\x0c\n\x05\x05\x01\x02\x07\ + \x02\x12\x03j#$\n\x0b\n\x04\x05\x01\x02\x08\x12\x03k\x04\x14\n\x0c\n\x05\ + \x05\x01\x02\x08\x01\x12\x03k\x04\r\n\x0c\n\x05\x05\x01\x02\x08\x02\x12\ + \x03k\x10\x13\n-\n\x02\x05\x02\x12\x04o\0w\x01\x1a!\x20State\x20transiti\ + ons\x20of\x20the\x20server\n\n\n\n\x03\x05\x02\x01\x12\x03o\x05\x13\n\ + \x0b\n\x04\x05\x02\x02\0\x12\x03p\x04\x16\n\x0c\n\x05\x05\x02\x02\0\x01\ + \x12\x03p\x04\x11\n\x0c\n\x05\x05\x02\x02\0\x02\x12\x03p\x14\x15\n!\n\ + \x04\x05\x02\x02\x01\x12\x03q\x04\x19\"\x14\x20connected\x20to\x20squid\ + \n\n\x0c\n\x05\x05\x02\x02\x01\x01\x12\x03q\x04\x14\n\x0c\n\x05\x05\x02\ + \x02\x01\x02\x12\x03q\x17\x18\n'\n\x04\x05\x02\x02\x02\x12\x03r\x04!\"\ + \x1a\x20connected\x20to\x20covert\x20host\n\n\x0c\n\x05\x05\x02\x02\x02\ + \x01\x12\x03r\x04\x1b\n\x0c\n\x05\x05\x02\x02\x02\x02\x12\x03r\x1e\x20\n\ + \x0b\n\x04\x05\x02\x02\x03\x12\x03s\x04\x1e\n\x0c\n\x05\x05\x02\x02\x03\ + \x01\x12\x03s\x04\x19\n\x0c\n\x05\x05\x02\x02\x03\x02\x12\x03s\x1c\x1d\n\ + \x0b\n\x04\x05\x02\x02\x04\x12\x03t\x04\x1a\n\x0c\n\x05\x05\x02\x02\x04\ + \x01\x12\x03t\x04\x15\n\x0c\n\x05\x05\x02\x02\x04\x02\x12\x03t\x18\x19\n\ + R\n\x04\x05\x02\x02\x05\x12\x03v\x04\x14\x1aE\x20TODO\x20should\x20proba\ + bly\x20also\x20allow\x20EXPECT_RECONNECT\x20here,\x20for\x20DittoTap\n\n\ + \x0c\n\x05\x05\x02\x02\x05\x01\x12\x03v\x04\r\n\x0c\n\x05\x05\x02\x02\ + \x05\x02\x12\x03v\x10\x13\n7\n\x02\x05\x03\x12\x05z\0\x84\x01\x01\x1a*\ + \x20Should\x20accompany\x20all\x20S2C_ERROR\x20messages.\n\n\n\n\x03\x05\ + \x03\x01\x12\x03z\x05\x13\n\x0b\n\x04\x05\x03\x02\0\x12\x03{\x04\x11\n\ + \x0c\n\x05\x05\x03\x02\0\x01\x12\x03{\x04\x0c\n\x0c\n\x05\x05\x03\x02\0\ + \x02\x12\x03{\x0f\x10\n)\n\x04\x05\x03\x02\x01\x12\x03|\x04\x16\"\x1c\ + \x20Squid\x20TCP\x20connection\x20broke\n\n\x0c\n\x05\x05\x03\x02\x01\ + \x01\x12\x03|\x04\x11\n\x0c\n\x05\x05\x03\x02\x01\x02\x12\x03|\x14\x15\n\ + 6\n\x04\x05\x03\x02\x02\x12\x03}\x04\x18\")\x20You\x20told\x20me\x20some\ + thing\x20was\x20wrong,\x20client\n\n\x0c\n\x05\x05\x03\x02\x02\x01\x12\ + \x03}\x04\x13\n\x0c\n\x05\x05\x03\x02\x02\x02\x12\x03}\x16\x17\n?\n\x04\ + \x05\x03\x02\x03\x12\x03~\x04\x18\"2\x20You\x20messed\x20up,\x20client\ + \x20(e.g.\x20sent\x20a\x20bad\x20protobuf)\n\n\x0c\n\x05\x05\x03\x02\x03\ + \x01\x12\x03~\x04\x13\n\x0c\n\x05\x05\x03\x02\x03\x02\x12\x03~\x16\x17\n\ + \x16\n\x04\x05\x03\x02\x04\x12\x03\x7f\x04\x19\"\t\x20I\x20broke\n\n\x0c\ + \n\x05\x05\x03\x02\x04\x01\x12\x03\x7f\x04\x14\n\x0c\n\x05\x05\x03\x02\ + \x04\x02\x12\x03\x7f\x17\x18\nE\n\x04\x05\x03\x02\x05\x12\x04\x80\x01\ + \x04\x17\"7\x20Everything's\x20fine,\x20but\x20don't\x20use\x20this\x20d\ + ecoy\x20right\x20now\n\n\r\n\x05\x05\x03\x02\x05\x01\x12\x04\x80\x01\x04\ + \x12\n\r\n\x05\x05\x03\x02\x05\x02\x12\x04\x80\x01\x15\x16\nD\n\x04\x05\ + \x03\x02\x06\x12\x04\x82\x01\x04\x18\"6\x20My\x20stream\x20to\x20you\x20\ + broke.\x20(This\x20is\x20impossible\x20to\x20send)\n\n\r\n\x05\x05\x03\ + \x02\x06\x01\x12\x04\x82\x01\x04\x11\n\r\n\x05\x05\x03\x02\x06\x02\x12\ + \x04\x82\x01\x14\x17\nA\n\x04\x05\x03\x02\x07\x12\x04\x83\x01\x04\x19\"3\ + \x20You\x20never\x20came\x20back.\x20(This\x20is\x20impossible\x20to\x20\ + send)\n\n\r\n\x05\x05\x03\x02\x07\x01\x12\x04\x83\x01\x04\x12\n\r\n\x05\ + \x05\x03\x02\x07\x02\x12\x04\x83\x01\x15\x18\n\x0c\n\x02\x05\x04\x12\x06\ + \x86\x01\0\x8a\x01\x01\n\x0b\n\x03\x05\x04\x01\x12\x04\x86\x01\x05\x12\n\ + \x0c\n\x04\x05\x04\x02\0\x12\x04\x87\x01\x04\r\n\r\n\x05\x05\x04\x02\0\ + \x01\x12\x04\x87\x01\x04\x08\n\r\n\x05\x05\x04\x02\0\x02\x12\x04\x87\x01\ + \x0b\x0c\n`\n\x04\x05\x04\x02\x01\x12\x04\x88\x01\x04\x0c\"R\x20Send\x20\ + a\x2032-byte\x20HMAC\x20id\x20to\x20let\x20the\x20station\x20distinguish\ + \x20registrations\x20to\x20same\x20host\n\n\r\n\x05\x05\x04\x02\x01\x01\ + \x12\x04\x88\x01\x04\x07\n\r\n\x05\x05\x04\x02\x01\x02\x12\x04\x88\x01\n\ + \x0b\n$\n\x04\x05\x04\x02\x02\x12\x04\x89\x01\x04\x0e\"\x16\x20Not\x20im\ + plemented\x20yet?\n\n\r\n\x05\x05\x04\x02\x02\x01\x12\x04\x89\x01\x04\t\ + \n\r\n\x05\x05\x04\x02\x02\x02\x12\x04\x89\x01\x0c\r\n\x0c\n\x02\x04\x05\ + \x12\x06\x8c\x01\0\xa3\x01\x01\n\x0b\n\x03\x04\x05\x01\x12\x04\x8c\x01\ + \x08\x17\nO\n\x04\x04\x05\x02\0\x12\x04\x8e\x01\x04)\x1aA\x20Should\x20a\ + ccompany\x20(at\x20least)\x20SESSION_INIT\x20and\x20CONFIRM_RECONNECT.\n\ + \n\r\n\x05\x04\x05\x02\0\x04\x12\x04\x8e\x01\x04\x0c\n\r\n\x05\x04\x05\ + \x02\0\x05\x12\x04\x8e\x01\r\x13\n\r\n\x05\x04\x05\x02\0\x01\x12\x04\x8e\ + \x01\x14$\n\r\n\x05\x04\x05\x02\0\x03\x12\x04\x8e\x01'(\nv\n\x04\x04\x05\ + \x02\x01\x12\x04\x92\x01\x041\x1ah\x20There\x20might\x20be\x20a\x20state\ + \x20transition.\x20May\x20be\x20absent;\x20absence\x20should\x20be\n\x20\ + treated\x20identically\x20to\x20NO_CHANGE.\n\n\r\n\x05\x04\x05\x02\x01\ + \x04\x12\x04\x92\x01\x04\x0c\n\r\n\x05\x04\x05\x02\x01\x06\x12\x04\x92\ + \x01\r\x1b\n\r\n\x05\x04\x05\x02\x01\x01\x12\x04\x92\x01\x1c,\n\r\n\x05\ + \x04\x05\x02\x01\x03\x12\x04\x92\x01/0\nc\n\x04\x04\x05\x02\x02\x12\x04\ + \x96\x01\x04(\x1aU\x20The\x20station\x20can\x20send\x20client\x20config\ + \x20info\x20piggybacked\n\x20on\x20any\x20message,\x20as\x20it\x20sees\ + \x20fit\n\n\r\n\x05\x04\x05\x02\x02\x04\x12\x04\x96\x01\x04\x0c\n\r\n\ + \x05\x04\x05\x02\x02\x06\x12\x04\x96\x01\r\x17\n\r\n\x05\x04\x05\x02\x02\ + \x01\x12\x04\x96\x01\x18#\n\r\n\x05\x04\x05\x02\x02\x03\x12\x04\x96\x01&\ + '\nP\n\x04\x04\x05\x02\x03\x12\x04\x99\x01\x04+\x1aB\x20If\x20state_tran\ + sition\x20==\x20S2C_ERROR,\x20this\x20field\x20is\x20the\x20explanation.\ + \n\n\r\n\x05\x04\x05\x02\x03\x04\x12\x04\x99\x01\x04\x0c\n\r\n\x05\x04\ + \x05\x02\x03\x06\x12\x04\x99\x01\r\x1b\n\r\n\x05\x04\x05\x02\x03\x01\x12\ + \x04\x99\x01\x1c&\n\r\n\x05\x04\x05\x02\x03\x03\x12\x04\x99\x01)*\nQ\n\ + \x04\x04\x05\x02\x04\x12\x04\x9c\x01\x04$\x1aC\x20Signals\x20client\x20t\ + o\x20stop\x20connecting\x20for\x20following\x20amount\x20of\x20seconds\n\ + \n\r\n\x05\x04\x05\x02\x04\x04\x12\x04\x9c\x01\x04\x0c\n\r\n\x05\x04\x05\ + \x02\x04\x05\x12\x04\x9c\x01\r\x13\n\r\n\x05\x04\x05\x02\x04\x01\x12\x04\ + \x9c\x01\x14\x1f\n\r\n\x05\x04\x05\x02\x04\x03\x12\x04\x9c\x01\"#\nK\n\ + \x04\x04\x05\x02\x05\x12\x04\x9f\x01\x04#\x1a=\x20Sent\x20in\x20SESSION_\ + INIT,\x20identifies\x20the\x20station\x20that\x20picked\x20up\n\n\r\n\ + \x05\x04\x05\x02\x05\x04\x12\x04\x9f\x01\x04\x0c\n\r\n\x05\x04\x05\x02\ + \x05\x05\x12\x04\x9f\x01\r\x13\n\r\n\x05\x04\x05\x02\x05\x01\x12\x04\x9f\ + \x01\x14\x1e\n\r\n\x05\x04\x05\x02\x05\x03\x12\x04\x9f\x01!\"\nG\n\x04\ + \x04\x05\x02\x06\x12\x04\xa2\x01\x04!\x1a9\x20Random-sized\x20junk\x20to\ + \x20defeat\x20packet\x20size\x20fingerprinting.\n\n\r\n\x05\x04\x05\x02\ + \x06\x04\x12\x04\xa2\x01\x04\x0c\n\r\n\x05\x04\x05\x02\x06\x05\x12\x04\ + \xa2\x01\r\x12\n\r\n\x05\x04\x05\x02\x06\x01\x12\x04\xa2\x01\x13\x1a\n\r\ + \n\x05\x04\x05\x02\x06\x03\x12\x04\xa2\x01\x1d\x20\n\x0c\n\x02\x04\x06\ + \x12\x06\xa5\x01\0\xab\x01\x01\n\x0b\n\x03\x04\x06\x01\x12\x04\xa5\x01\ + \x08\x19\n\x0c\n\x04\x04\x06\x02\0\x12\x04\xa6\x01\x08&\n\r\n\x05\x04\ + \x06\x02\0\x04\x12\x04\xa6\x01\x08\x10\n\r\n\x05\x04\x06\x02\0\x05\x12\ + \x04\xa6\x01\x11\x15\n\r\n\x05\x04\x06\x02\0\x01\x12\x04\xa6\x01\x16!\n\ + \r\n\x05\x04\x06\x02\0\x03\x12\x04\xa6\x01$%\n\x0c\n\x04\x04\x06\x02\x01\ + \x12\x04\xa7\x01\x08%\n\r\n\x05\x04\x06\x02\x01\x04\x12\x04\xa7\x01\x08\ + \x10\n\r\n\x05\x04\x06\x02\x01\x05\x12\x04\xa7\x01\x11\x15\n\r\n\x05\x04\ + \x06\x02\x01\x01\x12\x04\xa7\x01\x16\x20\n\r\n\x05\x04\x06\x02\x01\x03\ + \x12\x04\xa7\x01#$\n\x0c\n\x04\x04\x06\x02\x02\x12\x04\xa8\x01\x08'\n\r\ + \n\x05\x04\x06\x02\x02\x04\x12\x04\xa8\x01\x08\x10\n\r\n\x05\x04\x06\x02\ + \x02\x05\x12\x04\xa8\x01\x11\x15\n\r\n\x05\x04\x06\x02\x02\x01\x12\x04\ + \xa8\x01\x16\"\n\r\n\x05\x04\x06\x02\x02\x03\x12\x04\xa8\x01%&\n\x0c\n\ + \x04\x04\x06\x02\x03\x12\x04\xa9\x01\x04\x1e\n\r\n\x05\x04\x06\x02\x03\ + \x04\x12\x04\xa9\x01\x04\x0c\n\r\n\x05\x04\x06\x02\x03\x05\x12\x04\xa9\ + \x01\r\x11\n\r\n\x05\x04\x06\x02\x03\x01\x12\x04\xa9\x01\x12\x19\n\r\n\ + \x05\x04\x06\x02\x03\x03\x12\x04\xa9\x01\x1c\x1d\n\x0c\n\x04\x04\x06\x02\ + \x04\x12\x04\xaa\x01\x04!\n\r\n\x05\x04\x06\x02\x04\x04\x12\x04\xaa\x01\ + \x04\x0c\n\r\n\x05\x04\x06\x02\x04\x05\x12\x04\xaa\x01\r\x11\n\r\n\x05\ + \x04\x06\x02\x04\x01\x12\x04\xaa\x01\x12\x1c\n\r\n\x05\x04\x06\x02\x04\ + \x03\x12\x04\xaa\x01\x1f\x20\n\x0c\n\x02\x04\x07\x12\x06\xad\x01\0\xd9\ + \x01\x01\n\x0b\n\x03\x04\x07\x01\x12\x04\xad\x01\x08\x17\n\x0c\n\x04\x04\ + \x07\x02\0\x12\x04\xae\x01\x04)\n\r\n\x05\x04\x07\x02\0\x04\x12\x04\xae\ + \x01\x04\x0c\n\r\n\x05\x04\x07\x02\0\x05\x12\x04\xae\x01\r\x13\n\r\n\x05\ + \x04\x07\x02\0\x01\x12\x04\xae\x01\x14$\n\r\n\x05\x04\x07\x02\0\x03\x12\ + \x04\xae\x01'(\n\xd0\x01\n\x04\x04\x07\x02\x01\x12\x04\xb3\x01\x04.\x1a\ + \xc1\x01\x20The\x20client\x20reports\x20its\x20decoy\x20list's\x20versio\ + n\x20number\x20here,\x20which\x20the\n\x20station\x20can\x20use\x20to\ + \x20decide\x20whether\x20to\x20send\x20an\x20updated\x20one.\x20The\x20s\ + tation\n\x20should\x20always\x20send\x20a\x20list\x20if\x20this\x20field\ + \x20is\x20set\x20to\x200.\n\n\r\n\x05\x04\x07\x02\x01\x04\x12\x04\xb3\ + \x01\x04\x0c\n\r\n\x05\x04\x07\x02\x01\x05\x12\x04\xb3\x01\r\x13\n\r\n\ + \x05\x04\x07\x02\x01\x01\x12\x04\xb3\x01\x14)\n\r\n\x05\x04\x07\x02\x01\ + \x03\x12\x04\xb3\x01,-\n\x0c\n\x04\x04\x07\x02\x02\x12\x04\xb5\x01\x041\ + \n\r\n\x05\x04\x07\x02\x02\x04\x12\x04\xb5\x01\x04\x0c\n\r\n\x05\x04\x07\ + \x02\x02\x06\x12\x04\xb5\x01\r\x1b\n\r\n\x05\x04\x07\x02\x02\x01\x12\x04\ + \xb5\x01\x1c,\n\r\n\x05\x04\x07\x02\x02\x03\x12\x04\xb5\x01/0\n\x80\x01\ + \n\x04\x04\x07\x02\x03\x12\x04\xb9\x01\x04$\x1ar\x20The\x20position\x20i\ n\x20the\x20overall\x20session's\x20upload\x20sequence\x20where\x20the\ \x20current\n\x20YIELD=>ACQUIRE\x20switchover\x20is\x20happening.\n\n\r\ - \n\x05\x04\x07\x02\x03\x04\x12\x04\xb8\x01\x04\x0c\n\r\n\x05\x04\x07\x02\ - \x03\x05\x12\x04\xb8\x01\r\x13\n\r\n\x05\x04\x07\x02\x03\x01\x12\x04\xb8\ - \x01\x14\x1f\n\r\n\x05\x04\x07\x02\x03\x03\x12\x04\xb8\x01\"#\nq\n\x04\ - \x04\x07\x02\x04\x12\x04\xbd\x01\x04'\x1ac\x20List\x20of\x20decoys\x20th\ + \n\x05\x04\x07\x02\x03\x04\x12\x04\xb9\x01\x04\x0c\n\r\n\x05\x04\x07\x02\ + \x03\x05\x12\x04\xb9\x01\r\x13\n\r\n\x05\x04\x07\x02\x03\x01\x12\x04\xb9\ + \x01\x14\x1f\n\r\n\x05\x04\x07\x02\x03\x03\x12\x04\xb9\x01\"#\nq\n\x04\ + \x04\x07\x02\x04\x12\x04\xbe\x01\x04'\x1ac\x20List\x20of\x20decoys\x20th\ at\x20client\x20have\x20unsuccessfully\x20tried\x20in\x20current\x20sess\ ion.\n\x20Could\x20be\x20sent\x20in\x20chunks\n\n\r\n\x05\x04\x07\x02\ - \x04\x04\x12\x04\xbd\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x04\x05\x12\x04\ - \xbd\x01\r\x13\n\r\n\x05\x04\x07\x02\x04\x01\x12\x04\xbd\x01\x14!\n\r\n\ - \x05\x04\x07\x02\x04\x03\x12\x04\xbd\x01$&\n\x0c\n\x04\x04\x07\x02\x05\ - \x12\x04\xbf\x01\x04%\n\r\n\x05\x04\x07\x02\x05\x04\x12\x04\xbf\x01\x04\ - \x0c\n\r\n\x05\x04\x07\x02\x05\x06\x12\x04\xbf\x01\r\x19\n\r\n\x05\x04\ - \x07\x02\x05\x01\x12\x04\xbf\x01\x1a\x1f\n\r\n\x05\x04\x07\x02\x05\x03\ - \x12\x04\xbf\x01\"$\nk\n\x04\x04\x07\x02\x06\x12\x04\xc2\x01\x04*\x1a]\ + \x04\x04\x12\x04\xbe\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x04\x05\x12\x04\ + \xbe\x01\r\x13\n\r\n\x05\x04\x07\x02\x04\x01\x12\x04\xbe\x01\x14!\n\r\n\ + \x05\x04\x07\x02\x04\x03\x12\x04\xbe\x01$&\n\x0c\n\x04\x04\x07\x02\x05\ + \x12\x04\xc0\x01\x04%\n\r\n\x05\x04\x07\x02\x05\x04\x12\x04\xc0\x01\x04\ + \x0c\n\r\n\x05\x04\x07\x02\x05\x06\x12\x04\xc0\x01\r\x19\n\r\n\x05\x04\ + \x07\x02\x05\x01\x12\x04\xc0\x01\x1a\x1f\n\r\n\x05\x04\x07\x02\x05\x03\ + \x12\x04\xc0\x01\"$\nk\n\x04\x04\x07\x02\x06\x12\x04\xc3\x01\x04*\x1a]\ \x20NullTransport,\x20MinTransport,\x20Obfs4Transport,\x20etc.\x20Transp\ ort\x20type\x20we\x20want\x20from\x20phantom\x20proxy\n\n\r\n\x05\x04\ - \x07\x02\x06\x04\x12\x04\xc2\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x06\x06\ - \x12\x04\xc2\x01\r\x1a\n\r\n\x05\x04\x07\x02\x06\x01\x12\x04\xc2\x01\x1b\ - $\n\r\n\x05\x04\x07\x02\x06\x03\x12\x04\xc2\x01')\n\xc8\x03\n\x04\x04\ - \x07\x02\x07\x12\x04\xca\x01\x04(\x1a\xb9\x03\x20Station\x20is\x20only\ + \x07\x02\x06\x04\x12\x04\xc3\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x06\x06\ + \x12\x04\xc3\x01\r\x1a\n\r\n\x05\x04\x07\x02\x06\x01\x12\x04\xc3\x01\x1b\ + $\n\r\n\x05\x04\x07\x02\x06\x03\x12\x04\xc3\x01')\n\xc8\x03\n\x04\x04\ + \x07\x02\x07\x12\x04\xcb\x01\x04(\x1a\xb9\x03\x20Station\x20is\x20only\ \x20required\x20to\x20check\x20this\x20variable\x20during\x20session\x20\ initialization.\n\x20If\x20set,\x20station\x20must\x20facilitate\x20conn\ ection\x20to\x20said\x20target\x20by\x20itself,\x20i.e.\x20write\x20into\ @@ -4231,99 +4283,101 @@ static file_descriptor_proto_data: &'static [u8] = b"\ or\n\x20resolvable\x20hostname)\x20and\x20port\n\x20TODO:\x20make\x20it\ \x20required\x20for\x20initialization,\x20and\x20stop\x20connecting\x20a\ ny\x20client\x20straight\x20to\x20squid?\n\n\r\n\x05\x04\x07\x02\x07\x04\ - \x12\x04\xca\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x07\x05\x12\x04\xca\x01\r\ - \x13\n\r\n\x05\x04\x07\x02\x07\x01\x12\x04\xca\x01\x14\"\n\r\n\x05\x04\ - \x07\x02\x07\x03\x12\x04\xca\x01%'\nR\n\x04\x04\x07\x02\x08\x12\x04\xcd\ + \x12\x04\xcb\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x07\x05\x12\x04\xcb\x01\r\ + \x13\n\r\n\x05\x04\x07\x02\x07\x01\x12\x04\xcb\x01\x14\"\n\r\n\x05\x04\ + \x07\x02\x07\x03\x12\x04\xcb\x01%'\nR\n\x04\x04\x07\x02\x08\x12\x04\xce\ \x01\x042\x1aD\x20Used\x20in\x20dark\x20decoys\x20to\x20signal\x20which\ \x20dark\x20decoy\x20it\x20will\x20connect\x20to.\n\n\r\n\x05\x04\x07\ - \x02\x08\x04\x12\x04\xcd\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x08\x05\x12\ - \x04\xcd\x01\r\x13\n\r\n\x05\x04\x07\x02\x08\x01\x12\x04\xcd\x01\x14,\n\ - \r\n\x05\x04\x07\x02\x08\x03\x12\x04\xcd\x01/1\nR\n\x04\x04\x07\x02\t\ - \x12\x04\xd0\x01\x04\"\x1aD\x20Used\x20to\x20indicate\x20to\x20server\ + \x02\x08\x04\x12\x04\xce\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x08\x05\x12\ + \x04\xce\x01\r\x13\n\r\n\x05\x04\x07\x02\x08\x01\x12\x04\xce\x01\x14,\n\ + \r\n\x05\x04\x07\x02\x08\x03\x12\x04\xce\x01/1\nR\n\x04\x04\x07\x02\t\ + \x12\x04\xd1\x01\x04\"\x1aD\x20Used\x20to\x20indicate\x20to\x20server\ \x20if\x20client\x20is\x20registering\x20v4,\x20v6\x20or\x20both\n\n\r\n\ - \x05\x04\x07\x02\t\x04\x12\x04\xd0\x01\x04\x0c\n\r\n\x05\x04\x07\x02\t\ - \x05\x12\x04\xd0\x01\r\x11\n\r\n\x05\x04\x07\x02\t\x01\x12\x04\xd0\x01\ - \x12\x1c\n\r\n\x05\x04\x07\x02\t\x03\x12\x04\xd0\x01\x1f!\n\x0c\n\x04\ - \x04\x07\x02\n\x12\x04\xd1\x01\x04\"\n\r\n\x05\x04\x07\x02\n\x04\x12\x04\ - \xd1\x01\x04\x0c\n\r\n\x05\x04\x07\x02\n\x05\x12\x04\xd1\x01\r\x11\n\r\n\ - \x05\x04\x07\x02\n\x01\x12\x04\xd1\x01\x12\x1c\n\r\n\x05\x04\x07\x02\n\ - \x03\x12\x04\xd1\x01\x1f!\nD\n\x04\x04\x07\x02\x0b\x12\x04\xd4\x01\x08.\ + \x05\x04\x07\x02\t\x04\x12\x04\xd1\x01\x04\x0c\n\r\n\x05\x04\x07\x02\t\ + \x05\x12\x04\xd1\x01\r\x11\n\r\n\x05\x04\x07\x02\t\x01\x12\x04\xd1\x01\ + \x12\x1c\n\r\n\x05\x04\x07\x02\t\x03\x12\x04\xd1\x01\x1f!\n\x0c\n\x04\ + \x04\x07\x02\n\x12\x04\xd2\x01\x04\"\n\r\n\x05\x04\x07\x02\n\x04\x12\x04\ + \xd2\x01\x04\x0c\n\r\n\x05\x04\x07\x02\n\x05\x12\x04\xd2\x01\r\x11\n\r\n\ + \x05\x04\x07\x02\n\x01\x12\x04\xd2\x01\x12\x1c\n\r\n\x05\x04\x07\x02\n\ + \x03\x12\x04\xd2\x01\x1f!\nD\n\x04\x04\x07\x02\x0b\x12\x04\xd5\x01\x08.\ \x1a6\x20A\x20collection\x20of\x20optional\x20flags\x20for\x20the\x20reg\ - istration.\n\n\r\n\x05\x04\x07\x02\x0b\x04\x12\x04\xd4\x01\x08\x10\n\r\n\ - \x05\x04\x07\x02\x0b\x06\x12\x04\xd4\x01\x11\"\n\r\n\x05\x04\x07\x02\x0b\ - \x01\x12\x04\xd4\x01#(\n\r\n\x05\x04\x07\x02\x0b\x03\x12\x04\xd4\x01+-\n\ - G\n\x04\x04\x07\x02\x0c\x12\x04\xd7\x01\x04!\x1a9\x20Random-sized\x20jun\ + istration.\n\n\r\n\x05\x04\x07\x02\x0b\x04\x12\x04\xd5\x01\x08\x10\n\r\n\ + \x05\x04\x07\x02\x0b\x06\x12\x04\xd5\x01\x11\"\n\r\n\x05\x04\x07\x02\x0b\ + \x01\x12\x04\xd5\x01#(\n\r\n\x05\x04\x07\x02\x0b\x03\x12\x04\xd5\x01+-\n\ + G\n\x04\x04\x07\x02\x0c\x12\x04\xd8\x01\x04!\x1a9\x20Random-sized\x20jun\ k\x20to\x20defeat\x20packet\x20size\x20fingerprinting.\n\n\r\n\x05\x04\ - \x07\x02\x0c\x04\x12\x04\xd7\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x0c\x05\ - \x12\x04\xd7\x01\r\x12\n\r\n\x05\x04\x07\x02\x0c\x01\x12\x04\xd7\x01\x13\ - \x1a\n\r\n\x05\x04\x07\x02\x0c\x03\x12\x04\xd7\x01\x1d\x20\n\xbe\x01\n\ - \x02\x04\x08\x12\x06\xdc\x01\0\xe2\x01\x01\x1a\xaf\x01\x20Message\x20typ\ - e\x20used\x20as\x20the\x20request\x20body\x20when\x20registering\x20via\ - \x20the\x20HTTP\x20API.\n\x20This\x20message\x20is\x20assumed\x20to\x20b\ - e\x20sent\x20via\x20TLS,\x20meaning\x20that\x20sending\x20the\x20secret\ - \x20outright\x20is\x20acceptable.\n\n\x0b\n\x03\x04\x08\x01\x12\x04\xdc\ - \x01\x08\x13\nN\n\x04\x04\x08\x02\0\x12\x04\xde\x01\x04\x1e\x1a@\x20The\ - \x20secret\x20that\x20will\x20be\x20used\x20when\x20forming\x20phantom\ - \x20connections.\n\n\r\n\x05\x04\x08\x02\0\x04\x12\x04\xde\x01\x04\x0c\n\ - \r\n\x05\x04\x08\x02\0\x05\x12\x04\xde\x01\r\x12\n\r\n\x05\x04\x08\x02\0\ - \x01\x12\x04\xde\x01\x13\x19\n\r\n\x05\x04\x08\x02\0\x03\x12\x04\xde\x01\ - \x1c\x1d\nU\n\x04\x04\x08\x02\x01\x12\x04\xe1\x01\x046\x1aG\x20The\x20Cl\ - ientToStation\x20payload;\x20the\x20same\x20as\x20used\x20in\x20decoy\ - \x20registrations.\n\n\r\n\x05\x04\x08\x02\x01\x04\x12\x04\xe1\x01\x04\ - \x0c\n\r\n\x05\x04\x08\x02\x01\x06\x12\x04\xe1\x01\r\x1c\n\r\n\x05\x04\ - \x08\x02\x01\x01\x12\x04\xe1\x01\x1d1\n\r\n\x05\x04\x08\x02\x01\x03\x12\ - \x04\xe1\x0145\n\x0c\n\x02\x05\x05\x12\x06\xe4\x01\0\xe7\x01\x01\n\x0b\n\ - \x03\x05\x05\x01\x12\x04\xe4\x01\x05\x17\n\x0c\n\x04\x05\x05\x02\0\x12\ - \x04\xe5\x01\x08\x15\n\r\n\x05\x05\x05\x02\0\x01\x12\x04\xe5\x01\x08\x10\ - \n\r\n\x05\x05\x05\x02\0\x02\x12\x04\xe5\x01\x13\x14\n\x0c\n\x04\x05\x05\ - \x02\x01\x12\x04\xe6\x01\x08\x10\n\r\n\x05\x05\x05\x02\x01\x01\x12\x04\ - \xe6\x01\x08\x0b\n\r\n\x05\x05\x05\x02\x01\x02\x12\x04\xe6\x01\x0e\x0f\n\ - \x0c\n\x02\x04\t\x12\x06\xe9\x01\0\xed\x01\x01\n\x0b\n\x03\x04\t\x01\x12\ - \x04\xe9\x01\x08\x12\n\x0c\n\x04\x04\t\x02\0\x12\x04\xea\x01\x08)\n\r\n\ - \x05\x04\t\x02\0\x04\x12\x04\xea\x01\x08\x10\n\r\n\x05\x04\t\x02\0\x05\ - \x12\x04\xea\x01\x11\x16\n\r\n\x05\x04\t\x02\0\x01\x12\x04\xea\x01\x17$\ - \n\r\n\x05\x04\t\x02\0\x03\x12\x04\xea\x01'(\n\x0c\n\x04\x04\t\x02\x01\ - \x12\x04\xeb\x01\x08:\n\r\n\x05\x04\t\x02\x01\x04\x12\x04\xeb\x01\x08\ - \x10\n\r\n\x05\x04\t\x02\x01\x06\x12\x04\xeb\x01\x11\x20\n\r\n\x05\x04\t\ - \x02\x01\x01\x12\x04\xeb\x01!5\n\r\n\x05\x04\t\x02\x01\x03\x12\x04\xeb\ - \x0189\n\x0c\n\x04\x04\t\x02\x02\x12\x04\xec\x01\x08<\n\r\n\x05\x04\t\ - \x02\x02\x04\x12\x04\xec\x01\x08\x10\n\r\n\x05\x04\t\x02\x02\x06\x12\x04\ - \xec\x01\x11#\n\r\n\x05\x04\t\x02\x02\x01\x12\x04\xec\x01$7\n\r\n\x05\ - \x04\t\x02\x02\x03\x12\x04\xec\x01:;\n\x0c\n\x02\x04\n\x12\x06\xef\x01\0\ - \xfb\x01\x01\n\x0b\n\x03\x04\n\x01\x12\x04\xef\x01\x08\x14\n9\n\x04\x04\ - \n\x02\0\x12\x04\xf0\x01\x04.\"+\x20how\x20many\x20decoys\x20were\x20tri\ - ed\x20before\x20success\n\n\r\n\x05\x04\n\x02\0\x04\x12\x04\xf0\x01\x04\ - \x0c\n\r\n\x05\x04\n\x02\0\x05\x12\x04\xf0\x01\r\x13\n\r\n\x05\x04\n\x02\ - \0\x01\x12\x04\xf0\x01\x14(\n\r\n\x05\x04\n\x02\0\x03\x12\x04\xf0\x01+-\ - \nm\n\x04\x04\n\x02\x01\x12\x04\xf5\x01\x04/\x1a\x1e\x20Applicable\x20to\ - \x20whole\x20session:\n\"\x1a\x20includes\x20failed\x20attempts\n2#\x20T\ - imings\x20below\x20are\x20in\x20milliseconds\n\n\r\n\x05\x04\n\x02\x01\ - \x04\x12\x04\xf5\x01\x04\x0c\n\r\n\x05\x04\n\x02\x01\x05\x12\x04\xf5\x01\ - \r\x13\n\r\n\x05\x04\n\x02\x01\x01\x12\x04\xf5\x01\x14)\n\r\n\x05\x04\n\ - \x02\x01\x03\x12\x04\xf5\x01,.\nR\n\x04\x04\n\x02\x02\x12\x04\xf8\x01\ + \x07\x02\x0c\x04\x12\x04\xd8\x01\x04\x0c\n\r\n\x05\x04\x07\x02\x0c\x05\ + \x12\x04\xd8\x01\r\x12\n\r\n\x05\x04\x07\x02\x0c\x01\x12\x04\xd8\x01\x13\ + \x1a\n\r\n\x05\x04\x07\x02\x0c\x03\x12\x04\xd8\x01\x1d\x20\n\x0c\n\x02\ + \x05\x05\x12\x06\xdc\x01\0\xe0\x01\x01\n\x0b\n\x03\x05\x05\x01\x12\x04\ + \xdc\x01\x05\x17\n\x0c\n\x04\x05\x05\x02\0\x12\x04\xdd\x01\x08\x15\n\r\n\ + \x05\x05\x05\x02\0\x01\x12\x04\xdd\x01\x08\x10\n\r\n\x05\x05\x05\x02\0\ + \x02\x12\x04\xdd\x01\x13\x14\n\x0c\n\x04\x05\x05\x02\x01\x12\x04\xde\x01\ + \x08\x10\n\r\n\x05\x05\x05\x02\x01\x01\x12\x04\xde\x01\x08\x0b\n\r\n\x05\ + \x05\x05\x02\x01\x02\x12\x04\xde\x01\x0e\x0f\n\x0c\n\x04\x05\x05\x02\x02\ + \x12\x04\xdf\x01\x04\x18\n\r\n\x05\x05\x05\x02\x02\x01\x12\x04\xdf\x01\ + \x04\x13\n\r\n\x05\x05\x05\x02\x02\x02\x12\x04\xdf\x01\x16\x17\n\x0c\n\ + \x02\x04\x08\x12\x06\xe2\x01\0\xec\x01\x01\n\x0b\n\x03\x04\x08\x01\x12\ + \x04\xe2\x01\x08\x12\n\x0c\n\x04\x04\x08\x02\0\x12\x04\xe3\x01\x08)\n\r\ + \n\x05\x04\x08\x02\0\x04\x12\x04\xe3\x01\x08\x10\n\r\n\x05\x04\x08\x02\0\ + \x05\x12\x04\xe3\x01\x11\x16\n\r\n\x05\x04\x08\x02\0\x01\x12\x04\xe3\x01\ + \x17$\n\r\n\x05\x04\x08\x02\0\x03\x12\x04\xe3\x01'(\n\x0c\n\x04\x04\x08\ + \x02\x01\x12\x04\xe4\x01\x08:\n\r\n\x05\x04\x08\x02\x01\x04\x12\x04\xe4\ + \x01\x08\x10\n\r\n\x05\x04\x08\x02\x01\x06\x12\x04\xe4\x01\x11\x20\n\r\n\ + \x05\x04\x08\x02\x01\x01\x12\x04\xe4\x01!5\n\r\n\x05\x04\x08\x02\x01\x03\ + \x12\x04\xe4\x0189\n\x0c\n\x04\x04\x08\x02\x02\x12\x04\xe5\x01\x048\n\r\ + \n\x05\x04\x08\x02\x02\x04\x12\x04\xe5\x01\x04\x0c\n\r\n\x05\x04\x08\x02\ + \x02\x06\x12\x04\xe5\x01\r\x1f\n\r\n\x05\x04\x08\x02\x02\x01\x12\x04\xe5\ + \x01\x203\n\r\n\x05\x04\x08\x02\x02\x03\x12\x04\xe5\x0167\nC\n\x04\x04\ + \x08\x02\x03\x12\x04\xe8\x01\x04,\x1a5\x20client\x20source\x20address\ + \x20when\x20receiving\x20a\x20registration\n\n\r\n\x05\x04\x08\x02\x03\ + \x04\x12\x04\xe8\x01\x04\x0c\n\r\n\x05\x04\x08\x02\x03\x05\x12\x04\xe8\ + \x01\r\x12\n\r\n\x05\x04\x08\x02\x03\x01\x12\x04\xe8\x01\x13'\n\r\n\x05\ + \x04\x08\x02\x03\x03\x12\x04\xe8\x01*+\nH\n\x04\x04\x08\x02\x04\x12\x04\ + \xeb\x01\x04%\x1a:\x20Decoy\x20address\x20used\x20when\x20registering\ + \x20over\x20Decoy\x20registrar\n\n\r\n\x05\x04\x08\x02\x04\x04\x12\x04\ + \xeb\x01\x04\x0c\n\r\n\x05\x04\x08\x02\x04\x05\x12\x04\xeb\x01\r\x12\n\r\ + \n\x05\x04\x08\x02\x04\x01\x12\x04\xeb\x01\x13\x20\n\r\n\x05\x04\x08\x02\ + \x04\x03\x12\x04\xeb\x01#$\n\x0c\n\x02\x04\t\x12\x06\xee\x01\0\xfa\x01\ + \x01\n\x0b\n\x03\x04\t\x01\x12\x04\xee\x01\x08\x14\n9\n\x04\x04\t\x02\0\ + \x12\x04\xef\x01\x04.\"+\x20how\x20many\x20decoys\x20were\x20tried\x20be\ + fore\x20success\n\n\r\n\x05\x04\t\x02\0\x04\x12\x04\xef\x01\x04\x0c\n\r\ + \n\x05\x04\t\x02\0\x05\x12\x04\xef\x01\r\x13\n\r\n\x05\x04\t\x02\0\x01\ + \x12\x04\xef\x01\x14(\n\r\n\x05\x04\t\x02\0\x03\x12\x04\xef\x01+-\nm\n\ + \x04\x04\t\x02\x01\x12\x04\xf4\x01\x04/\x1a\x1e\x20Applicable\x20to\x20w\ + hole\x20session:\n\"\x1a\x20includes\x20failed\x20attempts\n2#\x20Timing\ + s\x20below\x20are\x20in\x20milliseconds\n\n\r\n\x05\x04\t\x02\x01\x04\ + \x12\x04\xf4\x01\x04\x0c\n\r\n\x05\x04\t\x02\x01\x05\x12\x04\xf4\x01\r\ + \x13\n\r\n\x05\x04\t\x02\x01\x01\x12\x04\xf4\x01\x14)\n\r\n\x05\x04\t\ + \x02\x01\x03\x12\x04\xf4\x01,.\nR\n\x04\x04\t\x02\x02\x12\x04\xf7\x01\ \x04(\x1a\x1f\x20Last\x20(i.e.\x20successful)\x20decoy:\n\"#\x20measured\ - \x20during\x20initial\x20handshake\n\n\r\n\x05\x04\n\x02\x02\x04\x12\x04\ - \xf8\x01\x04\x0c\n\r\n\x05\x04\n\x02\x02\x05\x12\x04\xf8\x01\r\x13\n\r\n\ - \x05\x04\n\x02\x02\x01\x12\x04\xf8\x01\x14\"\n\r\n\x05\x04\n\x02\x02\x03\ - \x12\x04\xf8\x01%'\n%\n\x04\x04\n\x02\x03\x12\x04\xf9\x01\x04&\"\x17\x20\ - includes\x20tcp\x20to\x20decoy\n\n\r\n\x05\x04\n\x02\x03\x04\x12\x04\xf9\ - \x01\x04\x0c\n\r\n\x05\x04\n\x02\x03\x05\x12\x04\xf9\x01\r\x13\n\r\n\x05\ - \x04\n\x02\x03\x01\x12\x04\xf9\x01\x14\x20\n\r\n\x05\x04\n\x02\x03\x03\ - \x12\x04\xf9\x01#%\nB\n\x04\x04\n\x02\x04\x12\x04\xfa\x01\x04&\"4\x20mea\ + \x20during\x20initial\x20handshake\n\n\r\n\x05\x04\t\x02\x02\x04\x12\x04\ + \xf7\x01\x04\x0c\n\r\n\x05\x04\t\x02\x02\x05\x12\x04\xf7\x01\r\x13\n\r\n\ + \x05\x04\t\x02\x02\x01\x12\x04\xf7\x01\x14\"\n\r\n\x05\x04\t\x02\x02\x03\ + \x12\x04\xf7\x01%'\n%\n\x04\x04\t\x02\x03\x12\x04\xf8\x01\x04&\"\x17\x20\ + includes\x20tcp\x20to\x20decoy\n\n\r\n\x05\x04\t\x02\x03\x04\x12\x04\xf8\ + \x01\x04\x0c\n\r\n\x05\x04\t\x02\x03\x05\x12\x04\xf8\x01\r\x13\n\r\n\x05\ + \x04\t\x02\x03\x01\x12\x04\xf8\x01\x14\x20\n\r\n\x05\x04\t\x02\x03\x03\ + \x12\x04\xf8\x01#%\nB\n\x04\x04\t\x02\x04\x12\x04\xf9\x01\x04&\"4\x20mea\ sured\x20when\x20establishing\x20tcp\x20connection\x20to\x20decot\n\n\r\ - \n\x05\x04\n\x02\x04\x04\x12\x04\xfa\x01\x04\x0c\n\r\n\x05\x04\n\x02\x04\ - \x05\x12\x04\xfa\x01\r\x13\n\r\n\x05\x04\n\x02\x04\x01\x12\x04\xfa\x01\ - \x14\x20\n\r\n\x05\x04\n\x02\x04\x03\x12\x04\xfa\x01#%\ + \n\x05\x04\t\x02\x04\x04\x12\x04\xf9\x01\x04\x0c\n\r\n\x05\x04\t\x02\x04\ + \x05\x12\x04\xf9\x01\r\x13\n\r\n\x05\x04\t\x02\x04\x01\x12\x04\xf9\x01\ + \x14\x20\n\r\n\x05\x04\t\x02\x04\x03\x12\x04\xf9\x01#%\ "; -static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT; +static mut file_descriptor_proto_lazy: ::protobuf::lazy::Lazy<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::lazy::Lazy { + lock: ::protobuf::lazy::ONCE_INIT, + ptr: 0 as *const ::protobuf::descriptor::FileDescriptorProto, +}; fn parse_descriptor_proto() -> ::protobuf::descriptor::FileDescriptorProto { ::protobuf::parse_from_bytes(file_descriptor_proto_data).unwrap() } pub fn file_descriptor_proto() -> &'static ::protobuf::descriptor::FileDescriptorProto { - file_descriptor_proto_lazy.get(|| { - parse_descriptor_proto() - }) + unsafe { + file_descriptor_proto_lazy.get(|| { + parse_descriptor_proto() + }) + } } From 61add4dd6945e3daa6dbc5c25f7715229a7d7da9 Mon Sep 17 00:00:00 2001 From: jmwample Date: Thu, 10 Dec 2020 15:55:12 -0700 Subject: [PATCH 2/2] rust compilation issue fixed --- src/process_packet.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/process_packet.rs b/src/process_packet.rs index f3ec82bb..8cd9d1c2 100644 --- a/src/process_packet.rs +++ b/src/process_packet.rs @@ -310,7 +310,7 @@ impl PerCoreGlobal let shared_secret = res.0.to_vec(); let vsp = res.2; zmq_msg.set_shared_secret(shared_secret); - zmq_msg.registration_payload = SingularPtrField::some(vsp); + zmq_msg.set_registration_payload(vsp); zmq_msg.set_registration_source(RegistrationSource::Detector); let repr_str = hex::encode(res.0);