From 6e68f861d8b2ed94cd983cd91dbdd01e03f0196f Mon Sep 17 00:00:00 2001 From: John Brooks Date: Thu, 15 Sep 2016 18:30:37 -0600 Subject: [PATCH] rpc: Add UNKNOWN connection status for contacts UNKNOWN is the new default status for contacts. A contact is in the UNKNOWN state when we're not sure whether they are available or not, and is in the OFFLINE state when we believe that we're online but attempts to connect to that contact have failed. --- rpc/contact.pb.go | 92 ++++++++++++++++++++++++----------------------- rpc/contact.proto | 12 ++++--- rpc/core.pb.go | 10 ++++++ 3 files changed, 66 insertions(+), 48 deletions(-) diff --git a/rpc/contact.pb.go b/rpc/contact.pb.go index d7cc0ce..8b6e317 100644 --- a/rpc/contact.pb.go +++ b/rpc/contact.pb.go @@ -16,23 +16,26 @@ var _ = math.Inf type Contact_Status int32 const ( - Contact_OFFLINE Contact_Status = 0 - Contact_ONLINE Contact_Status = 1 - Contact_REQUEST Contact_Status = 2 - Contact_REJECTED Contact_Status = 3 + Contact_UNKNOWN Contact_Status = 0 + Contact_OFFLINE Contact_Status = 1 + Contact_ONLINE Contact_Status = 2 + Contact_REQUEST Contact_Status = 3 + Contact_REJECTED Contact_Status = 4 ) var Contact_Status_name = map[int32]string{ - 0: "OFFLINE", - 1: "ONLINE", - 2: "REQUEST", - 3: "REJECTED", + 0: "UNKNOWN", + 1: "OFFLINE", + 2: "ONLINE", + 3: "REQUEST", + 4: "REJECTED", } var Contact_Status_value = map[string]int32{ - "OFFLINE": 0, - "ONLINE": 1, - "REQUEST": 2, - "REJECTED": 3, + "UNKNOWN": 0, + "OFFLINE": 1, + "ONLINE": 2, + "REQUEST": 3, + "REJECTED": 4, } func (x Contact_Status) String() string { @@ -306,36 +309,37 @@ func init() { func init() { proto.RegisterFile("contact.proto", fileDescriptor1) } var fileDescriptor1 = []byte{ - // 495 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x53, 0xd1, 0x6e, 0xd3, 0x30, - 0x14, 0x5d, 0x9a, 0x2c, 0x69, 0x6f, 0xb7, 0xd2, 0x59, 0x13, 0x0a, 0xec, 0x65, 0xb2, 0x10, 0xe2, - 0x85, 0x80, 0x0a, 0x8f, 0x48, 0xac, 0x6b, 0x32, 0x51, 0x14, 0x92, 0xe2, 0x25, 0x1f, 0x90, 0x26, - 0x96, 0x16, 0x28, 0x4e, 0x49, 0x5c, 0x60, 0xdf, 0xc6, 0x2b, 0x1f, 0xc4, 0x27, 0x60, 0x3b, 0x4e, - 0xc7, 0x36, 0x40, 0x68, 0x6f, 0xd7, 0xf7, 0x9c, 0xeb, 0x7b, 0xcf, 0x3d, 0x36, 0xec, 0xe7, 0x15, - 0xe3, 0x59, 0xce, 0xbd, 0x75, 0x5d, 0xf1, 0x0a, 0xf5, 0xeb, 0x32, 0xaf, 0xf2, 0x0b, 0xca, 0xf1, - 0xf7, 0x1e, 0x38, 0xb3, 0x16, 0x43, 0x23, 0xe8, 0x95, 0x85, 0x6b, 0x1c, 0x1b, 0x4f, 0x76, 0x89, - 0x88, 0x90, 0x0b, 0x4e, 0x56, 0x14, 0x35, 0x6d, 0x1a, 0xb7, 0x27, 0x92, 0x03, 0xd2, 0x1d, 0xd1, - 0x43, 0xe8, 0xb3, 0x32, 0xff, 0xc8, 0xb2, 0x4f, 0xd4, 0x35, 0x15, 0xb4, 0x3d, 0xa3, 0x63, 0x18, - 0x7e, 0xbd, 0xa0, 0x6c, 0x56, 0xd3, 0x8c, 0xd3, 0xc2, 0xb5, 0x14, 0xfc, 0x7b, 0x0a, 0x3d, 0x82, - 0xfd, 0x55, 0xd6, 0x70, 0xd1, 0x96, 0xd1, 0x5c, 0x72, 0x76, 0x15, 0xe7, 0x7a, 0x12, 0x4d, 0xc0, - 0xa9, 0xe9, 0xe7, 0x0d, 0x6d, 0xb8, 0x6b, 0x0b, 0x7c, 0x38, 0x71, 0xbd, 0x6e, 0x6a, 0x4f, 0x4f, - 0x4c, 0x5a, 0x9c, 0x74, 0x44, 0xf4, 0x1c, 0xec, 0x86, 0x67, 0x7c, 0xd3, 0xb8, 0x20, 0x4a, 0x46, - 0x7f, 0x28, 0xf1, 0xce, 0x15, 0x4e, 0x34, 0x0f, 0xbf, 0x02, 0xbb, 0xcd, 0xa0, 0x21, 0x38, 0xf1, - 0xd9, 0x59, 0x38, 0x8f, 0x82, 0xf1, 0x0e, 0x02, 0xb0, 0xe3, 0x48, 0xc5, 0x86, 0x04, 0x48, 0xf0, - 0x3e, 0x0d, 0xce, 0x93, 0x71, 0x0f, 0xed, 0x41, 0x9f, 0x04, 0x6f, 0x83, 0x59, 0x12, 0xf8, 0x63, - 0x13, 0xff, 0x30, 0x60, 0x74, 0x7d, 0x16, 0x74, 0x02, 0x83, 0xa2, 0xac, 0x85, 0x84, 0xb2, 0x62, - 0x6a, 0x97, 0xa3, 0x09, 0xfe, 0xdb, 0xe0, 0x9e, 0xdf, 0x31, 0xc9, 0x55, 0xd1, 0x1d, 0xd7, 0x8e, - 0xc0, 0xe2, 0xf4, 0x1b, 0xd7, 0xfb, 0x56, 0x31, 0x7e, 0x0c, 0x83, 0x6d, 0x07, 0x29, 0x63, 0x1e, - 0x9d, 0xc6, 0x69, 0xe4, 0x0b, 0x7d, 0x42, 0x46, 0x9c, 0x26, 0xed, 0xc9, 0xc0, 0x2e, 0xdc, 0x7f, - 0x57, 0xb1, 0x92, 0x57, 0xb5, 0x9e, 0xaf, 0xd1, 0x03, 0xe2, 0x9f, 0x06, 0xec, 0xe9, 0x5c, 0xf0, - 0x85, 0x32, 0x8e, 0x9e, 0x89, 0x36, 0x97, 0x6b, 0xaa, 0x95, 0x1d, 0xdd, 0x52, 0xa6, 0x58, 0x5e, - 0x22, 0x28, 0x44, 0x11, 0xd1, 0x53, 0x70, 0xf4, 0xdb, 0x53, 0x6a, 0x86, 0x93, 0x83, 0x5b, 0x35, - 0x6f, 0x76, 0x48, 0xc7, 0x41, 0x2f, 0xaf, 0x5c, 0x37, 0xff, 0xed, 0xba, 0xac, 0xd2, 0x54, 0xfc, - 0x1a, 0x2c, 0xd9, 0x12, 0xf5, 0xc1, 0x8a, 0xd2, 0x30, 0x6c, 0x05, 0x2e, 0xe2, 0x45, 0x1a, 0x4e, - 0x13, 0x69, 0xa1, 0x03, 0xe6, 0xd4, 0xf7, 0x85, 0x7d, 0xc2, 0xd7, 0x74, 0xe1, 0xcb, 0xa4, 0x29, - 0x63, 0x3f, 0x08, 0x03, 0x11, 0x5b, 0xa7, 0x03, 0x70, 0x9a, 0xcd, 0xf2, 0x83, 0x58, 0x15, 0x3e, - 0x80, 0x7b, 0xd3, 0xa2, 0xd8, 0xf6, 0x5a, 0xaf, 0x2e, 0xf1, 0x09, 0x1c, 0xfa, 0x74, 0x45, 0x39, - 0xbd, 0xe1, 0xf5, 0x7f, 0x7f, 0x18, 0x7c, 0x08, 0xe8, 0xc6, 0x0d, 0xf2, 0xde, 0x23, 0x78, 0x40, - 0xa8, 0x6c, 0x3a, 0x67, 0xcb, 0x6a, 0xc3, 0x8a, 0xee, 0x3d, 0x4b, 0x70, 0x69, 0xab, 0xaf, 0xfa, - 0xe2, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa1, 0xab, 0x53, 0xdb, 0xbb, 0x03, 0x00, 0x00, + // 503 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x53, 0x51, 0x6f, 0xd3, 0x30, + 0x10, 0x5e, 0x9a, 0x2c, 0x69, 0xaf, 0x5b, 0xe9, 0xac, 0x09, 0x05, 0xf6, 0x32, 0x59, 0x08, 0xf1, + 0x42, 0x40, 0x85, 0x77, 0xd6, 0x35, 0x99, 0x28, 0x84, 0xa4, 0x78, 0x89, 0x78, 0x4e, 0x13, 0x4b, + 0x0b, 0x14, 0xa7, 0x24, 0x2e, 0xb0, 0xff, 0xc7, 0x03, 0x3f, 0x87, 0x9f, 0x80, 0xed, 0x38, 0x1d, + 0xdb, 0x00, 0x21, 0xde, 0xee, 0xee, 0xfb, 0xce, 0x77, 0xdf, 0xdd, 0x19, 0xf6, 0xf3, 0x8a, 0xf1, + 0x2c, 0xe7, 0xde, 0xba, 0xae, 0x78, 0x85, 0xfa, 0x75, 0x99, 0x57, 0xf9, 0x05, 0xe5, 0xf8, 0x7b, + 0x0f, 0x9c, 0x59, 0x8b, 0xa1, 0x11, 0xf4, 0xca, 0xc2, 0x35, 0x8e, 0x8d, 0x47, 0xbb, 0x44, 0x58, + 0xc8, 0x05, 0x27, 0x2b, 0x8a, 0x9a, 0x36, 0x8d, 0xdb, 0x13, 0xc1, 0x01, 0xe9, 0x5c, 0x74, 0x1f, + 0xfa, 0xac, 0xcc, 0x3f, 0xb0, 0xec, 0x23, 0x75, 0x4d, 0x05, 0x6d, 0x7d, 0x74, 0x0c, 0xc3, 0x2f, + 0x17, 0x94, 0xcd, 0x6a, 0x9a, 0x71, 0x5a, 0xb8, 0x96, 0x82, 0x7f, 0x0d, 0xa1, 0x07, 0xb0, 0xbf, + 0xca, 0x1a, 0x2e, 0xca, 0x32, 0x9a, 0x4b, 0xce, 0xae, 0xe2, 0x5c, 0x0f, 0xa2, 0x09, 0x38, 0x35, + 0xfd, 0xb4, 0xa1, 0x0d, 0x77, 0x6d, 0x81, 0x0f, 0x27, 0xae, 0xd7, 0x75, 0xed, 0xe9, 0x8e, 0x49, + 0x8b, 0x93, 0x8e, 0x88, 0x9e, 0x82, 0xdd, 0xf0, 0x8c, 0x6f, 0x1a, 0x17, 0x44, 0xca, 0xe8, 0x37, + 0x29, 0xde, 0xb9, 0xc2, 0x89, 0xe6, 0xe1, 0x39, 0xd8, 0x6d, 0x04, 0x0d, 0xc1, 0x49, 0xa3, 0xd7, + 0x51, 0xfc, 0x2e, 0x1a, 0xef, 0x48, 0x27, 0x3e, 0x3b, 0x0b, 0xe7, 0x51, 0x30, 0x36, 0x10, 0x80, + 0x1d, 0x47, 0xca, 0xee, 0x49, 0x80, 0x04, 0x6f, 0xd3, 0xe0, 0x3c, 0x19, 0x9b, 0x68, 0x0f, 0xfa, + 0x24, 0x78, 0x15, 0xcc, 0x92, 0xc0, 0x1f, 0x5b, 0xf8, 0x9b, 0x01, 0xa3, 0xeb, 0x8d, 0xa1, 0x13, + 0x18, 0x14, 0x65, 0x2d, 0xf4, 0x94, 0x15, 0x53, 0x83, 0x1d, 0x4d, 0xf0, 0x9f, 0x54, 0x78, 0x7e, + 0xc7, 0x24, 0x57, 0x49, 0xff, 0xb9, 0x03, 0x04, 0x16, 0xa7, 0x5f, 0xb9, 0x1e, 0xbe, 0xb2, 0xf1, + 0x43, 0x18, 0x6c, 0x2b, 0x48, 0x19, 0xf3, 0xe8, 0x34, 0x4e, 0x23, 0x5f, 0x88, 0x15, 0x32, 0xe2, + 0x34, 0x69, 0x3d, 0x03, 0xbb, 0x70, 0xf7, 0x4d, 0xc5, 0x4a, 0x5e, 0xd5, 0xba, 0xbf, 0x46, 0x37, + 0x88, 0x7f, 0x18, 0xb0, 0xa7, 0x63, 0xc1, 0x67, 0xca, 0x38, 0x7a, 0x22, 0xca, 0x5c, 0xae, 0xa9, + 0x56, 0x76, 0x74, 0x4b, 0x99, 0x62, 0x79, 0x89, 0xa0, 0x10, 0x45, 0x44, 0x8f, 0xc1, 0xd1, 0x87, + 0xa8, 0xd4, 0x0c, 0x27, 0x07, 0xb7, 0x72, 0x5e, 0xee, 0x90, 0x8e, 0x83, 0x9e, 0x5f, 0x9d, 0x80, + 0xf9, 0xf7, 0x13, 0x90, 0x59, 0x9a, 0x8a, 0x5f, 0x80, 0x25, 0x4b, 0xa2, 0x3e, 0x58, 0x51, 0x1a, + 0x86, 0xad, 0xc0, 0x45, 0xbc, 0x48, 0xc3, 0x69, 0x22, 0xd7, 0xe9, 0x80, 0x39, 0xf5, 0x7d, 0xb1, + 0x4b, 0xb1, 0xd7, 0x74, 0xe1, 0xcb, 0xa0, 0x29, 0x6d, 0x3f, 0x08, 0x03, 0x61, 0x5b, 0xa7, 0x03, + 0x70, 0x9a, 0xcd, 0xf2, 0xbd, 0x18, 0x15, 0x3e, 0x80, 0x3b, 0xd3, 0xa2, 0xd8, 0xd6, 0x5a, 0xaf, + 0x2e, 0xf1, 0x09, 0x1c, 0xfa, 0x74, 0x45, 0x39, 0xbd, 0xb1, 0xeb, 0x7f, 0xfe, 0x3d, 0xf8, 0x10, + 0xd0, 0x8d, 0x17, 0xe4, 0xbb, 0x47, 0x70, 0x8f, 0x50, 0x59, 0x74, 0xce, 0x96, 0xd5, 0x86, 0x15, + 0xdd, 0x71, 0x4b, 0x70, 0x69, 0xab, 0x7f, 0xfb, 0xec, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0x53, + 0x03, 0x9d, 0x60, 0xc8, 0x03, 0x00, 0x00, } diff --git a/rpc/contact.proto b/rpc/contact.proto index c9c0669..7311bba 100644 --- a/rpc/contact.proto +++ b/rpc/contact.proto @@ -1,6 +1,9 @@ syntax = "proto3"; package ricochet; +// XXX Using integer contact IDs seems dangerous, and it's especially a +// problem that 0 is a valid contact ID. Switch to UUID? Or use address? + message Contact { int32 id = 1; string address = 2; @@ -10,10 +13,11 @@ message Contact { ContactRequest request = 6; enum Status { - OFFLINE = 0; - ONLINE = 1; - REQUEST = 2; - REJECTED = 3; + UNKNOWN = 0; + OFFLINE = 1; + ONLINE = 2; + REQUEST = 3; + REJECTED = 4; } Status status = 10; } diff --git a/rpc/core.pb.go b/rpc/core.pb.go index 3d2b52a..e4687de 100644 --- a/rpc/core.pb.go +++ b/rpc/core.pb.go @@ -71,6 +71,11 @@ type RicochetCoreClient interface { StopNetwork(ctx context.Context, in *StopNetworkRequest, opts ...grpc.CallOption) (*NetworkStatus, error) // XXX Service status GetIdentity(ctx context.Context, in *IdentityRequest, opts ...grpc.CallOption) (*Identity, error) + // Query contacts and monitor for contact changes. The full contact list + // is sent in POPULATE events, terminated by a POPULATE event with no + // subject. Any new, removed, or modified contacts, including changes in + // the state of contacts, are sent as ADD, UPDATE, or DELETE events until + // the stream is closed. MonitorContacts(ctx context.Context, in *MonitorContactsRequest, opts ...grpc.CallOption) (RicochetCore_MonitorContactsClient, error) AddContactRequest(ctx context.Context, in *ContactRequest, opts ...grpc.CallOption) (*Contact, error) UpdateContact(ctx context.Context, in *Contact, opts ...grpc.CallOption) (*Contact, error) @@ -285,6 +290,11 @@ type RicochetCoreServer interface { StopNetwork(context.Context, *StopNetworkRequest) (*NetworkStatus, error) // XXX Service status GetIdentity(context.Context, *IdentityRequest) (*Identity, error) + // Query contacts and monitor for contact changes. The full contact list + // is sent in POPULATE events, terminated by a POPULATE event with no + // subject. Any new, removed, or modified contacts, including changes in + // the state of contacts, are sent as ADD, UPDATE, or DELETE events until + // the stream is closed. MonitorContacts(*MonitorContactsRequest, RicochetCore_MonitorContactsServer) error AddContactRequest(context.Context, *ContactRequest) (*Contact, error) UpdateContact(context.Context, *Contact) (*Contact, error)