/// <summary>
        /// Send socket option message
        /// </summary>
        /// <param name="option"></param>
        /// <param name="value"></param>
        /// <param name="ct"></param>
        public async Task SetSocketOptionAsync(
            SocketOption option, ulong value, CancellationToken ct)
        {
            var response = await _socket.Provider.ControlChannel.CallAsync(Proxy,
                                                                           new Message(_socket.Id, RemoteId, new SetOptRequest(
                                                                                           new SocketOptionValue(option, value))), ct).ConfigureAwait(false);

            ProxySocket.ThrowIfFailed(response);
        }
 /// <summary>
 /// Constructor for proxy link object
 /// </summary>
 /// <param name="socket">Owning proxy link</param>
 /// <param name="remoteId">Remote endpoint id assigned by proxy</param>
 /// <param name="localAddress">Remote local address</param>
 /// <param name="peerAddress">Remote peer address</param>
 /// <returns></returns>
 internal ProxyLink(ProxySocket socket, INameRecord proxy, Reference remoteId,
                    SocketAddress localAddress, SocketAddress peerAddress)
 {
     _streamId    = new Reference();
     _socket      = socket;
     Proxy        = proxy;
     RemoteId     = remoteId;
     LocalAddress = localAddress;
     PeerAddress  = peerAddress;
 }
        /// <summary>
        /// Get socket option
        /// </summary>
        /// <param name="option"></param>
        /// <param name="ct"></param>
        /// <returns></returns>
        public async Task <ulong> GetSocketOptionAsync(
            SocketOption option, CancellationToken ct)
        {
            var response = await _socket.Provider.ControlChannel.CallAsync(Proxy,
                                                                           new Message(_socket.Id, RemoteId, new GetOptRequest(
                                                                                           option)), ct).ConfigureAwait(false);

            ProxySocket.ThrowIfFailed(response);
            return(((GetOptResponse)response.Content).OptionValue.Value);
        }
Exemple #4
0
        /// <summary>
        /// Receive a message
        /// </summary>
        /// <param name="buffer"></param>
        /// <param name="ct"></param>
        /// <returns></returns>
        protected async Task <DataMessage> ReceiveAsync(
            CancellationToken ct)
        {
            Message message;

            while (!Socket.ReceiveQueue.TryDequeue(out message))
            {
                await Socket.ReceiveAsync(ct).ConfigureAwait(false);
            }
            ProxySocket.ThrowIfFailed(message);
            if (message.Error != (int)SocketError.Success)
            {
                throw new SocketException((SocketError)message.Error);
            }
            if (message.TypeId != MessageContent.Data)
            {
                throw new SocketException("No data message");
            }
            return(message.Content as DataMessage);
        }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="socket"></param>
 internal ListenStream(ProxySocket socket) :
     base(socket)
 {
 }
Exemple #6
0
 internal ProxyStream(ProxySocket socket)
 {
     Socket = socket;
 }
Exemple #7
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="socket"></param>
 internal PacketStream(ProxySocket socket) :
     base(socket)
 {
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="socket"></param>
 internal SequentialStream(ProxySocket socket) :
     base(socket)
 {
 }