Add hack to ignore weird pre-response data

This commit is contained in:
Tulir Asokan 2024-02-23 15:35:59 +02:00
parent 1df5dfe99a
commit a59074a026
4 changed files with 141 additions and 53 deletions

View file

@ -432,16 +432,18 @@ type IncomingRPCMessage struct {
ResponseID string `protobuf:"bytes,1,opt,name=responseID,proto3" json:"responseID,omitempty"` ResponseID string `protobuf:"bytes,1,opt,name=responseID,proto3" json:"responseID,omitempty"`
BugleRoute BugleRoute `protobuf:"varint,2,opt,name=bugleRoute,proto3,enum=rpc.BugleRoute" json:"bugleRoute,omitempty"` BugleRoute BugleRoute `protobuf:"varint,2,opt,name=bugleRoute,proto3,enum=rpc.BugleRoute" json:"bugleRoute,omitempty"`
StartExecute string `protobuf:"bytes,3,opt,name=startExecute,proto3" json:"startExecute,omitempty"` StartExecute uint64 `protobuf:"varint,3,opt,name=startExecute,proto3" json:"startExecute,omitempty"`
MessageType MessageType `protobuf:"varint,5,opt,name=messageType,proto3,enum=rpc.MessageType" json:"messageType,omitempty"` MessageType MessageType `protobuf:"varint,5,opt,name=messageType,proto3,enum=rpc.MessageType" json:"messageType,omitempty"`
FinishExecute string `protobuf:"bytes,6,opt,name=finishExecute,proto3" json:"finishExecute,omitempty"` FinishExecute uint64 `protobuf:"varint,6,opt,name=finishExecute,proto3" json:"finishExecute,omitempty"`
MicrosecondsTaken string `protobuf:"bytes,7,opt,name=microsecondsTaken,proto3" json:"microsecondsTaken,omitempty"` MicrosecondsTaken uint64 `protobuf:"varint,7,opt,name=microsecondsTaken,proto3" json:"microsecondsTaken,omitempty"`
Mobile *Device `protobuf:"bytes,8,opt,name=mobile,proto3" json:"mobile,omitempty"` Mobile *Device `protobuf:"bytes,8,opt,name=mobile,proto3" json:"mobile,omitempty"`
Browser *Device `protobuf:"bytes,9,opt,name=browser,proto3" json:"browser,omitempty"` Browser *Device `protobuf:"bytes,9,opt,name=browser,proto3" json:"browser,omitempty"`
// Either a RPCMessageData or a RPCPairData encoded as bytes // Either a RPCMessageData or a RPCPairData encoded as bytes
MessageData []byte `protobuf:"bytes,12,opt,name=messageData,proto3" json:"messageData,omitempty"` MessageData []byte `protobuf:"bytes,12,opt,name=messageData,proto3" json:"messageData,omitempty"`
SignatureID string `protobuf:"bytes,17,opt,name=signatureID,proto3" json:"signatureID,omitempty"` SignatureID string `protobuf:"bytes,17,opt,name=signatureID,proto3" json:"signatureID,omitempty"`
Timestamp string `protobuf:"bytes,21,opt,name=timestamp,proto3" json:"timestamp,omitempty"` Timestamp string `protobuf:"bytes,21,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
// Completely unsure about this, but it seems to be present for weird intermediate responses
GdittoSource *IncomingRPCMessage_GDittoSource `protobuf:"bytes,23,opt,name=gdittoSource,proto3" json:"gdittoSource,omitempty"`
} }
func (x *IncomingRPCMessage) Reset() { func (x *IncomingRPCMessage) Reset() {
@ -490,11 +492,11 @@ func (x *IncomingRPCMessage) GetBugleRoute() BugleRoute {
return BugleRoute_Unknown return BugleRoute_Unknown
} }
func (x *IncomingRPCMessage) GetStartExecute() string { func (x *IncomingRPCMessage) GetStartExecute() uint64 {
if x != nil { if x != nil {
return x.StartExecute return x.StartExecute
} }
return "" return 0
} }
func (x *IncomingRPCMessage) GetMessageType() MessageType { func (x *IncomingRPCMessage) GetMessageType() MessageType {
@ -504,18 +506,18 @@ func (x *IncomingRPCMessage) GetMessageType() MessageType {
return MessageType_UNKNOWN_MESSAGE_TYPE return MessageType_UNKNOWN_MESSAGE_TYPE
} }
func (x *IncomingRPCMessage) GetFinishExecute() string { func (x *IncomingRPCMessage) GetFinishExecute() uint64 {
if x != nil { if x != nil {
return x.FinishExecute return x.FinishExecute
} }
return "" return 0
} }
func (x *IncomingRPCMessage) GetMicrosecondsTaken() string { func (x *IncomingRPCMessage) GetMicrosecondsTaken() uint64 {
if x != nil { if x != nil {
return x.MicrosecondsTaken return x.MicrosecondsTaken
} }
return "" return 0
} }
func (x *IncomingRPCMessage) GetMobile() *Device { func (x *IncomingRPCMessage) GetMobile() *Device {
@ -553,6 +555,13 @@ func (x *IncomingRPCMessage) GetTimestamp() string {
return "" return ""
} }
func (x *IncomingRPCMessage) GetGdittoSource() *IncomingRPCMessage_GDittoSource {
if x != nil {
return x.GdittoSource
}
return nil
}
type RPCMessageData struct { type RPCMessageData struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -878,6 +887,53 @@ func (x *OutgoingRPCResponse) GetTimestamp() string {
return "" return ""
} }
type IncomingRPCMessage_GDittoSource struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
DeviceID int32 `protobuf:"varint,2,opt,name=deviceID,proto3" json:"deviceID,omitempty"`
}
func (x *IncomingRPCMessage_GDittoSource) Reset() {
*x = IncomingRPCMessage_GDittoSource{}
if protoimpl.UnsafeEnabled {
mi := &file_rpc_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *IncomingRPCMessage_GDittoSource) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*IncomingRPCMessage_GDittoSource) ProtoMessage() {}
func (x *IncomingRPCMessage_GDittoSource) ProtoReflect() protoreflect.Message {
mi := &file_rpc_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use IncomingRPCMessage_GDittoSource.ProtoReflect.Descriptor instead.
func (*IncomingRPCMessage_GDittoSource) Descriptor() ([]byte, []int) {
return file_rpc_proto_rawDescGZIP(), []int{2, 0}
}
func (x *IncomingRPCMessage_GDittoSource) GetDeviceID() int32 {
if x != nil {
return x.DeviceID
}
return 0
}
type OutgoingRPCMessage_Auth struct { type OutgoingRPCMessage_Auth struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -891,7 +947,7 @@ type OutgoingRPCMessage_Auth struct {
func (x *OutgoingRPCMessage_Auth) Reset() { func (x *OutgoingRPCMessage_Auth) Reset() {
*x = OutgoingRPCMessage_Auth{} *x = OutgoingRPCMessage_Auth{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_rpc_proto_msgTypes[7] mi := &file_rpc_proto_msgTypes[8]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -904,7 +960,7 @@ func (x *OutgoingRPCMessage_Auth) String() string {
func (*OutgoingRPCMessage_Auth) ProtoMessage() {} func (*OutgoingRPCMessage_Auth) ProtoMessage() {}
func (x *OutgoingRPCMessage_Auth) ProtoReflect() protoreflect.Message { func (x *OutgoingRPCMessage_Auth) ProtoReflect() protoreflect.Message {
mi := &file_rpc_proto_msgTypes[7] mi := &file_rpc_proto_msgTypes[8]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -956,7 +1012,7 @@ type OutgoingRPCMessage_Data struct {
func (x *OutgoingRPCMessage_Data) Reset() { func (x *OutgoingRPCMessage_Data) Reset() {
*x = OutgoingRPCMessage_Data{} *x = OutgoingRPCMessage_Data{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_rpc_proto_msgTypes[8] mi := &file_rpc_proto_msgTypes[9]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -969,7 +1025,7 @@ func (x *OutgoingRPCMessage_Data) String() string {
func (*OutgoingRPCMessage_Data) ProtoMessage() {} func (*OutgoingRPCMessage_Data) ProtoMessage() {}
func (x *OutgoingRPCMessage_Data) ProtoReflect() protoreflect.Message { func (x *OutgoingRPCMessage_Data) ProtoReflect() protoreflect.Message {
mi := &file_rpc_proto_msgTypes[8] mi := &file_rpc_proto_msgTypes[9]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1025,7 +1081,7 @@ type OutgoingRPCMessage_Data_Type struct {
func (x *OutgoingRPCMessage_Data_Type) Reset() { func (x *OutgoingRPCMessage_Data_Type) Reset() {
*x = OutgoingRPCMessage_Data_Type{} *x = OutgoingRPCMessage_Data_Type{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_rpc_proto_msgTypes[9] mi := &file_rpc_proto_msgTypes[10]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1038,7 +1094,7 @@ func (x *OutgoingRPCMessage_Data_Type) String() string {
func (*OutgoingRPCMessage_Data_Type) ProtoMessage() {} func (*OutgoingRPCMessage_Data_Type) ProtoMessage() {}
func (x *OutgoingRPCMessage_Data_Type) ProtoReflect() protoreflect.Message { func (x *OutgoingRPCMessage_Data_Type) ProtoReflect() protoreflect.Message {
mi := &file_rpc_proto_msgTypes[9] mi := &file_rpc_proto_msgTypes[10]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1080,7 +1136,7 @@ type OutgoingRPCResponse_SomeIdentifier struct {
func (x *OutgoingRPCResponse_SomeIdentifier) Reset() { func (x *OutgoingRPCResponse_SomeIdentifier) Reset() {
*x = OutgoingRPCResponse_SomeIdentifier{} *x = OutgoingRPCResponse_SomeIdentifier{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_rpc_proto_msgTypes[10] mi := &file_rpc_proto_msgTypes[11]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -1093,7 +1149,7 @@ func (x *OutgoingRPCResponse_SomeIdentifier) String() string {
func (*OutgoingRPCResponse_SomeIdentifier) ProtoMessage() {} func (*OutgoingRPCResponse_SomeIdentifier) ProtoMessage() {}
func (x *OutgoingRPCResponse_SomeIdentifier) ProtoReflect() protoreflect.Message { func (x *OutgoingRPCResponse_SomeIdentifier) ProtoReflect() protoreflect.Message {
mi := &file_rpc_proto_msgTypes[10] mi := &file_rpc_proto_msgTypes[11]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -1134,7 +1190,7 @@ func file_rpc_proto_rawDescGZIP() []byte {
} }
var file_rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 3) var file_rpc_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 11) var file_rpc_proto_msgTypes = make([]protoimpl.MessageInfo, 12)
var file_rpc_proto_goTypes = []interface{}{ var file_rpc_proto_goTypes = []interface{}{
(BugleRoute)(0), // 0: rpc.BugleRoute (BugleRoute)(0), // 0: rpc.BugleRoute
(ActionType)(0), // 1: rpc.ActionType (ActionType)(0), // 1: rpc.ActionType
@ -1146,39 +1202,41 @@ var file_rpc_proto_goTypes = []interface{}{
(*OutgoingRPCMessage)(nil), // 7: rpc.OutgoingRPCMessage (*OutgoingRPCMessage)(nil), // 7: rpc.OutgoingRPCMessage
(*OutgoingRPCData)(nil), // 8: rpc.OutgoingRPCData (*OutgoingRPCData)(nil), // 8: rpc.OutgoingRPCData
(*OutgoingRPCResponse)(nil), // 9: rpc.OutgoingRPCResponse (*OutgoingRPCResponse)(nil), // 9: rpc.OutgoingRPCResponse
(*OutgoingRPCMessage_Auth)(nil), // 10: rpc.OutgoingRPCMessage.Auth (*IncomingRPCMessage_GDittoSource)(nil), // 10: rpc.IncomingRPCMessage.GDittoSource
(*OutgoingRPCMessage_Data)(nil), // 11: rpc.OutgoingRPCMessage.Data (*OutgoingRPCMessage_Auth)(nil), // 11: rpc.OutgoingRPCMessage.Auth
(*OutgoingRPCMessage_Data_Type)(nil), // 12: rpc.OutgoingRPCMessage.Data.Type (*OutgoingRPCMessage_Data)(nil), // 12: rpc.OutgoingRPCMessage.Data
(*OutgoingRPCResponse_SomeIdentifier)(nil), // 13: rpc.OutgoingRPCResponse.SomeIdentifier (*OutgoingRPCMessage_Data_Type)(nil), // 13: rpc.OutgoingRPCMessage.Data.Type
(*EmptyArr)(nil), // 14: util.EmptyArr (*OutgoingRPCResponse_SomeIdentifier)(nil), // 14: rpc.OutgoingRPCResponse.SomeIdentifier
(*Device)(nil), // 15: authentication.Device (*EmptyArr)(nil), // 15: util.EmptyArr
(*ConfigVersion)(nil), // 16: authentication.ConfigVersion (*Device)(nil), // 16: authentication.Device
(*ConfigVersion)(nil), // 17: authentication.ConfigVersion
} }
var file_rpc_proto_depIdxs = []int32{ var file_rpc_proto_depIdxs = []int32{
5, // 0: rpc.LongPollingPayload.data:type_name -> rpc.IncomingRPCMessage 5, // 0: rpc.LongPollingPayload.data:type_name -> rpc.IncomingRPCMessage
14, // 1: rpc.LongPollingPayload.heartbeat:type_name -> util.EmptyArr 15, // 1: rpc.LongPollingPayload.heartbeat:type_name -> util.EmptyArr
3, // 2: rpc.LongPollingPayload.ack:type_name -> rpc.StartAckMessage 3, // 2: rpc.LongPollingPayload.ack:type_name -> rpc.StartAckMessage
14, // 3: rpc.LongPollingPayload.startRead:type_name -> util.EmptyArr 15, // 3: rpc.LongPollingPayload.startRead:type_name -> util.EmptyArr
0, // 4: rpc.IncomingRPCMessage.bugleRoute:type_name -> rpc.BugleRoute 0, // 4: rpc.IncomingRPCMessage.bugleRoute:type_name -> rpc.BugleRoute
2, // 5: rpc.IncomingRPCMessage.messageType:type_name -> rpc.MessageType 2, // 5: rpc.IncomingRPCMessage.messageType:type_name -> rpc.MessageType
15, // 6: rpc.IncomingRPCMessage.mobile:type_name -> authentication.Device 16, // 6: rpc.IncomingRPCMessage.mobile:type_name -> authentication.Device
15, // 7: rpc.IncomingRPCMessage.browser:type_name -> authentication.Device 16, // 7: rpc.IncomingRPCMessage.browser:type_name -> authentication.Device
1, // 8: rpc.RPCMessageData.action:type_name -> rpc.ActionType 10, // 8: rpc.IncomingRPCMessage.gdittoSource:type_name -> rpc.IncomingRPCMessage.GDittoSource
15, // 9: rpc.OutgoingRPCMessage.mobile:type_name -> authentication.Device 1, // 9: rpc.RPCMessageData.action:type_name -> rpc.ActionType
11, // 10: rpc.OutgoingRPCMessage.data:type_name -> rpc.OutgoingRPCMessage.Data 16, // 10: rpc.OutgoingRPCMessage.mobile:type_name -> authentication.Device
10, // 11: rpc.OutgoingRPCMessage.auth:type_name -> rpc.OutgoingRPCMessage.Auth 12, // 11: rpc.OutgoingRPCMessage.data:type_name -> rpc.OutgoingRPCMessage.Data
1, // 12: rpc.OutgoingRPCData.action:type_name -> rpc.ActionType 11, // 12: rpc.OutgoingRPCMessage.auth:type_name -> rpc.OutgoingRPCMessage.Auth
13, // 13: rpc.OutgoingRPCResponse.someIdentifier:type_name -> rpc.OutgoingRPCResponse.SomeIdentifier 1, // 13: rpc.OutgoingRPCData.action:type_name -> rpc.ActionType
16, // 14: rpc.OutgoingRPCMessage.Auth.configVersion:type_name -> authentication.ConfigVersion 14, // 14: rpc.OutgoingRPCResponse.someIdentifier:type_name -> rpc.OutgoingRPCResponse.SomeIdentifier
0, // 15: rpc.OutgoingRPCMessage.Data.bugleRoute:type_name -> rpc.BugleRoute 17, // 15: rpc.OutgoingRPCMessage.Auth.configVersion:type_name -> authentication.ConfigVersion
12, // 16: rpc.OutgoingRPCMessage.Data.messageTypeData:type_name -> rpc.OutgoingRPCMessage.Data.Type 0, // 16: rpc.OutgoingRPCMessage.Data.bugleRoute:type_name -> rpc.BugleRoute
14, // 17: rpc.OutgoingRPCMessage.Data.Type.emptyArr:type_name -> util.EmptyArr 13, // 17: rpc.OutgoingRPCMessage.Data.messageTypeData:type_name -> rpc.OutgoingRPCMessage.Data.Type
2, // 18: rpc.OutgoingRPCMessage.Data.Type.messageType:type_name -> rpc.MessageType 15, // 18: rpc.OutgoingRPCMessage.Data.Type.emptyArr:type_name -> util.EmptyArr
19, // [19:19] is the sub-list for method output_type 2, // 19: rpc.OutgoingRPCMessage.Data.Type.messageType:type_name -> rpc.MessageType
19, // [19:19] is the sub-list for method input_type 20, // [20:20] is the sub-list for method output_type
19, // [19:19] is the sub-list for extension type_name 20, // [20:20] is the sub-list for method input_type
19, // [19:19] is the sub-list for extension extendee 20, // [20:20] is the sub-list for extension type_name
0, // [0:19] is the sub-list for field type_name 20, // [20:20] is the sub-list for extension extendee
0, // [0:20] is the sub-list for field type_name
} }
func init() { file_rpc_proto_init() } func init() { file_rpc_proto_init() }
@ -1275,7 +1333,7 @@ func file_rpc_proto_init() {
} }
} }
file_rpc_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { file_rpc_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*OutgoingRPCMessage_Auth); i { switch v := v.(*IncomingRPCMessage_GDittoSource); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1287,7 +1345,7 @@ func file_rpc_proto_init() {
} }
} }
file_rpc_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { file_rpc_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*OutgoingRPCMessage_Data); i { switch v := v.(*OutgoingRPCMessage_Auth); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1299,7 +1357,7 @@ func file_rpc_proto_init() {
} }
} }
file_rpc_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { file_rpc_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*OutgoingRPCMessage_Data_Type); i { switch v := v.(*OutgoingRPCMessage_Data); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -1311,6 +1369,18 @@ func file_rpc_proto_init() {
} }
} }
file_rpc_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { file_rpc_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*OutgoingRPCMessage_Data_Type); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_rpc_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*OutgoingRPCResponse_SomeIdentifier); i { switch v := v.(*OutgoingRPCResponse_SomeIdentifier); i {
case 0: case 0:
return &v.state return &v.state
@ -1332,7 +1402,7 @@ func file_rpc_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_rpc_proto_rawDesc, RawDescriptor: file_rpc_proto_rawDesc,
NumEnums: 3, NumEnums: 3,
NumMessages: 11, NumMessages: 12,
NumExtensions: 0, NumExtensions: 0,
NumServices: 0, NumServices: 0,
}, },

Binary file not shown.

View file

@ -21,11 +21,11 @@ message LongPollingPayload {
message IncomingRPCMessage { message IncomingRPCMessage {
string responseID = 1; string responseID = 1;
BugleRoute bugleRoute = 2; BugleRoute bugleRoute = 2;
string startExecute = 3; uint64 startExecute = 3;
MessageType messageType = 5; MessageType messageType = 5;
string finishExecute = 6; uint64 finishExecute = 6;
string microsecondsTaken = 7; uint64 microsecondsTaken = 7;
authentication.Device mobile = 8; authentication.Device mobile = 8;
authentication.Device browser = 9; authentication.Device browser = 9;
@ -35,6 +35,13 @@ message IncomingRPCMessage {
string signatureID = 17; string signatureID = 17;
string timestamp = 21; string timestamp = 21;
message GDittoSource {
int32 deviceID = 2;
}
// Completely unsure about this, but it seems to be present for weird intermediate responses
GDittoSource gdittoSource = 23;
} }
message RPCMessageData { message RPCMessageData {

View file

@ -76,7 +76,7 @@ func typedResponse[T proto.Message](resp *IncomingRPCMessage, err error) (casted
var ok bool var ok bool
casted, ok = resp.DecryptedMessage.(T) casted, ok = resp.DecryptedMessage.(T)
if !ok { if !ok {
retErr = fmt.Errorf("unexpected response type %T, expected %T", resp.DecryptedMessage, casted) retErr = fmt.Errorf("unexpected response type %T for %s, expected %T", resp.DecryptedMessage, resp.ResponseID, casted)
} }
return return
} }
@ -100,6 +100,17 @@ func (s *SessionHandler) receiveResponse(msg *IncomingRPCMessage) bool {
if msg.Message == nil { if msg.Message == nil {
return false return false
} }
if s.client.AuthData.Cookies != nil {
switch msg.Message.Action {
case gmproto.ActionType_CREATE_GAIA_PAIRING_CLIENT_INIT, gmproto.ActionType_CREATE_GAIA_PAIRING_CLIENT_FINISHED:
default:
// Very hacky way to ignore weird messages that come before real responses
// TODO figure out how to properly handle these
if msg.Message.UnencryptedData != nil && msg.Message.EncryptedData == nil {
return false
}
}
}
requestID := msg.Message.SessionID requestID := msg.Message.SessionID
s.responseWaitersLock.Lock() s.responseWaitersLock.Lock()
ch, ok := s.responseWaiters[requestID] ch, ok := s.responseWaiters[requestID]