


# IncomingMessage class













## Constructors

[IncomingMessage](../package-fidl_fidl/IncomingMessage/IncomingMessage.md) (dynamic data, List&lt;[HandleInfo](../zircon/HandleInfo-class.md)> handleInfos)

   

[IncomingMessage.fromOutgoingMessage](../package-fidl_fidl/IncomingMessage/IncomingMessage.fromOutgoingMessage.md) ([OutgoingMessage](../package-fidl_fidl/OutgoingMessage-class.md) outgoingMessage)

   

[IncomingMessage.fromReadEtcResult](../package-fidl_fidl/IncomingMessage/IncomingMessage.fromReadEtcResult.md) ([ReadEtcResult](../zircon/ReadEtcResult-class.md) result)

   


## Properties

##### [data](../package-fidl_fidl/IncomingMessage/data.md) &#8594; ByteData



  
_<span class="feature">final</span><span class="feature">inherited</span>_



##### [handleInfos](../package-fidl_fidl/IncomingMessage/handleInfos.md) &#8594; List&lt;[HandleInfo](../zircon/HandleInfo-class.md)>



  
_<span class="feature">final</span>_



##### [hashCode](../package-fidl_fidl/IncomingMessage/hashCode.md) &#8594; int



The hash code for this object.  
_<span class="feature">read-only</span><span class="feature">inherited</span>_



##### [magic](../package-fidl_fidl/IncomingMessage/magic.md) &#8594; int



  
_<span class="feature">read-only</span><span class="feature">inherited</span>_



##### [ordinal](../package-fidl_fidl/IncomingMessage/ordinal.md) &#8594; int



  
_<span class="feature">read-only</span><span class="feature">inherited</span>_



##### [runtimeType](../package-fidl_fidl/IncomingMessage/runtimeType.md) &#8594; Type



A representation of the runtime type of the object.  
_<span class="feature">read-only</span><span class="feature">inherited</span>_



##### [strictness](../package-fidl_fidl/IncomingMessage/strictness.md) &#8594; [CallStrictness](../package-fidl_fidl/CallStrictness.md)



  
_<span class="feature">read-only</span><span class="feature">inherited</span>_



##### [txid](../package-fidl_fidl/IncomingMessage/txid.md) &#8594; int



  
_<span class="feature">read-only</span><span class="feature">inherited</span>_



##### [wireFormat](../package-fidl_fidl/IncomingMessage/wireFormat.md) &#8594; [WireFormat](../package-fidl_fidl/WireFormat.md)



  
_<span class="feature">read-only</span><span class="feature">inherited</span>_





## Methods

##### [closeHandles](../package-fidl_fidl/IncomingMessage/closeHandles.md)() void



  




##### [hexDump](../package-fidl_fidl/IncomingMessage/hexDump.md)() void



  
_<span class="feature">inherited</span>_



##### [isCompatible](../package-fidl_fidl/IncomingMessage/isCompatible.md)() bool



  
_<span class="feature">inherited</span>_



##### [noSuchMethod](../package-fidl_fidl/IncomingMessage/noSuchMethod.md)(Invocation invocation) dynamic



Invoked when a non-existent method or property is accessed.  
_<span class="feature">inherited</span>_



##### [toString](../package-fidl_fidl/IncomingMessage/toString.md)() String



A string representation of this object.  
_<span class="feature">override</span>_





## Operators

##### [operator ==](../package-fidl_fidl/IncomingMessage/operator_equals.md)(Object other) bool



The equality operator.  
_<span class="feature">inherited</span>_















