|
1 | 1 | using System.IO; |
2 | | -using System.Linq; |
3 | 2 | using Renci.SshNet.Common; |
4 | 3 | using System.Globalization; |
5 | 4 | using Renci.SshNet.Abstractions; |
@@ -31,13 +30,22 @@ protected override int BufferCapacity |
31 | 30 | /// </summary> |
32 | 31 | protected override void WriteBytes(SshDataStream stream) |
33 | 32 | { |
34 | | - var messageAttribute = GetType().GetCustomAttributes<MessageAttribute>(true).FirstOrDefault(); |
35 | | - |
36 | | - if (messageAttribute == null) |
37 | | - throw new SshException(string.Format(CultureInfo.CurrentCulture, "Type '{0}' is not a valid message type.", GetType().AssemblyQualifiedName)); |
| 33 | + var enumerator = GetType().GetCustomAttributes<MessageAttribute>(true).GetEnumerator(); |
| 34 | + try |
| 35 | + { |
| 36 | + if (!enumerator.MoveNext()) |
| 37 | + { |
| 38 | + throw new SshException(string.Format(CultureInfo.CurrentCulture, "Type '{0}' is not a valid message type.", GetType().AssemblyQualifiedName)); |
| 39 | + } |
38 | 40 |
|
39 | | - stream.WriteByte(messageAttribute.Number); |
40 | | - base.WriteBytes(stream); |
| 41 | + var messageAttribute = enumerator.Current; |
| 42 | + stream.WriteByte(messageAttribute.Number); |
| 43 | + base.WriteBytes(stream); |
| 44 | + } |
| 45 | + finally |
| 46 | + { |
| 47 | + enumerator.Dispose(); |
| 48 | + } |
41 | 49 | } |
42 | 50 |
|
43 | 51 | internal byte[] GetPacket(byte paddingMultiplier, Compressor compressor) |
@@ -155,12 +163,20 @@ private static byte GetPaddingLength(byte paddingMultiplier, long packetLength) |
155 | 163 | /// </returns> |
156 | 164 | public override string ToString() |
157 | 165 | { |
158 | | - var messageAttribute = GetType().GetCustomAttributes<MessageAttribute>(true).SingleOrDefault(); |
159 | | - |
160 | | - if (messageAttribute == null) |
161 | | - return string.Format(CultureInfo.CurrentCulture, "'{0}' without Message attribute.", GetType().FullName); |
| 166 | + var enumerator = GetType().GetCustomAttributes<MessageAttribute>(true).GetEnumerator(); |
| 167 | + try |
| 168 | + { |
| 169 | + if (!enumerator.MoveNext()) |
| 170 | + { |
| 171 | + return string.Format(CultureInfo.CurrentCulture, "'{0}' without Message attribute.", GetType().FullName); |
| 172 | + } |
162 | 173 |
|
163 | | - return messageAttribute.Name; |
| 174 | + return enumerator.Current.Name; |
| 175 | + } |
| 176 | + finally |
| 177 | + { |
| 178 | + enumerator.Dispose(); |
| 179 | + } |
164 | 180 | } |
165 | 181 |
|
166 | 182 | /// <summary> |
|
0 commit comments