示例#1
0
        /// <summary>Configure this connection with the directional pipes.</summary>
        /// <remarks>Configure this connection with the directional pipes.</remarks>
        /// <param name="myIn">
        /// input stream to receive data from the peer. Caller must ensure
        /// the input is buffered, otherwise read performance may suffer.
        /// </param>
        /// <param name="myOut">
        /// output stream to transmit data to the peer. Caller must ensure
        /// the output is buffered, otherwise write performance may
        /// suffer.
        /// </param>
        protected internal void Init(InputStream myIn, OutputStream myOut)
        {
            int timeout = transport.GetTimeout();

            if (timeout > 0)
            {
                Sharpen.Thread caller = Sharpen.Thread.CurrentThread();
                myTimer    = new InterruptTimer(caller.GetName() + "-Timer");
                timeoutIn  = new TimeoutInputStream(myIn, myTimer);
                timeoutOut = new TimeoutOutputStream(myOut, myTimer);
                timeoutIn.SetTimeout(timeout * 1000);
                timeoutOut.SetTimeout(timeout * 1000);
                myIn  = timeoutIn;
                myOut = timeoutOut;
            }
            @in         = myIn;
            @out        = myOut;
            pckIn       = new PacketLineIn(@in);
            pckOut      = new PacketLineOut(@out);
            outNeedsEnd = true;
        }
示例#2
0
 /// <summary>Execute the upload task on the socket.</summary>
 /// <remarks>Execute the upload task on the socket.</remarks>
 /// <param name="input">
 /// raw input to read client commands from. Caller must ensure the
 /// input is buffered, otherwise read performance may suffer.
 /// </param>
 /// <param name="output">
 /// response back to the Git network client, to write the pack
 /// data onto. Caller must ensure the output is buffered,
 /// otherwise write performance may suffer.
 /// </param>
 /// <param name="messages">
 /// secondary "notice" channel to send additional messages out
 /// through. When run over SSH this should be tied back to the
 /// standard error channel of the command execution. For most
 /// other network connections this should be null.
 /// </param>
 /// <exception cref="System.IO.IOException">System.IO.IOException</exception>
 public virtual void Upload(InputStream input, OutputStream output, OutputStream messages
                            )
 {
     try
     {
         rawIn  = input;
         rawOut = output;
         if (timeout > 0)
         {
             Sharpen.Thread caller = Sharpen.Thread.CurrentThread();
             timer = new InterruptTimer(caller.GetName() + "-Timer");
             TimeoutInputStream  i = new TimeoutInputStream(rawIn, timer);
             TimeoutOutputStream o = new TimeoutOutputStream(rawOut, timer);
             i.SetTimeout(timeout * 1000);
             o.SetTimeout(timeout * 1000);
             rawIn  = i;
             rawOut = o;
         }
         pckIn  = new PacketLineIn(rawIn);
         pckOut = new PacketLineOut(rawOut);
         Service();
     }
     finally
     {
         walk.Release();
         if (timer != null)
         {
             try
             {
                 timer.Terminate();
             }
             finally
             {
                 timer = null;
             }
         }
     }
 }