Adding support for manually specifying HTTP/2 :authority and :path headers.

-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=75316631
diff --git a/core/src/main/java/com/google/net/stubby/newtransport/okhttp/OkHttpClientTransport.java b/core/src/main/java/com/google/net/stubby/newtransport/okhttp/OkHttpClientTransport.java
index 4d94ac1..852591f 100644
--- a/core/src/main/java/com/google/net/stubby/newtransport/okhttp/OkHttpClientTransport.java
+++ b/core/src/main/java/com/google/net/stubby/newtransport/okhttp/OkHttpClientTransport.java
@@ -32,6 +32,7 @@
 import okio.Okio;
 
 import java.io.IOException;
+import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
@@ -84,8 +85,8 @@
     ERROR_CODE_TO_STATUS = Collections.unmodifiableMap(errorToStatus);
   }
 
-  private final String host;
-  private final int port;
+  private final InetSocketAddress address;
+  private final String defaultAuthority;
   private FrameReader frameReader;
   private AsyncFrameWriter frameWriter;
   private final Object lock = new Object();
@@ -102,9 +103,9 @@
   @GuardedBy("lock")
   private Status goAwayStatus;
 
-  OkHttpClientTransport(String host, int port, Executor executor) {
-    this.host = Preconditions.checkNotNull(host);
-    this.port = port;
+  OkHttpClientTransport(InetSocketAddress address, Executor executor) {
+    this.address = Preconditions.checkNotNull(address);
+    defaultAuthority = address.getHostString() + ":" + address.getPort();
     this.executor = Preconditions.checkNotNull(executor);
     // Client initiated streams are odd, server initiated ones are even. Server should not need to
     // use it. We start clients at 3 to avoid conflicting with HTTP negotiation.
@@ -117,8 +118,8 @@
   @VisibleForTesting
   OkHttpClientTransport(Executor executor, FrameReader frameReader, AsyncFrameWriter frameWriter,
       int nextStreamId) {
-    host = null;
-    port = -1;
+    address = null;
+    defaultAuthority = "notarealauthority:80";
     this.executor = Preconditions.checkNotNull(executor);
     this.frameReader = Preconditions.checkNotNull(frameReader);
     this.frameWriter = Preconditions.checkNotNull(frameWriter);
@@ -129,17 +130,17 @@
   protected ClientStream newStreamInternal(MethodDescriptor<?, ?> method,
                                            Metadata.Headers headers,
                                            StreamListener listener) {
-    return new OkHttpClientStream(method, headers.serialize(), listener);
+    return new OkHttpClientStream(method, headers, listener);
   }
 
   @Override
   protected void doStart() {
     // We set host to null for test.
-    if (host != null) {
+    if (address != null) {
       BufferedSource source;
       BufferedSink sink;
       try {
-        Socket socket = new Socket(host, port);
+        Socket socket = new Socket(address.getAddress(), address.getPort());
         source = Okio.buffer(Okio.source(socket));
         sink = Okio.buffer(Okio.sink(socket));
       } catch (IOException e) {
@@ -401,7 +402,8 @@
     final InputStreamDeframer deframer;
     int unacknowledgedBytesRead;
 
-    OkHttpClientStream(MethodDescriptor<?, ?> method, byte[][] headers, StreamListener listener) {
+    OkHttpClientStream(MethodDescriptor<?, ?> method, Metadata.Headers headers,
+        StreamListener listener) {
       super(listener);
       deframer = new InputStreamDeframer(inboundMessageHandler());
       synchronized (lock) {
@@ -411,8 +413,9 @@
         }
         assignStreamId(this);
       }
+      String defaultPath = "/" + method.getName();
       frameWriter.synStream(false, false, streamId, 0,
-          Headers.createRequestHeaders(method.getName(), headers));
+          Headers.createRequestHeaders(headers, defaultPath, defaultAuthority));
     }
 
     InputStreamDeframer getDeframer() {