protected override byte[] CreateHttpContent() { using (var stream = new RequestBodyStream()) { stream.WritePu16((byte)Operation.AddFile); stream.WritePu16(Revision); stream.WriteString(_fullPath); stream.WritePu64(_size); stream.WritePu64(_dateTime.ToUnix()); stream.WritePu32(00); stream.Write(_hash); long mask = ConflictResolver.Rename == _conflictResolver // 1 = overwrite, 55 = don't add if not changed, add with rename if changed ? 55 : 1; stream.WritePu32(mask); if ((mask & 32) != 0) { stream.Write(_hash); stream.WritePu64(_size); } var body = stream.GetBytes(); return(body); } }
/// <summary> /// Used internally. Feeds a <see cref="Record">Record</see> to this request for processing. /// </summary> /// <param name="record">The record to feed.</param> /// <returns>Returns true iff the request is completely received.</returns> internal bool HandleRecord(Record record) { switch (record.Type) { case Record.RecordType.Params: // An empty parameter record specifies that all parameters have been transmitted if (record.ContentLength == 0) { ParamStream.Seek(0, SeekOrigin.Begin); Parameters = Record.ReadNameValuePairs(ParamStream); FinishedParameters = true; } else { // If the params are not yet finished, write the contents to the ParamStream. ParamStream.Write(record.ContentData, 0, record.ContentLength); } break; case Record.RecordType.Stdin: var oldPos = RequestBodyStream.Position; RequestBodyStream.Seek(0, SeekOrigin.End); RequestBodyStream.Write(record.ContentData, 0, record.ContentLength); RequestBodyStream.Position = oldPos; // Finished requests are indicated by an empty stdin record if (record.ContentLength == 0) { FinishedRequestBody = true; return(true); } break; } return(false); }