17c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet/*
27c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Copyright (C) 2009 Google Inc.  All rights reserved.
37c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet *
47c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Licensed under the Apache License, Version 2.0 (the "License");
57c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * you may not use this file except in compliance with the License.
67c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * You may obtain a copy of the License at
77c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet *
87c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet *      http://www.apache.org/licenses/LICENSE-2.0
97c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet *
107c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Unless required by applicable law or agreed to in writing, software
117c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * distributed under the License is distributed on an "AS IS" BASIS,
127c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * See the License for the specific language governing permissions and
147c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * limitations under the License.
157c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */
167c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
177c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetpackage com.google.polo.pairing.message;
187c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
197c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetimport com.google.polo.wire.PoloWireInterface;
207c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
217c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet/**
227c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * Base class for internal representation of Polo protocol messages.
237c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet *
247c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * <p>Implementations of {@link PoloWireInterface} will translate to and from
257c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet * the wire version of protocol messages to subclasses of PoloMessage.
267c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet */
277c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichetpublic class PoloMessage {
287c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
297c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet  /**
307c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet   * List of all available Polo protocol message types, in order of protocol
317c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet   * phases.  The values are synchronized with the constants defined in
327c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet   * polo.proto.
337c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet   */
347c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet  public static enum PoloMessageType {
357c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    UNKNOWN(0),
367c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    PAIRING_REQUEST(10),
377c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    PAIRING_REQUEST_ACK(11),
387c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    OPTIONS(20),
397c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    CONFIGURATION(30),
407c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    CONFIGURATION_ACK(31),
417c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    SECRET(40),
427c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    SECRET_ACK(41);
437c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
447c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    private final int mIntVal;
457c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
467c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    private PoloMessageType(int intVal) {
477c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet      mIntVal = intVal;
487c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    }
497c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
507c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    public static PoloMessageType fromIntVal(int intVal) {
517c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet      for (PoloMessageType messageType : PoloMessageType.values()) {
527c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet        if (messageType.getAsInt() == intVal) {
537c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet          return messageType;
547c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet        }
557c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet      }
567c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet      return null;
577c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    }
587c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
597c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    public int getAsInt() {
607c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet      return mIntVal;
617c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    }
627c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet  }
637c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
647c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet  /**
657c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet   * The Polo protocol message type of this instance.
667c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet   */
677c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet  private final PoloMessageType mType;
687c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
697c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet  public PoloMessage(PoloMessageType type) {
707c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    mType = type;
717c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet  }
727c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
737c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet  public PoloMessageType getType() {
747c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    return mType;
757c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet  }
767c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
777c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet  @Override
787c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet  public String toString() {
797c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet    return "[" + mType.toString() + "]";
807c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet  }
817c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet
827c9978567a202d6aa98beac5da5e1b3b34792862Jerome Poichet}
83