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.
This commit is contained in:
John Brooks 2016-09-15 18:30:37 -06:00
parent 346971368b
commit 6e68f861d8
3 changed files with 66 additions and 48 deletions

View File

@ -16,23 +16,26 @@ var _ = math.Inf
type Contact_Status int32 type Contact_Status int32
const ( const (
Contact_OFFLINE Contact_Status = 0 Contact_UNKNOWN Contact_Status = 0
Contact_ONLINE Contact_Status = 1 Contact_OFFLINE Contact_Status = 1
Contact_REQUEST Contact_Status = 2 Contact_ONLINE Contact_Status = 2
Contact_REJECTED Contact_Status = 3 Contact_REQUEST Contact_Status = 3
Contact_REJECTED Contact_Status = 4
) )
var Contact_Status_name = map[int32]string{ var Contact_Status_name = map[int32]string{
0: "OFFLINE", 0: "UNKNOWN",
1: "ONLINE", 1: "OFFLINE",
2: "REQUEST", 2: "ONLINE",
3: "REJECTED", 3: "REQUEST",
4: "REJECTED",
} }
var Contact_Status_value = map[string]int32{ var Contact_Status_value = map[string]int32{
"OFFLINE": 0, "UNKNOWN": 0,
"ONLINE": 1, "OFFLINE": 1,
"REQUEST": 2, "ONLINE": 2,
"REJECTED": 3, "REQUEST": 3,
"REJECTED": 4,
} }
func (x Contact_Status) String() string { func (x Contact_Status) String() string {
@ -306,36 +309,37 @@ func init() {
func init() { proto.RegisterFile("contact.proto", fileDescriptor1) } func init() { proto.RegisterFile("contact.proto", fileDescriptor1) }
var fileDescriptor1 = []byte{ var fileDescriptor1 = []byte{
// 495 bytes of a gzipped FileDescriptorProto // 503 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x53, 0xd1, 0x6e, 0xd3, 0x30, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x53, 0x51, 0x6f, 0xd3, 0x30,
0x14, 0x5d, 0x9a, 0x2c, 0x69, 0x6f, 0xb7, 0xd2, 0x59, 0x13, 0x0a, 0xec, 0x65, 0xb2, 0x10, 0xe2, 0x10, 0x5e, 0x9a, 0x2c, 0x69, 0xaf, 0x5b, 0xe9, 0xac, 0x09, 0x05, 0xf6, 0x32, 0x59, 0x08, 0xf1,
0x85, 0x80, 0x0a, 0x8f, 0x48, 0xac, 0x6b, 0x32, 0x51, 0x14, 0x92, 0xe2, 0x25, 0x1f, 0x90, 0x26, 0x42, 0x40, 0x85, 0x77, 0xd6, 0x35, 0x99, 0x28, 0x84, 0xa4, 0x78, 0x89, 0x78, 0x4e, 0x13, 0x4b,
0x96, 0x16, 0x28, 0x4e, 0x49, 0x5c, 0x60, 0xdf, 0xc6, 0x2b, 0x1f, 0xc4, 0x27, 0x60, 0x3b, 0x4e, 0x0b, 0x14, 0xa7, 0x24, 0x2e, 0xb0, 0xff, 0xc7, 0x03, 0x3f, 0x87, 0x9f, 0x80, 0xed, 0x38, 0x1d,
0xc7, 0x36, 0x40, 0x68, 0x6f, 0xd7, 0xf7, 0x9c, 0xeb, 0x7b, 0xcf, 0x3d, 0x36, 0xec, 0xe7, 0x15, 0xdb, 0x00, 0x21, 0xde, 0xee, 0xee, 0xfb, 0xce, 0x77, 0xdf, 0xdd, 0x19, 0xf6, 0xf3, 0x8a, 0xf1,
0xe3, 0x59, 0xce, 0xbd, 0x75, 0x5d, 0xf1, 0x0a, 0xf5, 0xeb, 0x32, 0xaf, 0xf2, 0x0b, 0xca, 0xf1, 0x2c, 0xe7, 0xde, 0xba, 0xae, 0x78, 0x85, 0xfa, 0x75, 0x99, 0x57, 0xf9, 0x05, 0xe5, 0xf8, 0x7b,
0xf7, 0x1e, 0x38, 0xb3, 0x16, 0x43, 0x23, 0xe8, 0x95, 0x85, 0x6b, 0x1c, 0x1b, 0x4f, 0x76, 0x89, 0x0f, 0x9c, 0x59, 0x8b, 0xa1, 0x11, 0xf4, 0xca, 0xc2, 0x35, 0x8e, 0x8d, 0x47, 0xbb, 0x44, 0x58,
0x88, 0x90, 0x0b, 0x4e, 0x56, 0x14, 0x35, 0x6d, 0x1a, 0xb7, 0x27, 0x92, 0x03, 0xd2, 0x1d, 0xd1, 0xc8, 0x05, 0x27, 0x2b, 0x8a, 0x9a, 0x36, 0x8d, 0xdb, 0x13, 0xc1, 0x01, 0xe9, 0x5c, 0x74, 0x1f,
0x43, 0xe8, 0xb3, 0x32, 0xff, 0xc8, 0xb2, 0x4f, 0xd4, 0x35, 0x15, 0xb4, 0x3d, 0xa3, 0x63, 0x18, 0xfa, 0xac, 0xcc, 0x3f, 0xb0, 0xec, 0x23, 0x75, 0x4d, 0x05, 0x6d, 0x7d, 0x74, 0x0c, 0xc3, 0x2f,
0x7e, 0xbd, 0xa0, 0x6c, 0x56, 0xd3, 0x8c, 0xd3, 0xc2, 0xb5, 0x14, 0xfc, 0x7b, 0x0a, 0x3d, 0x82, 0x17, 0x94, 0xcd, 0x6a, 0x9a, 0x71, 0x5a, 0xb8, 0x96, 0x82, 0x7f, 0x0d, 0xa1, 0x07, 0xb0, 0xbf,
0xfd, 0x55, 0xd6, 0x70, 0xd1, 0x96, 0xd1, 0x5c, 0x72, 0x76, 0x15, 0xe7, 0x7a, 0x12, 0x4d, 0xc0, 0xca, 0x1a, 0x2e, 0xca, 0x32, 0x9a, 0x4b, 0xce, 0xae, 0xe2, 0x5c, 0x0f, 0xa2, 0x09, 0x38, 0x35,
0xa9, 0xe9, 0xe7, 0x0d, 0x6d, 0xb8, 0x6b, 0x0b, 0x7c, 0x38, 0x71, 0xbd, 0x6e, 0x6a, 0x4f, 0x4f, 0xfd, 0xb4, 0xa1, 0x0d, 0x77, 0x6d, 0x81, 0x0f, 0x27, 0xae, 0xd7, 0x75, 0xed, 0xe9, 0x8e, 0x49,
0x4c, 0x5a, 0x9c, 0x74, 0x44, 0xf4, 0x1c, 0xec, 0x86, 0x67, 0x7c, 0xd3, 0xb8, 0x20, 0x4a, 0x46, 0x8b, 0x93, 0x8e, 0x88, 0x9e, 0x82, 0xdd, 0xf0, 0x8c, 0x6f, 0x1a, 0x17, 0x44, 0xca, 0xe8, 0x37,
0x7f, 0x28, 0xf1, 0xce, 0x15, 0x4e, 0x34, 0x0f, 0xbf, 0x02, 0xbb, 0xcd, 0xa0, 0x21, 0x38, 0xf1, 0x29, 0xde, 0xb9, 0xc2, 0x89, 0xe6, 0xe1, 0x39, 0xd8, 0x6d, 0x04, 0x0d, 0xc1, 0x49, 0xa3, 0xd7,
0xd9, 0x59, 0x38, 0x8f, 0x82, 0xf1, 0x0e, 0x02, 0xb0, 0xe3, 0x48, 0xc5, 0x86, 0x04, 0x48, 0xf0, 0x51, 0xfc, 0x2e, 0x1a, 0xef, 0x48, 0x27, 0x3e, 0x3b, 0x0b, 0xe7, 0x51, 0x30, 0x36, 0x10, 0x80,
0x3e, 0x0d, 0xce, 0x93, 0x71, 0x0f, 0xed, 0x41, 0x9f, 0x04, 0x6f, 0x83, 0x59, 0x12, 0xf8, 0x63, 0x1d, 0x47, 0xca, 0xee, 0x49, 0x80, 0x04, 0x6f, 0xd3, 0xe0, 0x3c, 0x19, 0x9b, 0x68, 0x0f, 0xfa,
0x13, 0xff, 0x30, 0x60, 0x74, 0x7d, 0x16, 0x74, 0x02, 0x83, 0xa2, 0xac, 0x85, 0x84, 0xb2, 0x62, 0x24, 0x78, 0x15, 0xcc, 0x92, 0xc0, 0x1f, 0x5b, 0xf8, 0x9b, 0x01, 0xa3, 0xeb, 0x8d, 0xa1, 0x13,
0x6a, 0x97, 0xa3, 0x09, 0xfe, 0xdb, 0xe0, 0x9e, 0xdf, 0x31, 0xc9, 0x55, 0xd1, 0x1d, 0xd7, 0x8e, 0x18, 0x14, 0x65, 0x2d, 0xf4, 0x94, 0x15, 0x53, 0x83, 0x1d, 0x4d, 0xf0, 0x9f, 0x54, 0x78, 0x7e,
0xc0, 0xe2, 0xf4, 0x1b, 0xd7, 0xfb, 0x56, 0x31, 0x7e, 0x0c, 0x83, 0x6d, 0x07, 0x29, 0x63, 0x1e, 0xc7, 0x24, 0x57, 0x49, 0xff, 0xb9, 0x03, 0x04, 0x16, 0xa7, 0x5f, 0xb9, 0x1e, 0xbe, 0xb2, 0xf1,
0x9d, 0xc6, 0x69, 0xe4, 0x0b, 0x7d, 0x42, 0x46, 0x9c, 0x26, 0xed, 0xc9, 0xc0, 0x2e, 0xdc, 0x7f, 0x43, 0x18, 0x6c, 0x2b, 0x48, 0x19, 0xf3, 0xe8, 0x34, 0x4e, 0x23, 0x5f, 0x88, 0x15, 0x32, 0xe2,
0x57, 0xb1, 0x92, 0x57, 0xb5, 0x9e, 0xaf, 0xd1, 0x03, 0xe2, 0x9f, 0x06, 0xec, 0xe9, 0x5c, 0xf0, 0x34, 0x69, 0x3d, 0x03, 0xbb, 0x70, 0xf7, 0x4d, 0xc5, 0x4a, 0x5e, 0xd5, 0xba, 0xbf, 0x46, 0x37,
0x85, 0x32, 0x8e, 0x9e, 0x89, 0x36, 0x97, 0x6b, 0xaa, 0x95, 0x1d, 0xdd, 0x52, 0xa6, 0x58, 0x5e, 0x88, 0x7f, 0x18, 0xb0, 0xa7, 0x63, 0xc1, 0x67, 0xca, 0x38, 0x7a, 0x22, 0xca, 0x5c, 0xae, 0xa9,
0x22, 0x28, 0x44, 0x11, 0xd1, 0x53, 0x70, 0xf4, 0xdb, 0x53, 0x6a, 0x86, 0x93, 0x83, 0x5b, 0x35, 0x56, 0x76, 0x74, 0x4b, 0x99, 0x62, 0x79, 0x89, 0xa0, 0x10, 0x45, 0x44, 0x8f, 0xc1, 0xd1, 0x87,
0x6f, 0x76, 0x48, 0xc7, 0x41, 0x2f, 0xaf, 0x5c, 0x37, 0xff, 0xed, 0xba, 0xac, 0xd2, 0x54, 0xfc, 0xa8, 0xd4, 0x0c, 0x27, 0x07, 0xb7, 0x72, 0x5e, 0xee, 0x90, 0x8e, 0x83, 0x9e, 0x5f, 0x9d, 0x80,
0x1a, 0x2c, 0xd9, 0x12, 0xf5, 0xc1, 0x8a, 0xd2, 0x30, 0x6c, 0x05, 0x2e, 0xe2, 0x45, 0x1a, 0x4e, 0xf9, 0xf7, 0x13, 0x90, 0x59, 0x9a, 0x8a, 0x5f, 0x80, 0x25, 0x4b, 0xa2, 0x3e, 0x58, 0x51, 0x1a,
0x13, 0x69, 0xa1, 0x03, 0xe6, 0xd4, 0xf7, 0x85, 0x7d, 0xc2, 0xd7, 0x74, 0xe1, 0xcb, 0xa4, 0x29, 0x86, 0xad, 0xc0, 0x45, 0xbc, 0x48, 0xc3, 0x69, 0x22, 0xd7, 0xe9, 0x80, 0x39, 0xf5, 0x7d, 0xb1,
0x63, 0x3f, 0x08, 0x03, 0x11, 0x5b, 0xa7, 0x03, 0x70, 0x9a, 0xcd, 0xf2, 0x83, 0x58, 0x15, 0x3e, 0x4b, 0xb1, 0xd7, 0x74, 0xe1, 0xcb, 0xa0, 0x29, 0x6d, 0x3f, 0x08, 0x03, 0x61, 0x5b, 0xa7, 0x03,
0x80, 0x7b, 0xd3, 0xa2, 0xd8, 0xf6, 0x5a, 0xaf, 0x2e, 0xf1, 0x09, 0x1c, 0xfa, 0x74, 0x45, 0x39, 0x70, 0x9a, 0xcd, 0xf2, 0xbd, 0x18, 0x15, 0x3e, 0x80, 0x3b, 0xd3, 0xa2, 0xd8, 0xd6, 0x5a, 0xaf,
0xbd, 0xe1, 0xf5, 0x7f, 0x7f, 0x18, 0x7c, 0x08, 0xe8, 0xc6, 0x0d, 0xf2, 0xde, 0x23, 0x78, 0x40, 0x2e, 0xf1, 0x09, 0x1c, 0xfa, 0x74, 0x45, 0x39, 0xbd, 0xb1, 0xeb, 0x7f, 0xfe, 0x3d, 0xf8, 0x10,
0xa8, 0x6c, 0x3a, 0x67, 0xcb, 0x6a, 0xc3, 0x8a, 0xee, 0x3d, 0x4b, 0x70, 0x69, 0xab, 0xaf, 0xfa, 0xd0, 0x8d, 0x17, 0xe4, 0xbb, 0x47, 0x70, 0x8f, 0x50, 0x59, 0x74, 0xce, 0x96, 0xd5, 0x86, 0x15,
0xe2, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0xa1, 0xab, 0x53, 0xdb, 0xbb, 0x03, 0x00, 0x00, 0xdd, 0x71, 0x4b, 0x70, 0x69, 0xab, 0x7f, 0xfb, 0xec, 0x67, 0x00, 0x00, 0x00, 0xff, 0xff, 0x53,
0x03, 0x9d, 0x60, 0xc8, 0x03, 0x00, 0x00,
} }

View File

@ -1,6 +1,9 @@
syntax = "proto3"; syntax = "proto3";
package ricochet; 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 { message Contact {
int32 id = 1; int32 id = 1;
string address = 2; string address = 2;
@ -10,10 +13,11 @@ message Contact {
ContactRequest request = 6; ContactRequest request = 6;
enum Status { enum Status {
OFFLINE = 0; UNKNOWN = 0;
ONLINE = 1; OFFLINE = 1;
REQUEST = 2; ONLINE = 2;
REJECTED = 3; REQUEST = 3;
REJECTED = 4;
} }
Status status = 10; Status status = 10;
} }

View File

@ -71,6 +71,11 @@ type RicochetCoreClient interface {
StopNetwork(ctx context.Context, in *StopNetworkRequest, opts ...grpc.CallOption) (*NetworkStatus, error) StopNetwork(ctx context.Context, in *StopNetworkRequest, opts ...grpc.CallOption) (*NetworkStatus, error)
// XXX Service status // XXX Service status
GetIdentity(ctx context.Context, in *IdentityRequest, opts ...grpc.CallOption) (*Identity, error) 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) MonitorContacts(ctx context.Context, in *MonitorContactsRequest, opts ...grpc.CallOption) (RicochetCore_MonitorContactsClient, error)
AddContactRequest(ctx context.Context, in *ContactRequest, opts ...grpc.CallOption) (*Contact, error) AddContactRequest(ctx context.Context, in *ContactRequest, opts ...grpc.CallOption) (*Contact, error)
UpdateContact(ctx context.Context, in *Contact, 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) StopNetwork(context.Context, *StopNetworkRequest) (*NetworkStatus, error)
// XXX Service status // XXX Service status
GetIdentity(context.Context, *IdentityRequest) (*Identity, error) 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 MonitorContacts(*MonitorContactsRequest, RicochetCore_MonitorContactsServer) error
AddContactRequest(context.Context, *ContactRequest) (*Contact, error) AddContactRequest(context.Context, *ContactRequest) (*Contact, error)
UpdateContact(context.Context, *Contact) (*Contact, error) UpdateContact(context.Context, *Contact) (*Contact, error)