Importing Google TV Pairing Protocol library

This has been modified to compile using nanobuf

Change-Id: If8f092b422d4be7b78ff0f6ef92c94beaea4300c
diff --git a/proto/polo.proto b/proto/polo.proto
new file mode 100644
index 0000000..fbe95e9
--- /dev/null
+++ b/proto/polo.proto
@@ -0,0 +1,127 @@
+// Copyright 2009 Google Inc. All Rights Reserved.
+
+package polo.wire.protobuf;
+
+option java_outer_classname = "PoloProto";
+option java_package = "com.google.polo.wire.protobuf";
+option optimize_for = LITE_RUNTIME;
+
+// OuterMessage - base outer message type used in the protocol.
+
+message OuterMessage {
+
+  // MessageType indicates the type of the enclosed message (serialized in the
+  // `payload` field)
+  enum MessageType {
+    // Initialization phase
+    MESSAGE_TYPE_PAIRING_REQUEST = 10;
+    MESSAGE_TYPE_PAIRING_REQUEST_ACK = 11;
+
+    // Configuration phase
+    MESSAGE_TYPE_OPTIONS = 20;
+    MESSAGE_TYPE_CONFIGURATION = 30;
+    MESSAGE_TYPE_CONFIGURATION_ACK = 31;
+
+    // Pairing phase
+    MESSAGE_TYPE_SECRET = 40;
+    MESSAGE_TYPE_SECRET_ACK = 41;
+  }
+
+  // Protocol status states.
+  enum Status {
+    STATUS_OK = 200;
+    STATUS_ERROR = 400;
+    STATUS_BAD_CONFIGURATION = 401;
+    STATUS_BAD_SECRET = 402;
+  }
+
+  required uint32 protocol_version = 1 [default = 1];
+
+  // Protocol status. Any status other than STATUS_OK implies a fault.
+  required Status status = 2;
+
+  // Encapsulated message.  These fields are required if status is STATUS_OK.
+  optional MessageType type = 3;
+  optional bytes payload = 4;
+
+}
+
+
+//
+// Initialization messages
+//
+
+message PairingRequest {
+  // String name of the service to pair with.  The name used should be an
+  // established convention of the application protocol.
+  required string service_name = 1;
+
+  // Descriptive name of the client.
+  optional string client_name = 2;
+}
+
+message PairingRequestAck {
+  // Descriptive name of the server.
+  optional string server_name = 1;
+}
+
+
+//
+// Configuration messages
+//
+
+message Options {
+  message Encoding {
+    enum EncodingType {
+      ENCODING_TYPE_UNKNOWN = 0;
+      ENCODING_TYPE_ALPHANUMERIC = 1;
+      ENCODING_TYPE_NUMERIC = 2;
+      ENCODING_TYPE_HEXADECIMAL = 3;
+      ENCODING_TYPE_QRCODE = 4;
+    }
+
+    required EncodingType type = 1;
+    required uint32 symbol_length = 2;
+  }
+
+  enum RoleType {
+    ROLE_TYPE_UNKNOWN = 0;
+    ROLE_TYPE_INPUT = 1;
+    ROLE_TYPE_OUTPUT = 2;
+  }
+
+  // List of encodings this endpoint accepts when serving as an input device.
+  repeated Encoding input_encodings = 1;
+
+  // List of encodings this endpoint can generate as an output device.
+  repeated Encoding output_encodings = 2;
+
+  // Preferred role, if any.
+  optional RoleType preferred_role = 3;
+}
+
+message Configuration {
+  // The encoding to be used in this session.
+  required Options.Encoding encoding = 1;
+
+  // The role of the client (ie, the one initiating pairing). This implies the
+  // peer (server) acts as the complementary role.
+  required Options.RoleType client_role = 2;
+}
+
+message ConfigurationAck {
+}
+
+
+//
+// Pairing messages
+//
+
+message Secret {
+  required bytes secret = 1;
+}
+
+message SecretAck {
+  required bytes secret = 1;
+}
+