private void ClearNativeResponse(bool clearEntity, bool clearHeaders, IIS7WorkerRequest wr) { wr.ClearResponse(clearEntity, clearHeaders); if (clearEntity) { this._httpWriter.ClearSubstitutionBlocks(); } }
internal void FilterIntegrated(bool finalFiltering, IIS7WorkerRequest wr) { // no filter? if (_installedFilter == null) return; // flush char buffer and remember old buffers if (_charBufferLength != _charBufferFree) FlushCharBuffer(true); _lastBuffer = null; // ISAPI mode bails if it has no buffers // to filter, in integrated mode we need // to check the unified response buffers // maintained by IIS for content, as well // remember current buffers (if any) that might be // response entity from this transition // (not yet pushed through to IIS response buffers) ArrayList oldBuffers = _buffers; _buffers = new ArrayList(); // now, get what's in the IIS buffers ArrayList nativeBuffers = null; bool fDummy = false; nativeBuffers = wr.GetBufferedResponseChunks(false, null, ref fDummy); Debug.Assert(_filterSink != null); _filterSink.Filtering = true; try { // push buffers through installed filters // push the IIS ones through first since we need to maintain order if (null != nativeBuffers) { for (int i = 0; i < nativeBuffers.Count; i++) { IHttpResponseElement buf = (IHttpResponseElement)nativeBuffers[i]; long len = buf.GetSize(); if (len > 0) _installedFilter.Write(buf.GetBytes(), 0, Convert.ToInt32(len)); } // if we had stuff there, we now need to clear it since we may have // transformed it wr.ClearResponse(true /* entity */, false /* headers */); } // current buffers, if any if (null != oldBuffers) { for (int i = 0; i < oldBuffers.Count; i++) { IHttpResponseElement buf = (IHttpResponseElement)oldBuffers[i]; long len = buf.GetSize(); if (len > 0) _installedFilter.Write(buf.GetBytes(), 0, Convert.ToInt32(len)); } } _installedFilter.Flush(); } finally { try { if (finalFiltering) _installedFilter.Close(); } finally { _filterSink.Filtering = false; } } }
internal void FilterIntegrated(bool finalFiltering, IIS7WorkerRequest wr) { if (this._installedFilter != null) { if (this._charBufferLength != this._charBufferFree) { this.FlushCharBuffer(true); } this._lastBuffer = null; ArrayList list = this._buffers; this._buffers = new ArrayList(); ArrayList list2 = null; bool hasSubstBlocks = false; list2 = wr.GetBufferedResponseChunks(false, null, ref hasSubstBlocks); this._filterSink.Filtering = true; try { if (list2 != null) { for (int i = 0; i < list2.Count; i++) { IHttpResponseElement element = (IHttpResponseElement) list2[i]; long size = element.GetSize(); if (size > 0L) { this._installedFilter.Write(element.GetBytes(), 0, Convert.ToInt32(size)); } } wr.ClearResponse(true, false); } if (list != null) { for (int j = 0; j < list.Count; j++) { IHttpResponseElement element2 = (IHttpResponseElement) list[j]; long num4 = element2.GetSize(); if (num4 > 0L) { this._installedFilter.Write(element2.GetBytes(), 0, Convert.ToInt32(num4)); } } } this._installedFilter.Flush(); } finally { try { if (finalFiltering) { this._installedFilter.Close(); } } finally { this._filterSink.Filtering = false; } } } }