コード例 #1
0
        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);
            }
        }
コード例 #2
0
        /// <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);
        }