docs: public void complete(VirtualConnection vc, TCPReadRequestContext rsc) {
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "complete() called: vc=" + vc);
          }
  
          HttpOutboundServiceContextImpl osc = (HttpOutboundServiceContextImpl) vc.getStateMap().get(CallbackIDs.CALLBACK_HTTPOSC);
          osc.markReadCancelFailure();
  
          int state;
          // query/set the states in one block to avoid timing windows
          synchronized (osc.stateSyncObject) {
              state = osc.getReadState();
              osc.setCallbackState(HttpOutboundServiceContextImpl.CALLBACK_STATE_COMPLETE, null);
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "Read-ahead state: " + state);
          }
  
          switch (state) {
              case (HttpOutboundServiceContextImpl.READ_STATE_IDLE):
                  // connection is still in app channel's pool, error condition
                  IOException ioe = new IOException("Unexpected read complete");
                  osc.getAppReadCallback().error(vc, ioe);
                  break;
              case (HttpOutboundServiceContextImpl.READ_STATE_TIME_RESET):
                  // init() has been called and the read-ahead should have been
                  // canceled, so this is an error
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "Error: Read-ahead completed after init() call.");
                  }
                  osc.setCallbackState(HttpOutboundServiceContextImpl.CALLBACK_STATE_ERROR, new IOException("Invalid read-ahead data"));
                  break;
              case (HttpOutboundServiceContextImpl.READ_STATE_SYNC):
                  // d264854: no longer possible
                  // sync read for the response has already started
                  osc.wakeupReadAhead();
                  break;
              case (HttpOutboundServiceContextImpl.READ_STATE_ASYNC):
                  // d264854: no longer possible
                  // async read for the response has already started
                  HttpOSCReadCallback.getRef().complete(vc, rsc);
                  break;
              default:
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "Unexpected read-ahead state: " + state);
                  }
                  break;
          }
      }