Esempio n. 1
0
        /// <summary>
        /// Performs the specified SOCKS5 request.
        /// </summary>
        /// <param name="request">The SOCKS5 request to issue to the server.</param>
        /// <returns>The SOCKS5 reply sent by the server.</returns>
        /// <exception cref="ArgumentNullException">The request parameter is
        /// null.</exception>
        /// <exception cref="ObjectDisposedException">The object has been
        /// disposed.</exception>
        /// <exception cref="Socks5Exception">The request could not be performed.
        /// Consult the InnerException property of the Socks5Exception to learn
        /// the reason.</exception>
        public SocksReply Request(SocksRequest request)
        {
            request.ThrowIfNull("request");
            AssertValid();
            try
            {
                byte[] bytes = request.Serialize();
                stream.Write(bytes, 0, bytes.Length);
                ByteBuilder b = new ByteBuilder();
                using (var r = new BinaryReader(stream, Encoding.UTF8, true))
                {
                    bytes = r.ReadBytes(4);
                    b.Append(bytes);
                    ATyp atyp = (ATyp)bytes[3];
                    switch (atyp)
                    {
                    case ATyp.IPv4:
                    case ATyp.IPv6:
                        b.Append(r.ReadBytes(atyp == ATyp.IPv4 ? 4 : 16));
                        break;

                    case ATyp.Domain:
                        byte length = r.ReadByte();
                        b.Append(length).Append(r.ReadBytes(length));
                        break;
                    }
                    b.Append(r.ReadBytes(2));
                }
                return(SocksReply.Deserialize(b.ToArray()));
            }
            catch (Exception e)
            {
                throw new Socks5Exception("The request could not be performed.", e);
            }
        }
 /// <summary>
 /// Sends the specified SOCKS5 reply to the connected client.
 /// </summary>
 /// <param name="reply">The SOCKS5 reply to send to the connected
 /// client.</param>
 /// <exception cref="ArgumentNullException">The reply parameter is
 /// null.</exception>
 /// <exception cref="ObjectDisposedException">The object has been
 /// disposed.</exception>
 public async Task Reply(SocksReply reply)
 {
     reply.ThrowIfNull("reply");
     AssertValid();
     var bytes = reply.Serialize();
     await stream.WriteAsync(bytes, 0, bytes.Length);
 }
Esempio n. 3
0
        /// <summary>
        /// Sends the specified SOCKS5 reply to the connected client.
        /// </summary>
        /// <param name="reply">The SOCKS5 reply to send to the connected
        /// client.</param>
        /// <exception cref="ArgumentNullException">The reply parameter is
        /// null.</exception>
        /// <exception cref="ObjectDisposedException">The object has been
        /// disposed.</exception>
        public void Reply(SocksReply reply)
        {
            reply.ThrowIfNull("reply");
            AssertValid();
            var bytes = reply.Serialize();

            stream.Write(bytes, 0, bytes.Length);
        }
Esempio n. 4
0
		/// <summary>
		/// Sends the specified SOCKS5 reply to the connected client.
		/// </summary>
		/// <param name="reply">The SOCKS5 reply to send to the connected
		/// client.</param>
		/// <exception cref="ArgumentNullException">The reply parameter is
		/// null.</exception>
		/// <exception cref="ObjectDisposedException">The object has been
		/// disposed.</exception>
		public void Reply(SocksReply reply) {
			reply.ThrowIfNull("reply");
			AssertValid();
			var bytes = reply.Serialize();
			stream.Write(bytes, 0, bytes.Length);
		}