@@ -44,7 +44,7 @@ namespace WinDivertSharp
44
44
/// Represents an IPV6 header.
45
45
/// </summary>
46
46
[ StructLayout ( LayoutKind . Sequential ) ]
47
- public unsafe struct IPv6Header
47
+ public struct IPv6Header
48
48
{
49
49
/// TrafficClass0 : 4
50
50
/// Version : 4
@@ -75,8 +75,10 @@ public unsafe struct IPv6Header
75
75
/// <summary>
76
76
/// Private member for <see cref="SrcAddr"/>
77
77
/// </summary>
78
- //[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4, ArraySubType = UnmanagedType.U4)]
79
- private fixed uint _srcAddr [ 4 ] ;
78
+ private uint _srcAddrA ;
79
+ private uint _srcAddrB ;
80
+ private uint _srcAddrC ;
81
+ private uint _srcAddrD ;
80
82
81
83
/// <summary>
82
84
/// Gets or sets the source IP address.
@@ -88,49 +90,46 @@ public IPAddress SrcAddr
88
90
{
89
91
get
90
92
{
91
- fixed ( uint * addr = this . _srcAddr )
92
- {
93
- var b1 = BitConverter . GetBytes ( addr [ 0 ] ) ;
94
- var b2 = BitConverter . GetBytes ( addr [ 1 ] ) ;
95
- var b3 = BitConverter . GetBytes ( addr [ 2 ] ) ;
96
- var b4 = BitConverter . GetBytes ( addr [ 3 ] ) ;
97
- var bytes = new byte [ ] {
93
+ var b1 = BitConverter . GetBytes ( _srcAddrA ) ;
94
+ var b2 = BitConverter . GetBytes ( _srcAddrB ) ;
95
+ var b3 = BitConverter . GetBytes ( _srcAddrC ) ;
96
+ var b4 = BitConverter . GetBytes ( _srcAddrD ) ;
97
+ var bytes = new byte [ ] {
98
98
b1 [ 0 ] , b1 [ 1 ] , b1 [ 2 ] , b1 [ 3 ] ,
99
99
b2 [ 0 ] , b2 [ 1 ] , b2 [ 2 ] , b2 [ 3 ] ,
100
100
b3 [ 0 ] , b3 [ 1 ] , b3 [ 2 ] , b3 [ 3 ] ,
101
101
b4 [ 0 ] , b4 [ 1 ] , b4 [ 2 ] , b4 [ 3 ]
102
102
} ;
103
103
104
- return new IPAddress ( bytes ) ;
105
- }
104
+ return new IPAddress ( bytes ) ;
106
105
}
107
106
108
107
set
109
108
{
110
- fixed ( uint * addr = this . _srcAddr )
111
- {
112
- var valueBytes = value . GetAddressBytes ( ) ;
109
+ var valueBytes = value . GetAddressBytes ( ) ;
113
110
114
- Debug . Assert ( valueBytes . Length == 16 , "Not a valid IPV6 address." ) ;
111
+ Debug . Assert ( valueBytes . Length == 16 , "Not a valid IPV6 address." ) ;
115
112
116
- if ( valueBytes . Length != 16 )
117
- {
118
- throw new ArgumentException ( "Not a valid IPV6 address." , nameof ( SrcAddr ) ) ;
119
- }
120
-
121
- addr [ 0 ] = BitConverter . ToUInt32 ( valueBytes , 0 ) ;
122
- addr [ 1 ] = BitConverter . ToUInt32 ( valueBytes , 4 ) ;
123
- addr [ 2 ] = BitConverter . ToUInt32 ( valueBytes , 8 ) ;
124
- addr [ 3 ] = BitConverter . ToUInt32 ( valueBytes , 12 ) ;
113
+ if ( valueBytes . Length != 16 )
114
+ {
115
+ throw new ArgumentException ( "Not a valid IPV6 address." , nameof ( SrcAddr ) ) ;
125
116
}
117
+
118
+ _srcAddrA = BitConverter . ToUInt32 ( valueBytes , 0 ) ;
119
+ _srcAddrB = BitConverter . ToUInt32 ( valueBytes , 4 ) ;
120
+ _srcAddrC = BitConverter . ToUInt32 ( valueBytes , 8 ) ;
121
+ _srcAddrD = BitConverter . ToUInt32 ( valueBytes , 12 ) ;
126
122
}
127
123
}
128
124
129
125
/// <summary>
130
126
/// Private member for <see cref="DstAddr"/>
131
127
/// </summary>
132
128
//[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4, ArraySubType = UnmanagedType.U4)]
133
- private fixed uint _dstAddr [ 4 ] ;
129
+ private uint _dstAddrA ;
130
+ private uint _dstAddrB ;
131
+ private uint _dstAddrC ;
132
+ private uint _dstAddrD ;
134
133
135
134
/// <summary>
136
135
/// Gets or sets the destination IP address.
@@ -142,41 +141,35 @@ public IPAddress DstAddr
142
141
{
143
142
get
144
143
{
145
- fixed ( uint * addr = this . _dstAddr )
146
- {
147
- var b1 = BitConverter . GetBytes ( addr [ 0 ] ) ;
148
- var b2 = BitConverter . GetBytes ( addr [ 1 ] ) ;
149
- var b3 = BitConverter . GetBytes ( addr [ 2 ] ) ;
150
- var b4 = BitConverter . GetBytes ( addr [ 3 ] ) ;
151
- var bytes = new byte [ ] {
144
+ var b1 = BitConverter . GetBytes ( _dstAddrA ) ;
145
+ var b2 = BitConverter . GetBytes ( _dstAddrB ) ;
146
+ var b3 = BitConverter . GetBytes ( _dstAddrC ) ;
147
+ var b4 = BitConverter . GetBytes ( _dstAddrD ) ;
148
+ var bytes = new byte [ ] {
152
149
b1 [ 0 ] , b1 [ 1 ] , b1 [ 2 ] , b1 [ 3 ] ,
153
150
b2 [ 0 ] , b2 [ 1 ] , b2 [ 2 ] , b2 [ 3 ] ,
154
151
b3 [ 0 ] , b3 [ 1 ] , b3 [ 2 ] , b3 [ 3 ] ,
155
152
b4 [ 0 ] , b4 [ 1 ] , b4 [ 2 ] , b4 [ 3 ]
156
153
} ;
157
154
158
- return new IPAddress ( bytes ) ;
159
- }
155
+ return new IPAddress ( bytes ) ;
160
156
}
161
157
162
158
set
163
159
{
164
- fixed ( uint * addr = this . _dstAddr )
165
- {
166
- var valueBytes = value . GetAddressBytes ( ) ;
160
+ var valueBytes = value . GetAddressBytes ( ) ;
167
161
168
- Debug . Assert ( valueBytes . Length == 16 , "Not a valid IPV6 address." ) ;
162
+ Debug . Assert ( valueBytes . Length == 16 , "Not a valid IPV6 address." ) ;
169
163
170
- if ( valueBytes . Length != 16 )
171
- {
172
- throw new ArgumentException ( "Not a valid IPV6 address." , nameof ( SrcAddr ) ) ;
173
- }
174
-
175
- addr [ 0 ] = BitConverter . ToUInt32 ( valueBytes , 0 ) ;
176
- addr [ 1 ] = BitConverter . ToUInt32 ( valueBytes , 4 ) ;
177
- addr [ 2 ] = BitConverter . ToUInt32 ( valueBytes , 8 ) ;
178
- addr [ 3 ] = BitConverter . ToUInt32 ( valueBytes , 12 ) ;
164
+ if ( valueBytes . Length != 16 )
165
+ {
166
+ throw new ArgumentException ( "Not a valid IPV6 address." , nameof ( SrcAddr ) ) ;
179
167
}
168
+
169
+ _dstAddrA = BitConverter . ToUInt32 ( valueBytes , 0 ) ;
170
+ _dstAddrB = BitConverter . ToUInt32 ( valueBytes , 4 ) ;
171
+ _dstAddrC = BitConverter . ToUInt32 ( valueBytes , 8 ) ;
172
+ _dstAddrD = BitConverter . ToUInt32 ( valueBytes , 12 ) ;
180
173
}
181
174
}
182
175
0 commit comments