1// Copyright 2009 Google Inc. All Rights Reserved.
2
3package polo.wire.protobuf;
4
5option javanano_use_deprecated_package = true;
6option java_outer_classname = "PoloProto";
7option java_package = "com.google.polo.wire.protobuf";
8option optimize_for = LITE_RUNTIME;
9
10// OuterMessage - base outer message type used in the protocol.
11
12message OuterMessage {
13
14  // MessageType indicates the type of the enclosed message (serialized in the
15  // `payload` field)
16  enum MessageType {
17    // Initialization phase
18    MESSAGE_TYPE_PAIRING_REQUEST = 10;
19    MESSAGE_TYPE_PAIRING_REQUEST_ACK = 11;
20
21    // Configuration phase
22    MESSAGE_TYPE_OPTIONS = 20;
23    MESSAGE_TYPE_CONFIGURATION = 30;
24    MESSAGE_TYPE_CONFIGURATION_ACK = 31;
25
26    // Pairing phase
27    MESSAGE_TYPE_SECRET = 40;
28    MESSAGE_TYPE_SECRET_ACK = 41;
29  }
30
31  // Protocol status states.
32  enum Status {
33    STATUS_OK = 200;
34    STATUS_ERROR = 400;
35    STATUS_BAD_CONFIGURATION = 401;
36    STATUS_BAD_SECRET = 402;
37  }
38
39  required uint32 protocol_version = 1 [default = 1];
40
41  // Protocol status. Any status other than STATUS_OK implies a fault.
42  required Status status = 2;
43
44  // Encapsulated message.  These fields are required if status is STATUS_OK.
45  optional MessageType type = 3;
46  optional bytes payload = 4;
47
48}
49
50
51//
52// Initialization messages
53//
54
55message PairingRequest {
56  // String name of the service to pair with.  The name used should be an
57  // established convention of the application protocol.
58  required string service_name = 1;
59
60  // Descriptive name of the client.
61  optional string client_name = 2;
62}
63
64message PairingRequestAck {
65  // Descriptive name of the server.
66  optional string server_name = 1;
67}
68
69
70//
71// Configuration messages
72//
73
74message Options {
75  message Encoding {
76    enum EncodingType {
77      ENCODING_TYPE_UNKNOWN = 0;
78      ENCODING_TYPE_ALPHANUMERIC = 1;
79      ENCODING_TYPE_NUMERIC = 2;
80      ENCODING_TYPE_HEXADECIMAL = 3;
81      ENCODING_TYPE_QRCODE = 4;
82    }
83
84    required EncodingType type = 1;
85    required uint32 symbol_length = 2;
86  }
87
88  enum RoleType {
89    ROLE_TYPE_UNKNOWN = 0;
90    ROLE_TYPE_INPUT = 1;
91    ROLE_TYPE_OUTPUT = 2;
92  }
93
94  // List of encodings this endpoint accepts when serving as an input device.
95  repeated Encoding input_encodings = 1;
96
97  // List of encodings this endpoint can generate as an output device.
98  repeated Encoding output_encodings = 2;
99
100  // Preferred role, if any.
101  optional RoleType preferred_role = 3;
102}
103
104message Configuration {
105  // The encoding to be used in this session.
106  required Options.Encoding encoding = 1;
107
108  // The role of the client (ie, the one initiating pairing). This implies the
109  // peer (server) acts as the complementary role.
110  required Options.RoleType client_role = 2;
111}
112
113message ConfigurationAck {
114}
115
116
117//
118// Pairing messages
119//
120
121message Secret {
122  required bytes secret = 1;
123}
124
125message SecretAck {
126  required bytes secret = 1;
127}
128
129