private void ReadHttpHeaders() { string line = this.ReadLine(); int index1 = line.IndexOf(' '); if ((index1 <= 0) || ((line.Length - 3) <= index1)) { throw Error.BatchStreamInvalidMethodHeaderSpecified(line); } int index2 = (this.batchRequest ? line.LastIndexOf(' ') : line.IndexOf(' ', index1 + 1)); if ((index2 < 0) || (index2 - index1 - 1 <= 0) || ((line.Length - 1) <= index2)) { throw Error.BatchStreamInvalidMethodHeaderSpecified(line); } string segment1 = line.Substring(0, index1); string segment2 = line.Substring(index1 + 1, index2 - index1 - 1); string segment3 = line.Substring(index2 + 1); #region validate HttpVersion string httpVersion = this.batchRequest ? segment3 : segment1; if (httpVersion != XmlConstants.HttpVersionInBatching) { throw Error.BatchStreamInvalidHttpVersionSpecified(httpVersion, XmlConstants.HttpVersionInBatching); } #endregion this.ReadContentHeaders(); BatchStreamState state; if (this.batchRequest) { state = GetStateBasedOnHttpMethodName(segment1); } else { state = (BatchStreamState.EndBatch == this.batchState) ? BatchStreamState.GetResponse : BatchStreamState.ChangeResponse; this.statusCode = segment2; } #region validate state change Debug.Assert( BatchStreamState.EndBatch == this.batchState || BatchStreamState.EndChangeSet == this.batchState, "unexpected BatchStreamState"); if (this.batchState == BatchStreamState.EndBatch) { if ((this.batchRequest && (state == BatchStreamState.Get)) || (!this.batchRequest && (state == BatchStreamState.GetResponse))) { this.batchState = state; } else { throw Error.BatchStreamOnlyGETOperationsCanBeSpecifiedInBatch(); } } else if (this.batchState == BatchStreamState.EndChangeSet) { if ((this.batchRequest && ((BatchStreamState.Post == state) || (BatchStreamState.Put == state) || (BatchStreamState.Delete == state) || (BatchStreamState.Merge == state))) || (!this.batchRequest && (state == BatchStreamState.ChangeResponse))) { this.batchState = state; } else { this.batchState = BatchStreamState.Post; throw Error.BatchStreamGetMethodNotSupportInChangeset(); } } else { throw Error.BatchStreamInvalidOperationHeaderSpecified(); } #endregion }