All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.6.0-alpha - 2024-09-24
Socket.IsBound
implementation forSocksClient
.
0.5.0-alpha - 2024-09-06
Socket.SetSocketOption()
implementation taking an int as third parameter.Socket.GetSocketOption()
implementation returning an object.- Exposed
IsCommandAvailable
andAuthenticated
fromSocksClient
. SocksClient.WaitForCommand()
method which allows waiting until the command is ready for data transfer or has been accepted.
- Added lock around socket calls, so only one thread uses a socket at a time.
SocksClientStream
trying to receive data while the command wasn't accepted yet.
0.4.0-alpha - 2024-08-28
Socket.Available
implementation forSocksClient
andCommand
(in case it handles communication).Socket.Connected
property is exposed bySocksClient
now.- A new interface
ISocket
to make managing socket properties and methods easier. - A new class
SocksClientStream
(similar toSystem.Net.Socket.NetworkStream
) which allows working withSocksClient
s as streams.
0.3.1-alpha - 2024-08-14
- Minimal implementation of
Shutdown()
forSocksClient
andCommand
(in case it handles communication).
0.3.0-alpha - 2024-08-14
SocksClient.Connect()
implementation which takes anIPEndPoint
.Socket.Disconnect()
method is exposed bySocksClient
and commands now.- Username and password authentication method according to RFC 1929 (#16).
- New list property (
ClientCommand.ClientEndpoints
) which contains all remote client endpoints received from a proxy server. - New
EndPoint
properties forSocksClient
:LocalEndPoint
,ProxiedLocalEndPoint
andProxiedRemoteEndPoint
. - Minimal implementation of
GetSocketOption()
andSetSocketOption()
forSocksClient
andCommand
(in case it handles communication). - Minimal implementation of
Poll()
andBlocking
forSocksClient
andCommand
(in case it handles communication).
- Remove
Is
-prefix fromSocksSession
properties.
- The client command property
BindCommand.ClientEndpoint
in favor ofClientCommand.ClientEndpoints
.
SocksClient.Dispose()
now also callsDispose()
for commands which implementIDisposable
.UdpAssociateCommand.WrapperLength
now correctly returns the maximum amount of bytes required to wrap/unwrap aUdpPacket
.- The send and receive methods of commands hava parameters for
SocketFlags
andSocketError
now.
0.2.0-alpha - 2024-07-28
- Logo made by Justin de Haas.
- Basic SOCKS5 proxy client (not compliant yet).
- New generated
IProxyAuth.GetAuth()
extension method to get theAuthMethod
value from an auth implementation. Packet
constructor which takes a byte array.- New method
Packet.AsSpan()
to get the underlying byte array of a packet as aSpan<byte>
. - Constructors taking a
ProxyEndpoint
forEndpointPackets
. Equals()
andGetHashCode()
implementation forProxyEndpoint
.- New interface
IWrapper
which containsWrap()
andUnwrap()
. - New properties for
Command
implementations to control communication with the proxy server. - New method
Packet.IsValid()
which returns a bool instead of throwing exceptions. Validate()
implementation forEndPointPacket
.Socket.Close()
andSocket.Dispose()
methods are exposed bySocksClient
now.- Missing parameterless constructor for
CommandRequest
.
- Improved introduction in
README.md
. - Renamed
Destination
class toProxyEndpoint
. SocksSession.Process*()
methods were marked as virtual.- Improved exception messages.
- Throw
ArgumentOutOfRangeException
instead ofArgumentException
if the length of the domain name is invalid forEndpointPackets
. - Replaced init-only setter for
Packet.Bytes
with a regular setter. - Replaced protected fields of
SocksSession
with public properties containing a protected setter. - Changed the signature for
Wrap()
andUnwrap()
.
- Misbehaving UdpAssociate command.
0.1.0-alpha - 2024-04-21
- Basic SOCKS5 proxy server (not compliant yet).
- Connect command.
- Bind command.
- UdpAssociate command without fragmentation.
- Configurable authentication methods.
- Configurable SOCKS commands.
- Configurable allow and block lists.