Merge "js: default to vom version 81"
diff --git a/src/vom/type-encoder.js b/src/vom/type-encoder.js
index 2de2212..aef6940 100644
--- a/src/vom/type-encoder.js
+++ b/src/vom/type-encoder.js
@@ -163,7 +163,7 @@
       }
       rawWriter.writeUint(1);
       rawWriter.writeUint(kindToBootstrapType(type.kind).id);
-      rawWriter.writeByte(endByte);
+      rawWriter.writeControlByte(endByte);
       break;
     case kind.OPTIONAL:
       elemId = this._encodeType(type.elem, pending);
@@ -174,7 +174,7 @@
       }
       rawWriter.writeUint(1);
       rawWriter.writeUint(elemId);
-      rawWriter.writeByte(endByte);
+      rawWriter.writeControlByte(endByte);
       break;
     case kind.ENUM:
       rawWriter.writeUint(BootstrapTypes.unionIds.ENUM_TYPE);
@@ -187,7 +187,7 @@
       for (i = 0; i < type.labels.length; i++) {
         rawWriter.writeString(type.labels[i]);
       }
-      rawWriter.writeByte(endByte);
+      rawWriter.writeControlByte(endByte);
       break;
     case kind.ARRAY:
       elemId = this._encodeType(type.elem, pending);
@@ -200,7 +200,7 @@
       rawWriter.writeUint(elemId);
       rawWriter.writeUint(2);
       rawWriter.writeUint(type.len);
-      rawWriter.writeByte(endByte);
+      rawWriter.writeControlByte(endByte);
       break;
     case kind.LIST:
       elemId = this._encodeType(type.elem, pending);
@@ -211,7 +211,7 @@
       }
       rawWriter.writeUint(1);
       rawWriter.writeUint(elemId);
-      rawWriter.writeByte(endByte);
+      rawWriter.writeControlByte(endByte);
       break;
     case kind.SET:
       keyId = this._encodeType(type.key, pending);
@@ -222,7 +222,7 @@
       }
       rawWriter.writeUint(1);
       rawWriter.writeUint(keyId);
-      rawWriter.writeByte(endByte);
+      rawWriter.writeControlByte(endByte);
       break;
     case kind.MAP:
       keyId = this._encodeType(type.key, pending);
@@ -236,7 +236,7 @@
       rawWriter.writeUint(keyId);
       rawWriter.writeUint(2);
       rawWriter.writeUint(elemId);
-      rawWriter.writeByte(endByte);
+      rawWriter.writeControlByte(endByte);
       break;
     case kind.STRUCT:
     case kind.UNION:
@@ -265,9 +265,9 @@
         rawWriter.writeString(field.name);
         rawWriter.writeUint(1);
         rawWriter.writeUint(field.id);
-        rawWriter.writeByte(endByte);
+        rawWriter.writeControlByte(endByte);
       }
-      rawWriter.writeByte(endByte);
+      rawWriter.writeControlByte(endByte);
       break;
     default:
       throw new Error('encodeWireType with unknown kind: ' + type.kind);
diff --git a/src/vom/versions.js b/src/vom/versions.js
index cff9e17..8259c69 100644
--- a/src/vom/versions.js
+++ b/src/vom/versions.js
@@ -10,6 +10,6 @@
  module.exports = {
    version80: 0x80,
    version81: 0x81,
-   defaultVersion: 0x80,
+   defaultVersion: 0x81,
    allowedVersions: [0x80, 0x81]
  };
diff --git a/test/vom/test-type-encoding.js b/test/vom/test-type-encoding.js
index f0ba800..faf7a30 100644
--- a/test/vom/test-type-encoding.js
+++ b/test/vom/test-type-encoding.js
@@ -11,6 +11,7 @@
 var stringify = require('./../../src/vdl/stringify.js');
 var types = require('./../../src/vdl/types.js');
 var kind = require('./../../src/vdl/kind.js');
+var wiretype = require('../../src/gen-vdl/v.io/v23/vom');
 var Promise = require('./../../src/lib/promise');
 
 var TypeEncoder = require('./../../src/vom/type-encoder.js');
@@ -30,8 +31,8 @@
   this.rawReader = new RawVomReader(bytes);
   // consume the header byte.
   this.rawReader._readRawBytes(1);
-  if (header !== 0x80) {
-    throw new Error('Improperly formatted bytes. Must start with 0x80');
+  if (header !== 0x80 && header !== 0x81) {
+    throw new Error('Improperly formatted bytes. Must start with 0x80 or 0x81');
   }
 }
 
@@ -40,7 +41,18 @@
  */
 TypeMessageReader.prototype.nextMessage = function(typeDecoder) {
   var reader = this;
-  return this.rawReader.readInt().then(function(typeId) {
+  return reader.rawReader.tryReadControlByte().then(function(ctrl) {
+    // NOTE: In the tests using this reader, types are read in order. This
+    // could potentially lead to hangs but doesn't because of the particular
+    // test cases chosen. This isn't an issue and in the non-test implementation
+    // because the type building algorithm is different.
+    // TODO(bprosnitz) The tests should probably be changed to reuse the
+    // same type building logic of the implementation in the future.
+    if (ctrl && ctrl !== wiretype.WireCtrlTypeIncomplete.val) {
+      throw new Error('received unknown control byte: 0x' + ctrl.toString(16));
+    }
+    return reader.rawReader.readInt();
+  }).then(function(typeId) {
     if (typeId >= 0) {
       throw new Error('Value messages not implemented.');
     }