/*++ Copyright (c) 1998-2002 Microsoft Corporation Module Name: C14np.h Abstract: URL canonicalization (c14n) routines Author: George V. Reilly (GeorgeRe) 10-Apr-2002 Revision History: --*/ #ifndef _C14NP_H_ #define _C14NP_H_ typedef NTSTATUS (*PFN_POPCHAR_HOSTNAME)( IN PCUCHAR pSourceChar, IN ULONG SourceLength, OUT PULONG pUnicodeChar, OUT PULONG pBytesToSkip ); NTSTATUS HttppPopCharHostNameUtf8( IN PCUCHAR pSourceChar, IN ULONG SourceLength, OUT PULONG pUnicodeChar, OUT PULONG pBytesToSkip ); NTSTATUS HttppPopCharHostNameDbcs( IN PCUCHAR pSourceChar, IN ULONG SourceLength, OUT PULONG pUnicodeChar, OUT PULONG pBytesToSkip ); NTSTATUS HttppPopCharHostNameAnsi( IN PCUCHAR pSourceChar, IN ULONG SourceLength, OUT PULONG pUnicodeChar, OUT PULONG pBytesToSkip ); typedef NTSTATUS (*PFN_POPCHAR_ABSPATH)( IN PCUCHAR pSourceChar, IN ULONG SourceLength, IN BOOLEAN PercentUAllowed, IN BOOLEAN AllowRestrictedChars, OUT PULONG pUnicodeChar, OUT PULONG pBytesToSkip ); NTSTATUS HttppPopCharAbsPathUtf8( IN PCUCHAR pSourceChar, IN ULONG SourceLength, IN BOOLEAN PercentUAllowed, IN BOOLEAN AllowRestrictedChars, OUT PULONG pUnicodeChar, OUT PULONG pBytesToSkip ); NTSTATUS HttppPopCharAbsPathDbcs( IN PCUCHAR pSourceChar, IN ULONG SourceLength, IN BOOLEAN PercentUAllowed, IN BOOLEAN AllowRestrictedChars, OUT PULONG pUnicodeChar, OUT PULONG pBytesToSkip ); NTSTATUS HttppPopCharAbsPathAnsi( IN PCUCHAR pSourceChar, IN ULONG SourceLength, IN BOOLEAN PercentUAllowed, IN BOOLEAN AllowRestrictedChars, OUT PULONG pUnicodeChar, OUT PULONG pBytesToSkip ); NTSTATUS HttppPopCharQueryString( IN PCUCHAR pSourceChar, IN ULONG SourceLength, IN BOOLEAN PercentUAllowed, IN BOOLEAN AllowRestrictedChars, OUT PULONG pUnicodeChar, OUT PULONG pBytesToSkip ); NTSTATUS HttppCopyHostByType( IN URL_ENCODING_TYPE UrlEncoding, OUT PWSTR pDestination, IN PCUCHAR pSource, IN ULONG SourceLength, OUT PULONG pBytesCopied ); NTSTATUS HttppCopyUrlByType( IN PURL_C14N_CONFIG pCfg, IN URL_ENCODING_TYPE UrlEncoding, OUT PWSTR pDestination, IN PCUCHAR pSource, IN ULONG SourceLength, OUT PULONG pBytesCopied ); NTSTATUS HttppCleanAndCopyUrlByType( IN PURL_C14N_CONFIG pCfg, IN URL_ENCODING_TYPE UrlEncoding, IN URL_PART UrlPart, OUT PWSTR pDestination, IN PCUCHAR pSource, IN ULONG SourceLength, OUT PULONG pBytesCopied, OUT PWSTR * ppQueryString OPTIONAL ); NTSTATUS HttppParseIPv6Address( IN PCWSTR pBuffer, IN ULONG BufferLength, IN BOOLEAN ScopeIdAllowed, OUT PSOCKADDR_IN6 pSockAddr6, OUT PCWSTR* ppEnd ); ULONG HttppPrintIpAddressW( IN PSOCKADDR pSockAddr, OUT PWSTR pBuffer ); // // Enumerations for the state machines in HttppCleanAndCopyUrlByType() // and HttpParseUrl() that handle directory-relative processing for // "//", "/./", and "/../". // typedef enum { ACTION_NOTHING, // eat the character ACTION_EMIT_CH, // emit the character ACTION_EMIT_DOT_CH, // emit "." and the character ACTION_EMIT_DOT_DOT_CH, // emit ".." and the character ACTION_BACKUP, // backup to previous segment: // "/x/y/../z" -> "/x/z" ACTION_MAX } URL_ACTION; typedef enum { URL_STATE_START, // default state URL_STATE_SLASH, // seen "/" URL_STATE_SLASH_DOT, // seen "/." URL_STATE_SLASH_DOT_DOT, // seen "/.." URL_STATE_END, // end state URL_STATE_ERROR, // error state URL_STATE_MAX } URL_STATE; typedef enum { URL_TOKEN_OTHER, // everything else URL_TOKEN_DOT, // got a '.' URL_TOKEN_EOS, // End of String URL_TOKEN_SLASH, // got a '/' URL_TOKEN_MAX } URL_STATE_TOKEN; #if DBG PCSTR HttppUrlActionToString( URL_ACTION Action); PCSTR HttppUrlStateToString( URL_STATE UrlState); PCSTR HttppUrlTokenToString( URL_STATE_TOKEN UrlToken); #endif // DBG #endif // _C14NP_H_