亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? reqsock.cpp

?? 一個網路服務器程序
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
{
	int ndx;
	// a local reference to the root....
	CString& strRoot = m_pDoc->m_strRoot;
	// change all SEPCHARs to forward slashes....
	while ( (ndx=strFile.Find( SEPCHAR )) != -1 )
		strFile = strFile.Left( ndx ) + '/' + strFile.Mid(ndx+1);
	// now add the prefix and server, and cut the root....
	CString strPort;
	UINT uPort = m_pDoc->m_uPort;
	if ( uPort != PORT_HTTP )
		strPort.Format( ":%d", uPort );

	strFile = CString("http://")
		+ m_pDoc->m_strServer
		+ strPort
		+ strFile.Mid(strRoot.GetLength());

	return TRUE;
}

int CRequestSocket::StuffString( const CString& strData )
{
	int nLen = strData.GetLength()*sizeof(TCHAR);
	// make sure there's enough room....
	if ( m_cbOut + nLen > m_buf.GetSize() )
	{
		int nChunks = nLen/1024 + 1;
		m_buf.SetSize( m_cbOut + nChunks*1024 );
	}
	// copy the data....
	MoveMemory( m_buf.GetData() + m_cbOut, (LPCSTR)strData, nLen );
	m_cbOut += nLen;
	// return amount of space left....
	return (int)(m_buf.GetSize() - m_cbOut);
}

int CRequestSocket::StuffString( UINT uId )
{
	CString str;
	BOOL bOk = str.LoadString( uId );
    ASSERT(bOk);
	return StuffString( str );
}

int CRequestSocket::StuffStatus( const CString& strStatus )
{
	CString strVer = "HTTP/1.0 ";
	StuffString( strVer );
	StuffString( strStatus );
	StuffString( CRLF );

	// stuff the server name....
	CString strServer;
	if ( strServer.LoadString( IDS_SERVER_NAME ) && !strServer.IsEmpty() )
		StuffHeader( "Server", strServer );

	// stuff the date....
	return StuffHeader( "Date", GetHttpDate() );
}

int CRequestSocket::StuffStatus( UINT uStatus )
{
	CString strStatus;
	BOOL bOk = strStatus.LoadString( uStatus );
    ASSERT(bOk);
	// save the status for this request....
	m_pRequest->m_uStatus = uStatus;
	// stuff the HTTP status line....
	return StuffStatus( strStatus );
}

int CRequestSocket::StuffError( UINT uMsg )
{
	StuffStatus( uMsg );
	return StuffString( CRLF );
}

int CRequestSocket::StuffHeader( CString strName, CString strValue )
{
	StuffString( strName );
	StuffString( ": " );
	StuffString( strValue );
	return StuffString( CRLF );
}

int CRequestSocket::StuffHeader( CString strName, int nValue )
{
	CString strValue;
	StuffString( strName );
	StuffString( ": " );
	strValue.Format( "%d", nValue );
	StuffString( strValue );
	return StuffString( CRLF );
}

BOOL CRequestSocket::StuffHeading( void )
{
	BOOL bContinue = FALSE;
	if ( m_pRequest->m_dwAttr & FILE_ATTRIBUTE_HIDDEN )
	{
		// never show hidden files....
		StuffError( IDS_STATUS_FORBIDDEN );
	}
	else if ( m_pRequest->m_dwAttr & FILE_ATTRIBUTE_DIRECTORY )
	{
		if ( m_pDoc->m_bAllowListing )
		{
			// create a directory listing....
			StuffStatus( IDS_STATUS_OK );
			StuffString( CRLF );
			bContinue = TRUE;
		}
		else
			StuffError( IDS_STATUS_FORBIDDEN );
	}
#ifdef IMPL_CGI
	else if ( m_hFile != INVALID_HANDLE_VALUE )
	{
		// cgi's output file will be opened already....
		CString strStatus, strHeaders;
		// loop until we find a blank line....
		DWORD dwRead = 0;
		CByteArray baFile;
		baFile.SetSize( 1024 );
		// read next chunk....
		if(!ReadFile( m_hFile, baFile.GetData(),
			(DWORD)baFile.GetSize(), &dwRead, NULL ))
		{
			BOOL bOk = strStatus.LoadString(IDS_STATUS_SVRERROR);
            ASSERT(bOk);
			dwRead = 0;
			CloseHandle( m_hFile );
			m_hFile = INVALID_HANDLE_VALUE;
		}

		while ( dwRead > 0 )
		{
			int ndx = 0;
			while( GetLine( baFile, dwRead, ndx ) == TRUE )
			{
				BOOL bSave = TRUE;
				// stuff any non-empty lines.....
				if ( m_strLine.IsEmpty() )
				{
					// we found our empty line;
					// back up to where we left off....
					DWORD dwPos = 0;
					dwPos = SetFilePointer( m_hFile,
						ndx - dwRead,
						NULL, FILE_CURRENT );

					// and we're off....
					bContinue = TRUE;
					break;
				}
				else
				{
					int nPos = m_strLine.Find( ':' );
					if ( nPos != -1 )
					{
						CString strName = m_strLine.Left( nPos );
						strName.TrimLeft();
						strName.TrimRight();
						CString strVal  = m_strLine.Mid( nPos+1 );
						strVal.TrimLeft();
						strVal.TrimRight();
						if ( strName.CompareNoCase("Status") == 0 )
						{
							strStatus = strVal;
							bSave = FALSE;
						}
						else if ( strName.CompareNoCase("Location") == 0 )
						{
							BOOL bOk = strStatus.LoadString( IDS_STATUS_MOVEDTEMP );
                            ASSERT(bOk);
						}
					}
				}

				// save the header (if we want to)....
				if ( bSave )
					strHeaders += m_strLine + CRLF;

				m_strLine.Empty();
			}
			// read next chunk if we're not done....
			if ( bContinue )
				break;
			else
				if(!ReadFile( m_hFile, baFile.GetData(),
					(DWORD)baFile.GetSize(), &dwRead, NULL ))
				{
					BOOL bOk = strStatus.LoadString(IDS_STATUS_SVRERROR);
                    ASSERT(bOk);
					CloseHandle( m_hFile );
					m_hFile = INVALID_HANDLE_VALUE;
				
				}
		}
		if ( strStatus.IsEmpty() )
			StuffStatus( IDS_STATUS_OK );
		else
			StuffStatus( strStatus );

		// stuff the headers....
		StuffString( strHeaders );
		// stuff the blank line....
		StuffString( CRLF );
	}
#endif // IMPL_CGI
	else
	{
		// open the file....
		m_hFile = CreateFile( m_pRequest->m_strFullPath,
			GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING,
			FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,
			NULL );
		if ( m_hFile != INVALID_HANDLE_VALUE )
		{
			if ( m_reqStatus != REQ_SIMPLE )
			{
				CTime timeIfMod;
				CString strIfMod = m_pRequest->GetHeaderValue( "If-Modified-Since" );
				if ( strIfMod.GetLength() > 0 &&
					FromHttpTime( strIfMod, timeIfMod ) &&
					!IfModSince( timeIfMod ) )
				{
					// eh, it hasn't been modified....
					StuffStatus( IDS_STATUS_NOTMODIFIED );
					// don't need it anymore....
					CloseHandle( m_hFile );
					m_hFile = INVALID_HANDLE_VALUE;
				}
				else
				{
					// send it off....
					StuffStatus( IDS_STATUS_OK );
					// any other header info....
					StuffFileType();
					StuffHeader( "Content-length", GetFileSize( m_hFile, NULL ) );
					// get the last modified time....
					FILETIME ft;
					if ( GetFileTime( m_hFile, NULL, NULL, &ft ) )
					{
						StuffHeader( "Last-Modified", GetHttpDate( &ft ) );
					}
					bContinue = TRUE;
				}
				// blank line....
				StuffString( CRLF );
			}
			else
				bContinue = TRUE;
		}
		else
		{
			// couldn't open; try again later....
			StuffError( IDS_STATUS_SVCUNAVAIL );
		}
	}
	return bContinue;
}

void CRequestSocket::StartTargetStuff( void )
{
	if ( m_hFile != INVALID_HANDLE_VALUE)
	{
		DWORD dwRead = 0;
		// read the first chunk....
		if(ReadFile( m_hFile, m_buf.GetData() + m_cbOut,
			(DWORD)(m_buf.GetSize()-m_cbOut), &dwRead, NULL ) && dwRead > 0)
		{
			m_cbOut += dwRead;
		}
		else
		{
			// nothing read.... close the file....
			CloseHandle( m_hFile );
			m_hFile = INVALID_HANDLE_VALUE;
		}
	}
	else if ( m_pRequest->m_dwAttr & FILE_ATTRIBUTE_DIRECTORY )
		StuffListing();
	else
		StuffString( CRLF );
}

void CRequestSocket::StuffListing( void )
{
	BOOL bRoot = FALSE;
	BOOL bIcons = m_pDoc->m_bListIcon;
	CString strIcon;
	CString strLine = CString("http://")
		+ m_pDoc->m_strServer
		+ m_pRequest->m_strURL;
	CString strDir = m_pRequest->m_strURL;
	CString strMask = m_pRequest->m_strFullPath;

	// make sure URL ends in a slash....
	if ( strDir.GetAt( strDir.GetLength()-1 ) != '/' )
		strDir += '/';
	// is this the server's root folder?
	else if ( strDir.Compare( "/" ) == 0 )
		bRoot = TRUE;

	// create the file search mask....
	AddFile( strMask, IDS_DIRMASK );
	StuffString( IDS_CONTENTS_PRE );
	StuffString( strLine );
	StuffString( IDS_CONTENTS_POST );
	if ( bRoot )
		StuffString( IDS_CONTENTS_DESC );

    if ( bIcons )
    {
		BOOL bOk = strIcon.LoadString( IDS_ICON_BLANK );
        ASSERT(bOk);
    }
	strLine.Format( IDS_CONTENTS_HEADING, strIcon );
	StuffString( strLine );

	int nFiles = 0;

	WIN32_FIND_DATA fd;
	// find the first file that matches the mask....
	HANDLE fh = FindFirstFile( strMask, &fd );
	if ( fh != INVALID_HANDLE_VALUE )
	{
		// create a line for the found file....
		nFiles += StuffListingFile( &fd, strDir, bIcons );
		// loop through all other files....
		while ( FindNextFile( fh, &fd ) )
			nFiles += StuffListingFile( &fd, strDir, bIcons );
	}

	if ( nFiles == 0 )
		StuffString( IDS_CONTENTS_EMPTY );

	StuffString( IDS_CONTENTS_FOOTER );
	// only add the parent link if there is one....
	if ( !bRoot )
	{
		if ( bIcons )
        {
			BOOL bOk = strIcon.LoadString( IDS_ICON_PARENT );
            ASSERT(bOk);
        }
		strLine.Format( IDS_CONTENTS_PARENT, strIcon );
		StuffString( strLine );
	}
	// add the note and end it....
	StuffString( IDS_CONTENTS_NOTE );
	StuffString( CRLF );
}

int CRequestSocket::StuffListingFile( WIN32_FIND_DATA* pfd, const CString& strDir, BOOL bIcons )
{
	int nFile = 0;
	// don't include '.', '..' or hidden files....
	if ( lstrcmp( pfd->cFileName, "." ) && lstrcmp( pfd->cFileName, ".." )
		&& (pfd->dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) == 0 )
	{
		CString strSize, strIcon = "";
		CString strLine, strFile = pfd->cFileName;
		CTime timeFile( pfd->ftLastWriteTime );
		BOOL bFolder = ((pfd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0);
        BOOL bOk = TRUE;
		if ( bIcons && bFolder )
			bOk = strIcon.LoadString( IDS_ICON_FOLDER );
		else if ( bIcons )
			bOk = strIcon.LoadString( IDS_ICON_FILE );
        ASSERT(bOk);

		// create the link string....
		CString strLink = strDir + strFile;
		// make sure spaces are replaced with '%20'...
		int ndx;
		while ( (ndx=strLink.Find(' ')) != -1 )
			strLink = strLink.Left(ndx) + "%20" + strLink.Mid( ndx+1 );

		// format the size string....
		if ( bFolder )
			strSize = "  Folder";
		else if ( pfd->nFileSizeHigh > 0 )
			strSize = "   > 4GB"; // yeah, right.
		else if ( pfd->nFileSizeLow < 1024 )
			strSize = "    &lt; 1K";
		else
			strSize.Format( "%7dK", pfd->nFileSizeLow/1024 );

		strLine.Format( IDS_CONTENTS_FORMAT,
			timeFile.Format( IDS_FILETIMEFMT ),
			strSize, strLink, strIcon, strFile );
		StuffString( strLine );
		nFile = 1;
	}
	return nFile;
}

BOOL CRequestSocket::StartSvrApp( void )
{
#ifdef IMPL_CGI
	if ( m_pRequest->m_dwExecute != CRequest::APP_ISAPI )
		return CGIStart();
	else
	{
		StuffError( IDS_STATUS_NOTIMPL );
		return FALSE;
	}
#else //  IMPL_CGI
	StuffError( IDS_STATUS_NOTIMPL );
	return FALSE;
#endif // IMPL_CGI
}

#ifdef IMPL_CGI
BOOL CRequestSocket::CGIStart( void )
{
	BOOL bOk = FALSE;
	// get the temp path...
	CString strTempPath;
	DWORD dwSize = 0;
	if((dwSize = GetTempPath( 0, NULL )) == 0) 
		return FALSE;
	
	GetTempPath(dwSize,strTempPath.GetBuffer(dwSize));
	strTempPath.ReleaseBuffer();
	// create a temporary file for the output....
	CString strTempName;
	
	GetTempFileName( strTempPath, "CGI", 0, strTempName.GetBuffer(dwSize+12) );
	strTempName.ReleaseBuffer();
	m_hFile = CreateFile( strTempName, GENERIC_READ|GENERIC_WRITE,
		FILE_SHARE_READ|FILE_SHARE_WRITE, &g_sa,
		CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY|FILE_FLAG_DELETE_ON_CLOSE, NULL );
	if ( m_hFile != INVALID_HANDLE_VALUE )
	{
		// create the cancel event....
		m_pCancel = new CEvent;
		if ( m_pCancel )
		{
			// make sure the event is reset....
			m_pCancel->ResetEvent();
			// create the CGI thread suspended....
			m_pThread = AfxBeginThread( (AFX_THREADPROC)CGIThread,
				(LPVOID)this, THREAD_PRIORITY_NORMAL, 0,
				CREATE_SUSPENDED, NULL );
			if ( m_pThread )
			{
				// don't self-destruct (we must delete)....
				m_pThread->m_bAutoDelete = FALSE;
				// resume...
				m_pThread->ResumeThread();
				bOk = TRUE;
			}
		}
	}

	if ( bOk == FALSE )
	{
		StuffError( IDS_STATUS_SVRERROR );
		if( m_hFile != INVALID_HANDLE_VALUE )
		{ // JIC....
			CloseHandle( m_hFile );
			m_hFile = INVALID_HANDLE_VALUE;
		}
	}
	return bOk;
}

void AddEnvVar( CString& strEnv, CString strName, CString strVal )
{
	// add the name=val pair to the env in alphabetical order....
	strEnv += strName + '=' + strVal + '\a';
}

UINT CGIThread( LPVOID pvParam )
{
	CRequestSocket* pReqSock = (CRequestSocket*)pvParam;
	CRequest* pRequest = pReqSock->m_pRequest;
	BOOL bOk = FALSE;
	DWORD dwErr;
	HANDLE hWritePipe, hReadPipe;
	// create a pipe we'll use for STDIN....
	if ( CreatePipe( &hReadPipe, &hWritePipe, &g_sa, 0 ) )
	{
		// get the command line together....
		CString strCmdLine = pRequest->m_strFullPath
			+ ' '
			+ Decode( pRequest->m_strArgs, TRUE );
		// get the directory....
		CString strDir = pRequest->m_strFullPath;
		int ndx = strDir.ReverseFind( SEPCHAR );
		// assume we found it....
		strDir = strDir.Left( ndx+1 );

		// create an environment for the CGI process....
		DWORD dwCreateFlags = 0;
#ifdef UNICODE
		dwCreateFlags = CREATE_UNICODE_ENVIRONMENT;
#endif // UNICODE
		CEnvironment cEnv;

		CString strValue;
		BOOL bOk = strValue.LoadString( IDS_SERVER_NAME );
        ASSERT(bOk);
		cEnv.Add( "SERVER_SOFTWARE", strValue );

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲日韩一区二区三区| 中文字幕乱码一区二区免费| 亚洲国产高清不卡| 午夜国产精品一区| 成人高清av在线| 精品国产亚洲一区二区三区在线观看| 亚洲私人黄色宅男| 国产一区二区三区精品欧美日韩一区二区三区| 91同城在线观看| 久久久久久毛片| 久久66热re国产| 欧美日韩视频在线观看一区二区三区 | 亚洲精品高清在线| 国产精品99久久久久久久vr| 91精品国产入口| 亚洲专区一二三| av男人天堂一区| 欧美激情在线看| 国产精品亚洲一区二区三区妖精 | 日韩av一二三| 欧美欧美午夜aⅴ在线观看| 国产精品福利一区| 成人在线视频一区| 国产精品女主播在线观看| 国产在线不卡一区| 久久久影院官网| 激情综合色播激情啊| 亚洲精品在线观看视频| 欧美aaaaaa午夜精品| 555www色欧美视频| 三级在线观看一区二区| 欧美视频完全免费看| 亚洲国产成人高清精品| 欧美日韩成人综合天天影院| 亚洲国产成人高清精品| 91.成人天堂一区| 日韩黄色小视频| 日韩欧美综合一区| 国产精品一区在线| 国产精品人妖ts系列视频| 成人精品gif动图一区| 中文字幕一区日韩精品欧美| 99在线热播精品免费| 亚洲精品日产精品乱码不卡| 欧美日韩欧美一区二区| 日韩国产精品久久| 精品成人在线观看| 成人午夜激情影院| 亚洲男人的天堂一区二区| 欧美日韩免费电影| 久久99日本精品| 国产色一区二区| 色综合久久天天| 图片区小说区区亚洲影院| 日韩欧美在线123| 国产精品原创巨作av| 亚洲人成7777| 日韩一区二区三区免费看| 国产成人综合在线播放| 亚洲区小说区图片区qvod| 欧美另类高清zo欧美| 精品制服美女久久| 日韩毛片精品高清免费| 欧美日韩精品一区二区天天拍小说| 麻豆免费精品视频| 亚洲少妇30p| 欧美xxxxx裸体时装秀| 99精品一区二区三区| 日本sm残虐另类| 国产精品久久精品日日| 666欧美在线视频| 成人黄色国产精品网站大全在线免费观看| 一区二区三区中文在线观看| 日韩欧美一级二级三级| 91在线观看下载| 美女高潮久久久| 亚洲最色的网站| 精品欧美一区二区三区精品久久| 波多野结衣视频一区| 蜜臀久久99精品久久久久宅男| 国产精品白丝在线| 精品国产免费视频| 欧美视频在线一区二区三区| 成人黄色av网站在线| 麻豆视频一区二区| 午夜天堂影视香蕉久久| 最近中文字幕一区二区三区| 精品国产三级电影在线观看| 欧美日韩一区二区在线观看视频 | 欧美三级视频在线播放| 懂色av一区二区三区免费观看 | 日韩欧美一区二区久久婷婷| 色哟哟国产精品| 国产精品亚洲视频| 久久国产精品第一页| 亚洲国产精品久久久久秋霞影院| 国产精品国产三级国产普通话三级| 日韩欧美不卡一区| 欧美日韩国产经典色站一区二区三区| 成人av影视在线观看| 国产毛片一区二区| 国产中文字幕一区| 另类中文字幕网| 秋霞国产午夜精品免费视频| 亚洲成人免费视| 亚洲激情在线播放| 一区二区三区美女| 亚洲欧美日本在线| 亚洲私人黄色宅男| 亚洲色图制服诱惑| 亚洲精品高清在线观看| 亚洲乱码国产乱码精品精可以看| 国产精品久久久久久久久久久免费看 | 亚洲图片激情小说| 中文字幕欧美一| 中文字幕在线一区二区三区| 国产精品丝袜一区| 国产精品色呦呦| 国产精品乱人伦一区二区| 中文av一区特黄| 亚洲视频一区在线| 亚洲自拍偷拍麻豆| 亚洲成人资源网| 免费av网站大全久久| 久久av老司机精品网站导航| 狠狠色狠狠色综合日日91app| 久久精品国内一区二区三区| 激情综合色播激情啊| 国产精品一区二区视频| a美女胸又www黄视频久久| 一本大道av伊人久久综合| 91国产免费观看| 91麻豆精品国产91久久久久| 精品欧美一区二区久久| 中文字幕av一区二区三区免费看| 中文字幕乱码一区二区免费| 亚洲精品视频观看| 欧美aⅴ一区二区三区视频| 国产真实精品久久二三区| 成人听书哪个软件好| 日本道精品一区二区三区| 777a∨成人精品桃花网| 久久综合色一综合色88| 国产精品理论在线观看| 亚洲一区二区在线免费看| 久久精品国产秦先生| 成人av免费在线播放| 欧美私人免费视频| 国产亚洲欧美一级| 一区二区三区精品| 精品一区精品二区高清| 色综合天天综合网天天狠天天| 欧美日韩国产影片| 久久久99精品免费观看| 亚洲国产日产av| 国产91精品免费| 91精品国产一区二区| 中文字幕一区二区三中文字幕| 婷婷中文字幕一区三区| 丁香亚洲综合激情啪啪综合| 欧美日韩激情一区二区| 久久精品一区二区三区四区| 亚洲成人免费av| 成人av网站免费| 精品日韩一区二区| 一二三四社区欧美黄| 国产精品99久久久久久有的能看| 欧美日韩一区不卡| 国产精品久久久久久久久免费樱桃| 日本成人在线一区| 色丁香久综合在线久综合在线观看| 欧美成人伊人久久综合网| 亚洲一区二区三区中文字幕| 福利一区福利二区| 欧美大片一区二区| 亚洲国产成人91porn| 93久久精品日日躁夜夜躁欧美| 欧美成人性战久久| 日韩va亚洲va欧美va久久| 在线观看成人小视频| 亚洲欧洲美洲综合色网| 国产精品亚洲视频| 久久日一线二线三线suv| 日产精品久久久久久久性色| 欧美在线观看一区二区| 18成人在线视频| 成人免费毛片app| 国产日产欧美一区| 国产乱色国产精品免费视频| 日韩三级精品电影久久久| 日韩二区在线观看| 在线播放91灌醉迷j高跟美女 | 欧美综合久久久| 亚洲日本在线a| av综合在线播放| 一色屋精品亚洲香蕉网站| caoporn国产一区二区| 中文字幕不卡在线播放| 福利一区二区在线| 国产精品视频在线看|