Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / ManagedLibraries / Remoting / Channels / TCP / TcpClientSocketManager.cs / 1305376 / TcpClientSocketManager.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
//==========================================================================
// File: TcpClientSocketManager.cs
//
// Summary: Class for managing a socket connection.
//
//=========================================================================
using System;
using System.Collections;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Threading;
using System.Globalization;
namespace System.Runtime.Remoting.Channels.Tcp
{
// A client socket manager instance should encapsulate the socket
// for the purpose of reading a response
internal class TcpClientSocketHandler : TcpSocketHandler
{
// prebaked bytes
private static byte[] s_endOfLineBytes = Encoding.ASCII.GetBytes("\r\n");
private String _machinePortAndSid; // "machineName:port:Sid"
// connection state information
private bool _bOneWayRequest = false; // was the request made OneWay?
private bool _bChunked;
private int _contentLength;
private Stream _requestStream; // the request stream that we return from GetRequestStream()
private TcpReadingStream _responseStream; // the stream that we returned from GetResponseStream()
private TcpClientTransportSink _sink = null;
public TcpClientSocketHandler(Socket socket, String machinePortAndSid, Stream stream, TcpClientTransportSink sink) :
base(socket, stream)
{
_machinePortAndSid = machinePortAndSid;
_sink = sink;
} // TcpClientSocketHandler
// Prepare for reading a new request off of the same socket
protected override void PrepareForNewMessage()
{
_requestStream = null;
_responseStream = null;
} // PrepareForNewRequest
public override void OnInputStreamClosed()
{
// make sure we read to the end of the response stream
if (_responseStream != null)
{
_responseStream.ReadToEnd();
_responseStream = null;
}
// return socket to the cache
ReturnToCache();
} // OnInputStreamClosed
public BaseTransportHeaders ReadHeaders()
{
BaseTransportHeaders headers = new BaseTransportHeaders();
UInt16 operation;
ReadVersionAndOperation(out operation);
// At this point, we're always expecting a Reply, so check for that.
if (operation != TcpOperations.Reply)
{
throw new RemotingException(
String.Format(
CultureInfo.CurrentCulture, CoreChannel.GetResourceString("Remoting_Tcp_ExpectingReplyOp"),
operation.ToString(CultureInfo.CurrentCulture)));
}
// content length must come next (may be chunked or a specific length)
ReadContentLength(out _bChunked, out _contentLength);
// read to end of headers
ReadToEndOfHeaders(headers);
return headers;
} // ReadHeaders
public Stream GetRequestStream(IMessage msg, int contentLength,
ITransportHeaders headers)
{
IMethodCallMessage mcm = (IMethodCallMessage)msg;
String uri = mcm.Uri;
_bOneWayRequest = RemotingServices.IsOneWay(mcm.MethodBase);
ChunkedMemoryStream headerStream = new ChunkedMemoryStream(CoreChannel.BufferPool);
// output preamble and version
WritePreambleAndVersion(headerStream);
// output opcode
if (!_bOneWayRequest)
WriteUInt16(TcpOperations.Request, headerStream);
else
WriteUInt16(TcpOperations.OneWayRequest, headerStream);
// output content delimiter style
WriteUInt16(TcpContentDelimiter.ContentLength, headerStream);
WriteInt32(contentLength, headerStream);
// output request uri
WriteUInt16(TcpHeaders.RequestUri, headerStream);
WriteByte(TcpHeaderFormat.CountedString, headerStream);
WriteCountedString(uri, headerStream);
// output rest of headers
WriteHeaders(headers, headerStream);
headerStream.WriteTo(NetStream);
headerStream.Close();
_requestStream = NetStream;
return _requestStream;
} // GetRequestStream
public void SendRequest(IMessage msg, ITransportHeaders headers, Stream contentStream)
{
int requestLength = (int)contentStream.Length;
GetRequestStream(msg, requestLength, headers);
StreamHelper.CopyStream(contentStream, NetStream);
contentStream.Close();
} // SendRequest
public Stream GetResponseStream()
{
if (!_bChunked)
_responseStream = new TcpFixedLengthReadingStream(this, _contentLength);
else
_responseStream = new TcpChunkedReadingStream(this);
return _responseStream;
} // GetResponseStream
public bool OneWayRequest
{
get { return _bOneWayRequest; }
}
public void ReturnToCache()
{
_sink.ClientSocketCache.ReleaseSocket(
_machinePortAndSid, this);
}
} // TcpClientSocketHandler
} // namespace System.Runtime.Remoting.Channels
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
//==========================================================================
// File: TcpClientSocketManager.cs
//
// Summary: Class for managing a socket connection.
//
//=========================================================================
using System;
using System.Collections;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Threading;
using System.Globalization;
namespace System.Runtime.Remoting.Channels.Tcp
{
// A client socket manager instance should encapsulate the socket
// for the purpose of reading a response
internal class TcpClientSocketHandler : TcpSocketHandler
{
// prebaked bytes
private static byte[] s_endOfLineBytes = Encoding.ASCII.GetBytes("\r\n");
private String _machinePortAndSid; // "machineName:port:Sid"
// connection state information
private bool _bOneWayRequest = false; // was the request made OneWay?
private bool _bChunked;
private int _contentLength;
private Stream _requestStream; // the request stream that we return from GetRequestStream()
private TcpReadingStream _responseStream; // the stream that we returned from GetResponseStream()
private TcpClientTransportSink _sink = null;
public TcpClientSocketHandler(Socket socket, String machinePortAndSid, Stream stream, TcpClientTransportSink sink) :
base(socket, stream)
{
_machinePortAndSid = machinePortAndSid;
_sink = sink;
} // TcpClientSocketHandler
// Prepare for reading a new request off of the same socket
protected override void PrepareForNewMessage()
{
_requestStream = null;
_responseStream = null;
} // PrepareForNewRequest
public override void OnInputStreamClosed()
{
// make sure we read to the end of the response stream
if (_responseStream != null)
{
_responseStream.ReadToEnd();
_responseStream = null;
}
// return socket to the cache
ReturnToCache();
} // OnInputStreamClosed
public BaseTransportHeaders ReadHeaders()
{
BaseTransportHeaders headers = new BaseTransportHeaders();
UInt16 operation;
ReadVersionAndOperation(out operation);
// At this point, we're always expecting a Reply, so check for that.
if (operation != TcpOperations.Reply)
{
throw new RemotingException(
String.Format(
CultureInfo.CurrentCulture, CoreChannel.GetResourceString("Remoting_Tcp_ExpectingReplyOp"),
operation.ToString(CultureInfo.CurrentCulture)));
}
// content length must come next (may be chunked or a specific length)
ReadContentLength(out _bChunked, out _contentLength);
// read to end of headers
ReadToEndOfHeaders(headers);
return headers;
} // ReadHeaders
public Stream GetRequestStream(IMessage msg, int contentLength,
ITransportHeaders headers)
{
IMethodCallMessage mcm = (IMethodCallMessage)msg;
String uri = mcm.Uri;
_bOneWayRequest = RemotingServices.IsOneWay(mcm.MethodBase);
ChunkedMemoryStream headerStream = new ChunkedMemoryStream(CoreChannel.BufferPool);
// output preamble and version
WritePreambleAndVersion(headerStream);
// output opcode
if (!_bOneWayRequest)
WriteUInt16(TcpOperations.Request, headerStream);
else
WriteUInt16(TcpOperations.OneWayRequest, headerStream);
// output content delimiter style
WriteUInt16(TcpContentDelimiter.ContentLength, headerStream);
WriteInt32(contentLength, headerStream);
// output request uri
WriteUInt16(TcpHeaders.RequestUri, headerStream);
WriteByte(TcpHeaderFormat.CountedString, headerStream);
WriteCountedString(uri, headerStream);
// output rest of headers
WriteHeaders(headers, headerStream);
headerStream.WriteTo(NetStream);
headerStream.Close();
_requestStream = NetStream;
return _requestStream;
} // GetRequestStream
public void SendRequest(IMessage msg, ITransportHeaders headers, Stream contentStream)
{
int requestLength = (int)contentStream.Length;
GetRequestStream(msg, requestLength, headers);
StreamHelper.CopyStream(contentStream, NetStream);
contentStream.Close();
} // SendRequest
public Stream GetResponseStream()
{
if (!_bChunked)
_responseStream = new TcpFixedLengthReadingStream(this, _contentLength);
else
_responseStream = new TcpChunkedReadingStream(this);
return _responseStream;
} // GetResponseStream
public bool OneWayRequest
{
get { return _bOneWayRequest; }
}
public void ReturnToCache()
{
_sink.ClientSocketCache.ReleaseSocket(
_machinePortAndSid, this);
}
} // TcpClientSocketHandler
} // namespace System.Runtime.Remoting.Channels
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- AttributeEmitter.cs
- UserNameSecurityToken.cs
- RoleManagerModule.cs
- Row.cs
- DataObjectEventArgs.cs
- CollaborationHelperFunctions.cs
- OracleParameter.cs
- WrappedIUnknown.cs
- NonParentingControl.cs
- CodeSnippetStatement.cs
- FactoryId.cs
- NumericUpDownAcceleration.cs
- XPathBinder.cs
- CqlParserHelpers.cs
- SiteIdentityPermission.cs
- PrinterResolution.cs
- BamlReader.cs
- DBSqlParser.cs
- ToolStripPanelRenderEventArgs.cs
- ParserContext.cs
- SimpleHandlerBuildProvider.cs
- EventMappingSettings.cs
- SynchronizedCollection.cs
- UdpTransportSettingsElement.cs
- CharUnicodeInfo.cs
- WebPartCollection.cs
- FormViewRow.cs
- BCryptSafeHandles.cs
- GACMembershipCondition.cs
- FactoryGenerator.cs
- ReferenceEqualityComparer.cs
- BrowserTree.cs
- ProfileParameter.cs
- Registry.cs
- LinqDataSourceInsertEventArgs.cs
- Misc.cs
- DataGridViewRowHeaderCell.cs
- XPathDocumentBuilder.cs
- TemplateBamlRecordReader.cs
- SocketAddress.cs
- GPStream.cs
- FrugalList.cs
- StrokeDescriptor.cs
- ExpandableObjectConverter.cs
- DocobjHost.cs
- PolyQuadraticBezierSegment.cs
- DataGridViewRowConverter.cs
- CommonRemoteMemoryBlock.cs
- ColorTransform.cs
- EndpointAddressProcessor.cs
- UnknownExceptionActionHelper.cs
- AssemblyCache.cs
- GZipStream.cs
- TraceAsyncResult.cs
- EmbeddedMailObjectsCollection.cs
- LocatorPartList.cs
- VirtualPathExtension.cs
- RecordManager.cs
- ExecutionContext.cs
- RestHandlerFactory.cs
- ReadOnlyObservableCollection.cs
- EntitySet.cs
- MarkupCompilePass1.cs
- RenamedEventArgs.cs
- MenuItemBinding.cs
- KnowledgeBase.cs
- SessionIDManager.cs
- CompiledAction.cs
- CollectionContainer.cs
- Classification.cs
- Panel.cs
- LeaseManager.cs
- PluggableProtocol.cs
- TransportReplyChannelAcceptor.cs
- precedingsibling.cs
- SourceFileBuildProvider.cs
- Message.cs
- PerfProviderCollection.cs
- GeometryHitTestParameters.cs
- MemberInfoSerializationHolder.cs
- WhileDesigner.cs
- SafeSecurityHandles.cs
- ItemsPanelTemplate.cs
- SamlAttribute.cs
- TextLineResult.cs
- DeferredTextReference.cs
- SelectionItemPattern.cs
- XmlAttributes.cs
- MetadataExporter.cs
- PlatformCulture.cs
- PopupControlService.cs
- Bezier.cs
- DbConnectionFactory.cs
- ErrorReporting.cs
- _NestedSingleAsyncResult.cs
- LayoutInformation.cs
- AdCreatedEventArgs.cs
- Activator.cs
- RuleSettings.cs
- ZipIOEndOfCentralDirectoryBlock.cs