分享
 
 
 

AfxParseURL的源码

王朝other·作者佚名  2006-01-10
窄屏简体版  字體: |||超大  

/////////////////////////////////////////////////////////////////////////////

// Global Functions

AFX_STATIC BOOL AFXAPI _AfxParseURLWorker(LPCTSTR pstrURL,

LPURL_COMPONENTS lpComponents, DWORD& dwServiceType,

INTERNET_PORT& nPort, DWORD dwFlags)

{

// this function will return bogus stuff if lpComponents

// isn't set up to copy the components

ASSERT(lpComponents != NULL && pstrURL != NULL);

if (lpComponents == NULL || pstrURL == NULL)

return FALSE;

ASSERT(lpComponents->dwHostNameLength == 0 ||

lpComponents->lpszHostName != NULL);

ASSERT(lpComponents->dwUrlPathLength == 0 ||

lpComponents->lpszUrlPath != NULL);

ASSERT(lpComponents->dwUserNameLength == 0 ||

lpComponents->lpszUserName != NULL);

ASSERT(lpComponents->dwPasswordLength == 0 ||

lpComponents->lpszPassword != NULL);

ASSERT(AfxIsValidAddress(lpComponents, sizeof(URL_COMPONENTS), TRUE));

LPTSTR pstrCanonicalizedURL;

TCHAR szCanonicalizedURL[INTERNET_MAX_URL_LENGTH];

DWORD dwNeededLength = INTERNET_MAX_URL_LENGTH;

BOOL bRetVal;

BOOL bMustFree = FALSE;

DWORD dwCanonicalizeFlags = dwFlags &

(ICU_NO_ENCODE | ICU_DECODE | ICU_NO_META |

ICU_ENCODE_SPACES_ONLY | ICU_BROWSER_MODE);

DWORD dwCrackFlags = dwFlags & (ICU_ESCAPE | ICU_USERNAME);

bRetVal = InternetCanonicalizeUrl(pstrURL, szCanonicalizedURL,

&dwNeededLength, dwCanonicalizeFlags);

if (!bRetVal)

{

if (::GetLastError() != ERROR_INSUFFICIENT_BUFFER)

return FALSE;

pstrCanonicalizedURL = new TCHAR[dwNeededLength];

bMustFree = TRUE;

bRetVal = InternetCanonicalizeUrl(pstrURL, pstrCanonicalizedURL,

&dwNeededLength, dwCanonicalizeFlags);

if (!bRetVal)

{

delete [] pstrCanonicalizedURL;

return FALSE;

}

}

else

pstrCanonicalizedURL = szCanonicalizedURL;

// now that it's safely canonicalized, crack it

bRetVal = InternetCrackUrl(pstrCanonicalizedURL, 0,

dwCrackFlags, lpComponents);

if (bMustFree)

delete [] pstrCanonicalizedURL;

// convert to MFC-style service ID

if (!bRetVal)

dwServiceType = AFX_INET_SERVICE_UNK;

else

{

nPort = lpComponents->nPort;

switch (lpComponents->nScheme)

{

case INTERNET_SCHEME_FTP:

dwServiceType = AFX_INET_SERVICE_FTP;

break;

case INTERNET_SCHEME_GOPHER:

dwServiceType = AFX_INET_SERVICE_GOPHER;

break;

case INTERNET_SCHEME_HTTP:

dwServiceType = AFX_INET_SERVICE_HTTP;

break;

case INTERNET_SCHEME_HTTPS:

dwServiceType = AFX_INET_SERVICE_HTTPS;

break;

case INTERNET_SCHEME_FILE:

dwServiceType = AFX_INET_SERVICE_FILE;

break;

case INTERNET_SCHEME_NEWS:

dwServiceType = AFX_INET_SERVICE_NNTP;

break;

case INTERNET_SCHEME_MAILTO:

dwServiceType = AFX_INET_SERVICE_MAILTO;

break;

default:

dwServiceType = AFX_INET_SERVICE_UNK;

}

}

return bRetVal;

}

BOOL AFXAPI AfxParseURLEx(LPCTSTR pstrURL, DWORD& dwServiceType,

CString& strServer, CString& strObject, INTERNET_PORT& nPort,

CString& strUsername, CString& strPassword, DWORD dwFlags/* = 0*/)

{

dwServiceType = AFX_INET_SERVICE_UNK;

ASSERT(pstrURL != NULL);

if (pstrURL == NULL)

return FALSE;

URL_COMPONENTS urlComponents;

memset(&urlComponents, 0, sizeof(URL_COMPONENTS));

urlComponents.dwStructSize = sizeof(URL_COMPONENTS);

urlComponents.dwHostNameLength = INTERNET_MAX_HOST_NAME_LENGTH;

urlComponents.lpszHostName = strServer.GetBuffer(INTERNET_MAX_HOST_NAME_LENGTH+1);

urlComponents.dwUrlPathLength = INTERNET_MAX_PATH_LENGTH;

urlComponents.lpszUrlPath = strObject.GetBuffer(INTERNET_MAX_PATH_LENGTH+1);

urlComponents.dwUserNameLength = INTERNET_MAX_USER_NAME_LENGTH;

urlComponents.lpszUserName = strUsername.GetBuffer(INTERNET_MAX_USER_NAME_LENGTH+1);

urlComponents.dwPasswordLength = INTERNET_MAX_PASSWORD_LENGTH;

urlComponents.lpszPassword = strPassword.GetBuffer(INTERNET_MAX_PASSWORD_LENGTH+1);

BOOL bRetVal = _AfxParseURLWorker(pstrURL, &urlComponents,

dwServiceType, nPort, dwFlags);

strServer.ReleaseBuffer();

strObject.ReleaseBuffer();

strUsername.ReleaseBuffer();

strPassword.ReleaseBuffer();

return bRetVal;

}

BOOL AFXAPI AfxParseURL(LPCTSTR pstrURL, DWORD& dwServiceType,

CString& strServer, CString& strObject, INTERNET_PORT& nPort)

{

dwServiceType = AFX_INET_SERVICE_UNK;

ASSERT(pstrURL != NULL);

if (pstrURL == NULL)

return FALSE;

URL_COMPONENTS urlComponents;

memset(&urlComponents, 0, sizeof(URL_COMPONENTS));

urlComponents.dwStructSize = sizeof(URL_COMPONENTS);

urlComponents.dwHostNameLength = INTERNET_MAX_URL_LENGTH;

urlComponents.lpszHostName = strServer.GetBuffer(INTERNET_MAX_URL_LENGTH+1);

urlComponents.dwUrlPathLength = INTERNET_MAX_URL_LENGTH;

urlComponents.lpszUrlPath = strObject.GetBuffer(INTERNET_MAX_URL_LENGTH+1);

BOOL bRetVal = _AfxParseURLWorker(pstrURL, &urlComponents,

dwServiceType, nPort, ICU_BROWSER_MODE);

strServer.ReleaseBuffer();

strObject.ReleaseBuffer();

return bRetVal;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有