Large refactor to:
- Introduce 'Channel' & 'Call' interfaces
- Unify the surfaces for the prototype generated stubs
- Lighten dependency on MessageLite outside of generated code (see Marshaller)
- Bridge Channel to Session pending Transport interface rewrite
- Update all tests to new interfaces
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=68407406
diff --git a/core/src/main/java/com/google/net/stubby/http/UrlConnectionClientSession.java b/core/src/main/java/com/google/net/stubby/http/UrlConnectionClientSession.java
index 96c5b7d..a268228 100644
--- a/core/src/main/java/com/google/net/stubby/http/UrlConnectionClientSession.java
+++ b/core/src/main/java/com/google/net/stubby/http/UrlConnectionClientSession.java
@@ -72,9 +72,22 @@
}
@Override
+ public Operation close(Status status) {
+ // TODO(user): This is broken but necessary to get test passing with the introduction
+ // of Channel as now for most calls the close() call is decoupled from the last call to
+ // addPayload. The real fix is to remove 'nextPhase' from the Operation interface and
+ // clean up Framer. For a follow up CL.
+ boolean alreadyClosed = getPhase() == Phase.CLOSED;
+ super.close(status);
+ if (!alreadyClosed) {
+ framer.writeStatus(status, true, this);
+ }
+ return this;
+ }
+
+ @Override
public void deliverFrame(ByteBuffer frame, boolean endOfMessage) {
boolean closed = getPhase() == Phase.CLOSED;
-
try {
ByteBuffers.asByteSource(frame).copyTo(outputStream);
if (closed && endOfMessage) {
@@ -87,12 +100,7 @@
}
} catch (IOException ioe) {
close(new Status(Transport.Code.INTERNAL, ioe));
- } finally {
- if (closed && endOfMessage) {
- framer.close();
- }
}
}
}
}
-