URL encoding/decoding added
API level changed to 13
This commit is contained in:
parent
e25bce487b
commit
c21aa27e62
@ -79,22 +79,22 @@ s$(MSIBUILD_LENGTH_ID) s$(MSIBUILD_LENGTH_ID) l255 i4 S$(MSIBUILD_LENGTH_ID) S20
|
|||||||
File File
|
File File
|
||||||
!IF "$(PLAT)" == "Win32"
|
!IF "$(PLAT)" == "Win32"
|
||||||
!IF "$(CFG)" == "Release"
|
!IF "$(CFG)" == "Release"
|
||||||
filewxExtend.dll.Win32 compwxExtend.dll.Win32 WXEXTE~2.DLL|wxExtend12u_vc100.dll 0 0 1536 1
|
filewxExtend.dll.Win32 compwxExtend.dll.Win32 WXEXTE~2.DLL|wxExtend13u_vc100.dll 0 0 1536 1
|
||||||
!ENDIF
|
!ENDIF
|
||||||
!IF "$(CFG)" == "Debug"
|
!IF "$(CFG)" == "Debug"
|
||||||
filewxExtend.dll.Win32 compwxExtend.dll.Win32 WXEXTE~4.DLL|wxExtend12ud_vc100.dll 0 0 1536 1
|
filewxExtend.dll.Win32 compwxExtend.dll.Win32 WXEXTE~4.DLL|wxExtend13ud_vc100.dll 0 0 1536 1
|
||||||
!ENDIF
|
!ENDIF
|
||||||
!ENDIF
|
!ENDIF
|
||||||
!IF "$(PLAT)" == "x64"
|
!IF "$(PLAT)" == "x64"
|
||||||
!IF "$(CFG)" == "Release"
|
!IF "$(CFG)" == "Release"
|
||||||
filewxExtend.dll.x64 compwxExtend.dll.x64 WXEXTE~6.DLL|wxExtend12u_vc100_x64.dll 0 0 1536 1
|
filewxExtend.dll.x64 compwxExtend.dll.x64 WXEXTE~6.DLL|wxExtend13u_vc100_x64.dll 0 0 1536 1
|
||||||
!ENDIF
|
!ENDIF
|
||||||
!IF "$(CFG)" == "Debug"
|
!IF "$(CFG)" == "Debug"
|
||||||
filewxExtend.dll.x64 compwxExtend.dll.x64 WXEXTE~8.DLL|wxExtend12ud_vc100_x64.dll 0 0 1536 1
|
filewxExtend.dll.x64 compwxExtend.dll.x64 WXEXTE~8.DLL|wxExtend13ud_vc100_x64.dll 0 0 1536 1
|
||||||
!ENDIF
|
!ENDIF
|
||||||
!ENDIF
|
!ENDIF
|
||||||
!IF "$(LANG)" == "Sl"
|
!IF "$(LANG)" == "Sl"
|
||||||
filewxExtend.mo.sl_SI compwxExtend.mo.sl_SI WXEXTE~1.MO|wxExtend12.mo 0 1060 0 1
|
filewxExtend.mo.sl_SI compwxExtend.mo.sl_SI WXEXTE~1.MO|wxExtend13.mo 0 1060 0 1
|
||||||
!ENDIF
|
!ENDIF
|
||||||
<<NOKEEP
|
<<NOKEEP
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<ImportGroup Label="PropertySheets" />
|
<ImportGroup Label="PropertySheets" />
|
||||||
<PropertyGroup Label="UserMacros">
|
<PropertyGroup Label="UserMacros">
|
||||||
<wxExtendVersion>12</wxExtendVersion>
|
<wxExtendVersion>13</wxExtendVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutDir>..\..\..\output\$(Platform).$(Configuration)\</OutDir>
|
<OutDir>..\..\..\output\$(Platform).$(Configuration)\</OutDir>
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\url.cpp" />
|
||||||
<ClCompile Include="..\src\valhex.cpp" />
|
<ClCompile Include="..\src\valhex.cpp" />
|
||||||
<ClCompile Include="..\src\xml.cpp" />
|
<ClCompile Include="..\src\xml.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
@ -40,6 +41,7 @@
|
|||||||
<ClInclude Include="..\include\wxex\hex.h" />
|
<ClInclude Include="..\include\wxex\hex.h" />
|
||||||
<ClInclude Include="..\include\wxex\persist\auimanager.h" />
|
<ClInclude Include="..\include\wxex\persist\auimanager.h" />
|
||||||
<ClInclude Include="..\include\wxex\persist\dialog.h" />
|
<ClInclude Include="..\include\wxex\persist\dialog.h" />
|
||||||
|
<ClInclude Include="..\include\wxex\url.h" />
|
||||||
<ClInclude Include="..\include\wxex\valhex.h" />
|
<ClInclude Include="..\include\wxex\valhex.h" />
|
||||||
<ClInclude Include="..\include\wxex\xml.h" />
|
<ClInclude Include="..\include\wxex\xml.h" />
|
||||||
<ClInclude Include="..\src\stdafx.h" />
|
<ClInclude Include="..\src\stdafx.h" />
|
||||||
|
@ -43,6 +43,9 @@
|
|||||||
<ClCompile Include="..\src\valhex.cpp">
|
<ClCompile Include="..\src\valhex.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\url.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\src\stdafx.h">
|
<ClInclude Include="..\src\stdafx.h">
|
||||||
@ -75,6 +78,9 @@
|
|||||||
<ClInclude Include="..\include\wxex\valhex.h">
|
<ClInclude Include="..\include\wxex\valhex.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\include\wxex\url.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\locale\wxExtend.pot">
|
<None Include="..\locale\wxExtend.pot">
|
||||||
|
@ -23,17 +23,17 @@
|
|||||||
///
|
///
|
||||||
/// wxExtend Version
|
/// wxExtend Version
|
||||||
///
|
///
|
||||||
#define wxEXTEND_VERSION 0x01020000
|
#define wxEXTEND_VERSION 0x01030000
|
||||||
|
|
||||||
#define wxEXTEND_VERSION_MAJ 1
|
#define wxEXTEND_VERSION_MAJ 1
|
||||||
#define wxEXTEND_VERSION_MIN 2
|
#define wxEXTEND_VERSION_MIN 3
|
||||||
#define wxEXTEND_VERSION_REV 0
|
#define wxEXTEND_VERSION_REV 0
|
||||||
#define wxEXTEND_VERSION_BUILD 0
|
#define wxEXTEND_VERSION_BUILD 0
|
||||||
|
|
||||||
#define wxEXTEND_VERSION_STR "1.2"
|
#define wxEXTEND_VERSION_STR "1.3"
|
||||||
#define wxEXTEND_BUILD_YEAR_STR "2016"
|
#define wxEXTEND_BUILD_YEAR_STR "2016"
|
||||||
|
|
||||||
#define wxExtendVersion "12"
|
#define wxExtendVersion "13"
|
||||||
|
|
||||||
|
|
||||||
#if !defined(RC_INVOKED) && !defined(MIDL_PASS)
|
#if !defined(RC_INVOKED) && !defined(MIDL_PASS)
|
||||||
|
@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
#include "wx/string.h"
|
#include "wx/string.h"
|
||||||
#include "wx/buffer.h"
|
#include "wx/buffer.h"
|
||||||
|
|
||||||
@ -32,6 +34,7 @@
|
|||||||
/// of a buffer of given length
|
/// of a buffer of given length
|
||||||
///
|
///
|
||||||
/// \param[in] len Length of the buffer
|
/// \param[in] len Length of the buffer
|
||||||
|
///
|
||||||
/// \returns Maximum encoded representation size (in characters)
|
/// \returns Maximum encoded representation size (in characters)
|
||||||
///
|
///
|
||||||
inline size_t wxHexEncodedSize(size_t len)
|
inline size_t wxHexEncodedSize(size_t len)
|
||||||
@ -110,6 +113,7 @@ enum wxHexDecodeMode
|
|||||||
/// length
|
/// length
|
||||||
///
|
///
|
||||||
/// \param[in] len Length of the hex encoded string
|
/// \param[in] len Length of the hex encoded string
|
||||||
|
///
|
||||||
/// \returns Maximum decoded representation size (in bytes)
|
/// \returns Maximum decoded representation size (in bytes)
|
||||||
///
|
///
|
||||||
inline size_t wxHexDecodedSize(size_t len)
|
inline size_t wxHexDecodedSize(size_t len)
|
||||||
|
221
include/wxex/url.h
Normal file
221
include/wxex/url.h
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
|
||||||
|
This file is part of wxExtend.
|
||||||
|
|
||||||
|
wxExtend is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
wxExtend is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with wxExtend. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
#include "wx/string.h"
|
||||||
|
#include "wx/buffer.h"
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Return if given character should be protected for URL encoding
|
||||||
|
///
|
||||||
|
/// \param[in] chr ASCII character
|
||||||
|
///
|
||||||
|
/// \returns
|
||||||
|
/// - \c true if character should be protected
|
||||||
|
/// - \c false otherwise
|
||||||
|
///
|
||||||
|
inline bool wxURLIsProtected(char chr)
|
||||||
|
{
|
||||||
|
switch (chr) {
|
||||||
|
case ' ':
|
||||||
|
case '!':
|
||||||
|
case '*':
|
||||||
|
case '\'':
|
||||||
|
case '(':
|
||||||
|
case ')':
|
||||||
|
case ';':
|
||||||
|
case ':':
|
||||||
|
case '@':
|
||||||
|
case '&':
|
||||||
|
case '=':
|
||||||
|
case '+':
|
||||||
|
case '$':
|
||||||
|
case ',':
|
||||||
|
case '/':
|
||||||
|
case '?':
|
||||||
|
case '#':
|
||||||
|
case '[':
|
||||||
|
case ']': return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return chr < 0x20;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Return the size needed for the buffer containing the encoded representation
|
||||||
|
/// of a string of given length
|
||||||
|
///
|
||||||
|
/// \param[in] src Source string to encode
|
||||||
|
/// \param[in] srcLen Length of \p src string (in bytes)
|
||||||
|
///
|
||||||
|
/// \returns Maximum encoded representation size (in characters)
|
||||||
|
///
|
||||||
|
inline size_t wxURLEncodedSize(size_t len)
|
||||||
|
{
|
||||||
|
return len*3;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Raw URL encoding function which encodes the contents of a string of the
|
||||||
|
/// specified length into the buffer of the specified size
|
||||||
|
///
|
||||||
|
/// \param[out] dst Destination buffer to receive URL encoded data
|
||||||
|
/// \param[in] dstLen Length of \p dst buffer (in characters)
|
||||||
|
/// \param[in] src Source string to encode
|
||||||
|
/// \param[in] srcLen Length of \p src string (in bytes)
|
||||||
|
///
|
||||||
|
/// \returns The length of the encoded data or wxCONV_FAILED if the buffer is not
|
||||||
|
/// large enough; to determine the needed size you can either allocate a buffer
|
||||||
|
/// of \c{wxURLEncodedSize(srcLen)} size or call the function with NULL string in
|
||||||
|
/// which case the required size will be returned
|
||||||
|
///
|
||||||
|
size_t WXEXTEND_API wxURLEncode(char *dst, size_t dstLen, const char *src, size_t srcLen);
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// URL encoding function which encodes the contents of a string of the
|
||||||
|
/// specified length into the wxString
|
||||||
|
///
|
||||||
|
/// \param[in] src Source string to encode
|
||||||
|
/// \param[in] srcLen Length of \p src string (in bytes)
|
||||||
|
///
|
||||||
|
/// \returns The URL encoded string
|
||||||
|
///
|
||||||
|
inline wxString wxURLEncode(const char *src, size_t srcLen)
|
||||||
|
{
|
||||||
|
const size_t dstLen = wxURLEncodedSize(srcLen);
|
||||||
|
wxCharBuffer dst(dstLen);
|
||||||
|
dst.shrink(wxURLEncode(dst.data(), dstLen, src, srcLen));
|
||||||
|
|
||||||
|
return dst;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// URL encoding function which encodes the contents of a string into the wxString
|
||||||
|
///
|
||||||
|
/// \param[in] str Source string to encode
|
||||||
|
///
|
||||||
|
/// \returns The URL encoded string
|
||||||
|
///
|
||||||
|
inline wxString wxURLEncode(const wxString& str)
|
||||||
|
{
|
||||||
|
return wxURLEncode(str.GetData(), str.Length());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// URL encoding function which encodes the contents of a buffer into the wxString
|
||||||
|
///
|
||||||
|
/// \param[in] buf Source buffer to encode
|
||||||
|
///
|
||||||
|
/// \returns The URL encoded string
|
||||||
|
///
|
||||||
|
inline wxString wxURLEncode(const wxMemoryBuffer& buf)
|
||||||
|
{
|
||||||
|
return wxURLEncode((const char*)buf.GetData(), buf.GetDataLen());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Decoding Functions
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Return the buffer size necessary for decoding a URL string of the given
|
||||||
|
/// length
|
||||||
|
///
|
||||||
|
/// \param[in] len Length of the URL encoded string
|
||||||
|
///
|
||||||
|
/// \returns Maximum decoded representation size (in bytes)
|
||||||
|
///
|
||||||
|
inline size_t wxURLDecodedSize(size_t len)
|
||||||
|
{
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Raw decoding function which decodes the contents of the string of specified
|
||||||
|
/// length (or zero terminated by default) into the provided buffer of the given
|
||||||
|
/// size
|
||||||
|
///
|
||||||
|
/// \param[out] dst Destination buffer to receive decoded data
|
||||||
|
/// \param[in] dstLen Length of \p dst buffer (in bytes)
|
||||||
|
/// \param[in] src Source buffer to decode
|
||||||
|
/// \param[in] srcLen Length of \p src buffer (in characters) or wxNO_LEN for zero terminated strings
|
||||||
|
///
|
||||||
|
/// \returns The length of the decoded data or wxCONV_FAILED if the buffer is not
|
||||||
|
/// large enough; to determine the needed size you can either allocate a buffer
|
||||||
|
/// of \c{wxURLDecodedSize(srcLen)} size or call the function with NULL string in
|
||||||
|
/// which case the required size will be returned
|
||||||
|
///
|
||||||
|
size_t WXEXTEND_API wxURLDecode(char *dst, size_t dstLen, const char *src, size_t srcLen = wxNO_LEN);
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Decoding function which decodes the contents of the string into the provided buffer of the given size
|
||||||
|
///
|
||||||
|
/// \param[out] dst Destination buffer to receive decoded data
|
||||||
|
/// \param[in] dstLen Length of \p dst buffer (in bytes)
|
||||||
|
/// \param[in] src Source string to decode
|
||||||
|
///
|
||||||
|
/// \returns The length of the decoded data or wxCONV_FAILED if the buffer is not
|
||||||
|
/// large enough; to determine the needed size you can either allocate a buffer
|
||||||
|
/// of \c{wxURLDecodedSize(srcLen)} size or call the function with NULL string in
|
||||||
|
/// which case the required size will be returned
|
||||||
|
///
|
||||||
|
inline size_t wxURLDecode(char *dst, size_t dstLen, const wxString& src)
|
||||||
|
{
|
||||||
|
// don't use str.length() here as the ASCII buffer is shorter than it is for
|
||||||
|
// strings with embedded NULs
|
||||||
|
return wxURLDecode(dst, dstLen, src.ToAscii(), wxNO_LEN);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Decoding function which decodes the contents of the string of specified
|
||||||
|
/// length (or zero terminated by default) into the buffer
|
||||||
|
///
|
||||||
|
/// \param[in] src Source buffer to decode
|
||||||
|
/// \param[in] srcLen Length of \p src buffer (in characters) or wxNO_LEN for zero terminated strings
|
||||||
|
///
|
||||||
|
/// \returns Destination buffer with decoded data or an empty buffer if an error occured during decoding
|
||||||
|
///
|
||||||
|
wxMemoryBuffer WXEXTEND_API wxURLDecode(const char *src, size_t srcLen = wxNO_LEN);
|
||||||
|
|
||||||
|
|
||||||
|
///
|
||||||
|
/// Decoding function which decodes the contents of the string into the buffer
|
||||||
|
///
|
||||||
|
/// \param[in] src Source string to decode
|
||||||
|
///
|
||||||
|
/// \returns Destination buffer with decoded data or an empty buffer if an error occured during decoding
|
||||||
|
///
|
||||||
|
inline wxMemoryBuffer wxURLDecode(const wxString& src)
|
||||||
|
{
|
||||||
|
// don't use str.length() here as the ASCII buffer is shorter than it for
|
||||||
|
// strings with embedded NULs
|
||||||
|
return wxURLDecode(src.ToAscii(), wxNO_LEN);
|
||||||
|
}
|
@ -19,9 +19,10 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "crypto.h"
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
#include "crypto.h"
|
||||||
|
|
||||||
#include <wx/string.h>
|
#include <wx/string.h>
|
||||||
#include <wx/xml/xml.h>
|
#include <wx/xml/xml.h>
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
#include "../include/wxex/comutils.h"
|
#include "../include/wxex/comutils.h"
|
||||||
#include "../include/wxex/crypto.h"
|
#include "../include/wxex/crypto.h"
|
||||||
#include "../include/wxex/hex.h"
|
#include "../include/wxex/hex.h"
|
||||||
|
#include "../include/wxex/url.h"
|
||||||
#include "../include/wxex/valhex.h"
|
#include "../include/wxex/valhex.h"
|
||||||
#include "../include/wxex/xml.h"
|
#include "../include/wxex/xml.h"
|
||||||
|
|
||||||
|
134
src/url.cpp
Normal file
134
src/url.cpp
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2015-2016 Amebis
|
||||||
|
|
||||||
|
This file is part of wxExtend.
|
||||||
|
|
||||||
|
wxExtend is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
wxExtend is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with wxExtend. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "stdafx.h"
|
||||||
|
|
||||||
|
|
||||||
|
size_t WXEXTEND_API wxURLEncode(char *dst, size_t dstLen, const char *src, size_t srcLen)
|
||||||
|
{
|
||||||
|
wxCHECK_MSG(src, wxCONV_FAILED, wxT("NULL input buffer"));
|
||||||
|
|
||||||
|
static const char bhex[] = "0123456789ABCDEF";
|
||||||
|
|
||||||
|
size_t encLen = 0;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < srcLen && src[i]; i++) {
|
||||||
|
if (wxURLIsProtected(src[i])) {
|
||||||
|
encLen += 3;
|
||||||
|
if ( dst )
|
||||||
|
{
|
||||||
|
if ( encLen > dstLen )
|
||||||
|
return wxCONV_FAILED;
|
||||||
|
|
||||||
|
*dst++ = '%';
|
||||||
|
*dst++ = bhex[((unsigned char)src[i]) >> 4];
|
||||||
|
*dst++ = bhex[((unsigned char)src[i]) & 0x0f];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
encLen ++;
|
||||||
|
if ( dst )
|
||||||
|
{
|
||||||
|
if ( encLen > dstLen )
|
||||||
|
return wxCONV_FAILED;
|
||||||
|
|
||||||
|
*dst++ = src[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Zero terminate.
|
||||||
|
if ( dst && encLen < dstLen )
|
||||||
|
*dst++ = 0;
|
||||||
|
|
||||||
|
return encLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
size_t WXEXTEND_API wxURLDecode(char *dst, size_t dstLen, const char *src, size_t srcLen)
|
||||||
|
{
|
||||||
|
wxCHECK_MSG(src, wxCONV_FAILED, wxT("NULL input buffer"));
|
||||||
|
|
||||||
|
static const char bhex[] = "0123456789ABCDEF";
|
||||||
|
|
||||||
|
size_t i, decLen = 0;
|
||||||
|
|
||||||
|
for (i = 0 ; i < srcLen && src[i];) {
|
||||||
|
decLen ++;
|
||||||
|
if (src[i] == '%') {
|
||||||
|
// Decode % escaped hex value to character.
|
||||||
|
char c = 0;
|
||||||
|
size_t j = i + 1;
|
||||||
|
for (size_t j_max = i + 3; j < j_max && j < srcLen; j++) {
|
||||||
|
char x = src[j];
|
||||||
|
c <<= 4;
|
||||||
|
if ('0' <= x && x <= '9') c += x - '0';
|
||||||
|
else if ('A' <= x && x <= 'F') c += x - 'A' + 10;
|
||||||
|
else if ('a' <= x && x <= 'f') c += x - 'a' + 10;
|
||||||
|
else break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c) {
|
||||||
|
if ( dst )
|
||||||
|
{
|
||||||
|
if ( decLen > dstLen )
|
||||||
|
return wxCONV_FAILED;
|
||||||
|
|
||||||
|
*dst++ = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
i = j;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( dst )
|
||||||
|
{
|
||||||
|
if ( decLen > dstLen )
|
||||||
|
return wxCONV_FAILED;
|
||||||
|
|
||||||
|
*dst++ = src[i];
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Zero terminate.
|
||||||
|
if ( dst && decLen < dstLen )
|
||||||
|
*dst++ = 0;
|
||||||
|
|
||||||
|
return decLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxMemoryBuffer WXEXTEND_API wxURLDecode(const char *src, size_t srcLen)
|
||||||
|
{
|
||||||
|
wxMemoryBuffer buf;
|
||||||
|
wxCHECK_MSG( src, buf, wxT("NULL input buffer") );
|
||||||
|
|
||||||
|
if ( srcLen == wxNO_LEN )
|
||||||
|
srcLen = strlen(src);
|
||||||
|
|
||||||
|
size_t len = wxURLDecodedSize(srcLen);
|
||||||
|
len = wxURLDecode((char*)buf.GetWriteBuf(len), len, src, srcLen);
|
||||||
|
if ( len == wxCONV_FAILED )
|
||||||
|
len = 0;
|
||||||
|
|
||||||
|
buf.SetDataLen(len);
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user