Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / Net / System / _UncName.cs / 1 / _UncName.cs
#if !PLATFORM_UNIX //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System.Globalization; namespace System { // The class designed as to keep minimal the working set of Uri class. // The idea is to stay with static helper methods and strings internal class UncNameHelper { // fields internal const int MaximumInternetNameLength = 256; private UncNameHelper() { } // properties // methods internal static string ParseCanonicalName(string str, int start, int end, ref bool loopback) { return DomainNameHelper.ParseCanonicalName(str, start, end, ref loopback); } // // IsValid // // // ATTN: This class has been re-designed as to conform to XP+ UNC hostname format // It is now similar to DNS name but can contain Unicode characters as well // This class will be removed and replaced by IDN specification later, // but for now we violate URI RFC cause we never escape Unicode characters on the wire // For the same reason we never unescape UNC host names since we never accept // them in escaped format. // // // Valid UNC server name chars: // a Unicode Letter (not allowed as the only in a segment) // a Latin-1 digit // '-' 45 0x2D // '.' 46 0x2E (only as a host domain delimiter) // '_' 95 0x5F // // // Assumption is the caller will check on the resulting name length // Remarks: MUST NOT be used unless all input indexes are are verified and trusted. internal unsafe static bool IsValid(char* name, ushort start, ref int returnedEnd, bool notImplicitFile) { ushort end = (ushort) returnedEnd; if (start==end) return false; // // First segment could consist of only '_' or '-' but it cannot be all digits or empty // bool validShortName = false; ushort i = start; for (; i < end; ++i) { if (name[i] == '/' || name[i] == '\\' || (notImplicitFile && (name[i] == ':' || name[i] == '?' || name[i] == '#'))) { end = i; break; } else if (name[i] == '.') { ++i; break; } if (Char.IsLetter(name[i]) || name[i] == '-' || name[i] == '_') { validShortName = true; } else if (name[i] < '0' || name[i] > '9') return false; } if (!validShortName) return false; // // Subsequent segments must start with a letter or a digit // for (; i < end; ++i) { if (name[i] == '/' || name[i] == '\\' || (notImplicitFile && (name[i] == ':' || name[i] == '?' || name[i] == '#'))) { end = i; break; } else if (name[i] == '.') { if (!validShortName || ((i-1) >= start && name[i-1] == '.')) return false; validShortName = false; } else if (name[i] == '-' || name[i] == '_') { if (!validShortName) return false; } else if (Char.IsLetter(name[i]) || (name[i] >= '0' && name[i] <= '9')) { if (!validShortName) validShortName = true; } else return false; } // last segment can end with the dot if (((i-1) >= start && name[i-1] == '.')) validShortName = true; if (!validShortName) return false; // caller must check for (end - start <= MaximumInternetNameLength) returnedEnd = end; return true; } } } #endif // !PLATFORM_UNIX // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. #if !PLATFORM_UNIX //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- using System.Globalization; namespace System { // The class designed as to keep minimal the working set of Uri class. // The idea is to stay with static helper methods and strings internal class UncNameHelper { // fields internal const int MaximumInternetNameLength = 256; private UncNameHelper() { } // properties // methods internal static string ParseCanonicalName(string str, int start, int end, ref bool loopback) { return DomainNameHelper.ParseCanonicalName(str, start, end, ref loopback); } // // IsValid // // // ATTN: This class has been re-designed as to conform to XP+ UNC hostname format // It is now similar to DNS name but can contain Unicode characters as well // This class will be removed and replaced by IDN specification later, // but for now we violate URI RFC cause we never escape Unicode characters on the wire // For the same reason we never unescape UNC host names since we never accept // them in escaped format. // // // Valid UNC server name chars: // a Unicode Letter (not allowed as the only in a segment) // a Latin-1 digit // '-' 45 0x2D // '.' 46 0x2E (only as a host domain delimiter) // '_' 95 0x5F // // // Assumption is the caller will check on the resulting name length // Remarks: MUST NOT be used unless all input indexes are are verified and trusted. internal unsafe static bool IsValid(char* name, ushort start, ref int returnedEnd, bool notImplicitFile) { ushort end = (ushort) returnedEnd; if (start==end) return false; // // First segment could consist of only '_' or '-' but it cannot be all digits or empty // bool validShortName = false; ushort i = start; for (; i < end; ++i) { if (name[i] == '/' || name[i] == '\\' || (notImplicitFile && (name[i] == ':' || name[i] == '?' || name[i] == '#'))) { end = i; break; } else if (name[i] == '.') { ++i; break; } if (Char.IsLetter(name[i]) || name[i] == '-' || name[i] == '_') { validShortName = true; } else if (name[i] < '0' || name[i] > '9') return false; } if (!validShortName) return false; // // Subsequent segments must start with a letter or a digit // for (; i < end; ++i) { if (name[i] == '/' || name[i] == '\\' || (notImplicitFile && (name[i] == ':' || name[i] == '?' || name[i] == '#'))) { end = i; break; } else if (name[i] == '.') { if (!validShortName || ((i-1) >= start && name[i-1] == '.')) return false; validShortName = false; } else if (name[i] == '-' || name[i] == '_') { if (!validShortName) return false; } else if (Char.IsLetter(name[i]) || (name[i] >= '0' && name[i] <= '9')) { if (!validShortName) validShortName = true; } else return false; } // last segment can end with the dot if (((i-1) >= start && name[i-1] == '.')) validShortName = true; if (!validShortName) return false; // caller must check for (end - start <= MaximumInternetNameLength) returnedEnd = end; return true; } } } #endif // !PLATFORM_UNIX // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DesigntimeLicenseContextSerializer.cs
- RegistryDataKey.cs
- EdgeProfileValidation.cs
- ObjectViewQueryResultData.cs
- TableFieldsEditor.cs
- ModelService.cs
- ContextMenu.cs
- HealthMonitoringSectionHelper.cs
- TextEditorCharacters.cs
- Constraint.cs
- DelegatedStream.cs
- HostSecurityManager.cs
- AlphaSortedEnumConverter.cs
- SafeNativeMethods.cs
- WindowsListView.cs
- NavigatingCancelEventArgs.cs
- HierarchicalDataSourceControl.cs
- JoinGraph.cs
- OleDbMetaDataFactory.cs
- StandardRuntimeEnumValidator.cs
- NavigationExpr.cs
- XmlSchemaAny.cs
- TdsEnums.cs
- HashHelpers.cs
- Publisher.cs
- AggregationMinMaxHelpers.cs
- InteropDesigner.xaml.cs
- AssemblySettingAttributes.cs
- AutomationElementIdentifiers.cs
- MatrixValueSerializer.cs
- MetadataItemEmitter.cs
- HttpHeaderCollection.cs
- ObjectConverter.cs
- ConsoleTraceListener.cs
- ListSourceHelper.cs
- GlobalProxySelection.cs
- ReferencedAssemblyResolver.cs
- CompModSwitches.cs
- ApplicationDirectoryMembershipCondition.cs
- SmiMetaDataProperty.cs
- GCHandleCookieTable.cs
- XmlElementAttribute.cs
- PartialCachingControl.cs
- AsyncContentLoadedEventArgs.cs
- SafeFindHandle.cs
- SendingRequestEventArgs.cs
- CursorConverter.cs
- SqlBooleanMismatchVisitor.cs
- TransactionState.cs
- XsdCachingReader.cs
- SslStreamSecurityUpgradeProvider.cs
- mediaeventshelper.cs
- SimpleApplicationHost.cs
- BuildManager.cs
- BaseUriHelper.cs
- UInt64Storage.cs
- Matrix3D.cs
- DocumentGridPage.cs
- BufferedResponseStream.cs
- TimeBoundedCache.cs
- DetailsViewDeletedEventArgs.cs
- BodyGlyph.cs
- Package.cs
- ApplicationId.cs
- XmlLoader.cs
- DecoderFallback.cs
- NavigationProperty.cs
- WeakEventManager.cs
- Win32MouseDevice.cs
- DataGridViewTopRowAccessibleObject.cs
- ReferenceSchema.cs
- DocumentViewerBaseAutomationPeer.cs
- FillErrorEventArgs.cs
- DEREncoding.cs
- SafeNativeMethods.cs
- SByteStorage.cs
- HttpCachePolicy.cs
- CreateRefExpr.cs
- PartialTrustVisibleAssemblyCollection.cs
- InputLanguageCollection.cs
- BufferedReadStream.cs
- CacheHelper.cs
- XmlUtil.cs
- TransformerInfoCollection.cs
- HttpDebugHandler.cs
- XmlSchemaExternal.cs
- ExpressionList.cs
- BulletedListDesigner.cs
- CollectionChangedEventManager.cs
- ByteStream.cs
- SmtpFailedRecipientException.cs
- DataGridHeaderBorder.cs
- DataTableMapping.cs
- manifestimages.cs
- SoapAttributeAttribute.cs
- ModelFunctionTypeElement.cs
- Thread.cs
- XmlIgnoreAttribute.cs
- XmlSchemaSimpleContent.cs
- IntersectQueryOperator.cs