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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? stream.c

?? cryptlib是功能強(qiáng)大的安全工具集。允許開(kāi)發(fā)人員快速在自己的軟件中集成加密和認(rèn)證服務(wù)。
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
		{
		assert( NOTREACHED );
		return( sSetError( stream, CRYPT_ERROR_READ ) );
		}

	/* If there's a problem with the stream, don't try to do anything until
	   the error is cleared */
	if( cryptStatusError( stream->status ) )
		return( stream->status );

	/* Read the data from the buffer, but without advancing the read pointer
	   like sgetc() does */
	switch( stream->type )
		{
		case  STREAM_TYPE_MEMORY:
			assert( !( stream->flags & ~STREAM_FLAG_MASK ) );

			/* Read the data from the stream buffer */
			if( stream->bufPos >= stream->bufEnd )
				{
				stream->status = CRYPT_ERROR_UNDERFLOW;
				return( CRYPT_ERROR_UNDERFLOW );
				}
			return( stream->buffer[ stream->bufPos ] );

		case STREAM_TYPE_FILE:
			assert( !( stream->flags & ~STREAM_FFLAG_MASK ) );

			/* Read the data from the file */
			if( stream->bufPos >= stream->bufEnd || \
				( stream->flags & STREAM_FFLAG_POSCHANGED ) )
				{
				int status = refillStream( stream );
				if( cryptStatusError( status ) )
					return( ( status == OK_SPECIAL ) ? 0 : status );
				}
			return( stream->buffer[ stream->bufPos ] );
		}

	assert( NOTREACHED );
	return( CRYPT_ERROR_READ );		/* Get rid of compiler warning */
	}

/****************************************************************************
*																			*
*								IOCTL Functions								*
*																			*
****************************************************************************/

/* Perform an IOCTL on a stream */

int sioctl( STREAM *stream, const STREAM_IOCTL_TYPE type, void *data,
			const int dataLen )
	{
	assert( isWritePtr( stream, sizeof( STREAM ) ) );
	assert( ( stream->type == STREAM_TYPE_FILE && \
			  ( type == STREAM_IOCTL_IOBUFFER || \
				type == STREAM_IOCTL_PARTIALREAD ) ) || \
			( stream->type == STREAM_TYPE_NETWORK ) );
	assert( type > STREAM_IOCTL_NONE && type < STREAM_IOCTL_LAST );

	/* Check that the input parameters are in order */
	if( !isWritePtr( stream, sizeof( STREAM ) ) )
		{
		assert( NOTREACHED );
		return( CRYPT_ERROR_READ );
		}

	switch( type )
		{
		case STREAM_IOCTL_IOBUFFER:
			assert( ( data == NULL && dataLen == 0 ) || \
					isWritePtr( data, dataLen ) );
			assert( dataLen == 0 || \
					dataLen == 512 || dataLen == 1024 || \
					dataLen == 2048 || dataLen == 4096 || \
					dataLen == 8192 || dataLen == 16384 );

			stream->buffer = data;
			stream->bufSize = dataLen;

			/* We've switched to a new I/O buffer, reset all buffer- and 
			   stream-state related variables and remember that we have to 
			   reset the stream position, since there may be a position-
			   change pending that hasn't been reflected down to the 
			   underlying file yet (if it was within the same buffer, the 
			   POSCHANGED flag won't have been set since only the bufPos is 
			   changed) */
			stream->bufPos = stream->bufEnd = stream->bufCount = 0;
			stream->status = CRYPT_OK;
			stream->flags &= ~( STREAM_FFLAG_EOF | \
								STREAM_FFLAG_POSCHANGED_NOSKIP );
			stream->flags |= STREAM_FFLAG_POSCHANGED;
			break;

		case STREAM_IOCTL_PARTIALREAD:
			assert( data == NULL && dataLen == 0 );

			stream->flags |= STREAM_FLAG_PARTIALREAD;
			break;

		case STREAM_IOCTL_PARTIALWRITE:
			assert( data == NULL && dataLen == 0 );

			stream->flags |= STREAM_FLAG_PARTIALWRITE;
			break;

#ifdef USE_TCP
		case STREAM_IOCTL_READTIMEOUT:
		case STREAM_IOCTL_WRITETIMEOUT:
			/* These two values are stored as a shared timeout value
			   which is updated on each data read or write by the
			   caller, so there's no need to maintain distinct values */
			if( data != NULL )
				{
				assert( dataLen == 0 );

				*( ( int * ) data ) = stream->timeout;
				}
			else
				{
				assert( dataLen >= 0 );
				stream->timeout = dataLen;
				if( stream->iTransportSession != CRYPT_ERROR )
					krnlSendMessage( stream->iTransportSession,
									 IMESSAGE_SETATTRIBUTE, &stream->timeout,
									 ( type == STREAM_IOCTL_READTIMEOUT ) ? \
										CRYPT_OPTION_NET_READTIMEOUT : \
										CRYPT_OPTION_NET_WRITETIMEOUT );
				}
			break;

		case STREAM_IOCTL_HANDSHAKECOMPLETE:
			{
			assert( data == NULL );
			assert( dataLen == 0 );
			assert( stream->timeout > 0 );
			assert( stream->savedTimeout >= 0 );

			/* The security protocol handshake has completed, change the 
			   stream timeout value from the connect/handshake timeout to
			   the standard data transfer timeout */
			stream->timeout = stream->savedTimeout;
			stream->savedTimeout = CRYPT_ERROR;
			if( stream->iTransportSession != CRYPT_ERROR )
				krnlSendMessage( stream->iTransportSession,
								 IMESSAGE_SETATTRIBUTE, &stream->timeout,
								 CRYPT_OPTION_NET_CONNECTTIMEOUT );
			break;
			}

		case STREAM_IOCTL_CONNSTATE:
			if( data != NULL )
				{
				assert( dataLen == 0 );

				*( ( int * ) data ) = \
								( stream->flags & STREAM_NFLAG_LASTMSG ) ? \
								FALSE : TRUE;
				}
			else
				{
				assert( dataLen == TRUE || dataLen == FALSE );
				if( dataLen )
					stream->flags &= ~STREAM_NFLAG_LASTMSG;
				else
					stream->flags |= STREAM_NFLAG_LASTMSG;
				}
			break;

		case STREAM_IOCTL_GETCLIENTNAME:
			assert( data != NULL );
			assert( dataLen == 0 );

			strcpy( data, stream->clientAddress );
			break;

		case STREAM_IOCTL_GETCLIENTPORT:
			assert( data != NULL );
			assert( dataLen == 0 );

			*( ( int * ) data ) = stream->clientPort;
			break;

		case STREAM_IOCTL_CONTENTTYPE:
			assert( stream->protocol == STREAM_PROTOCOL_HTTP || \
					stream->protocol == STREAM_PROTOCOL_HTTP_TRANSACTION );
			assert( isWritePtr( data, dataLen ) );
			assert( dataLen > 0 && dataLen < CRYPT_MAX_TEXTSIZE );

			memcpy( stream->contentType, data, dataLen );
			stream->contentType[ dataLen ] = '\0';
			break;

		case STREAM_IOCTL_QUERY:
			assert( stream->protocol == STREAM_PROTOCOL_HTTP || \
					stream->protocol == STREAM_PROTOCOL_HTTP_TRANSACTION );
			assert( ( data == NULL && dataLen == 0 ) || \
					( isWritePtr( data, dataLen ) && \
					  dataLen > 0 && dataLen < CRYPT_MAX_TEXTSIZE ) );

			/* If we're resetting the value, clear the buffer and exit */
			if( data == NULL )
				{
				if( stream->queryLen > 0 )
					memset( stream->query, 0, stream->queryLen );
				break;
				}

			/* Set up the buffer to contain the query if necessary */
			if( stream->queryLen <= dataLen + 1 )
				{
				if( stream->query != NULL )
					{
					clFree( "sioctl", stream->query );
					stream->queryLen = 0;
					}
				if( ( stream->query = \
						clAlloc( "sioctl", max( CRYPT_MAX_TEXTSIZE, \
												dataLen + 1 ) ) ) == NULL )
					{
					stream->status = CRYPT_ERROR_MEMORY;
					return( CRYPT_ERROR_MEMORY );
					}
				stream->queryLen = dataLen;
				}

			/* Copy in the query */
			memcpy( stream->query, data, dataLen );
			stream->query[ dataLen ] = '\0';
			break;

		case STREAM_IOCTL_IDEMPOTENT:
			assert( stream->protocol == STREAM_PROTOCOL_HTTP || \
					stream->protocol == STREAM_PROTOCOL_HTTP_TRANSACTION );

			if( data != NULL )
				{
				assert( dataLen == 0 );

				*( ( int * ) data ) = \
								( stream->flags & STREAM_NFLAG_IDEMPOTENT ) ? \
								TRUE : FALSE;
				}
			else
				{
				assert( data == NULL );
				assert( dataLen == TRUE || dataLen == FALSE );

				if( dataLen )
					stream->flags |= STREAM_NFLAG_IDEMPOTENT;
				else
					stream->flags &= ~STREAM_NFLAG_IDEMPOTENT;
				}
			break;

		case STREAM_IOCTL_LASTMESSAGE:
			assert( stream->protocol == STREAM_PROTOCOL_HTTP || \
					stream->protocol == STREAM_PROTOCOL_HTTP_TRANSACTION || \
					stream->protocol == STREAM_PROTOCOL_CMP );
			assert( data == NULL );
			assert( dataLen == TRUE );

			stream->flags |= STREAM_NFLAG_LASTMSG;
			break;

		case STREAM_IOCTL_CALLBACKFUNCTION:
			assert( stream->protocol == STREAM_PROTOCOL_HTTP || \
					stream->protocol == STREAM_PROTOCOL_HTTP_TRANSACTION );
			assert( data != NULL );
			assert( dataLen == 0 );

			stream->callbackFunction = ( CALLBACKFUNCTION ) data;
			break;

		case STREAM_IOCTL_CALLBACKPARAMS:
			assert( stream->protocol == STREAM_PROTOCOL_HTTP || \
					stream->protocol == STREAM_PROTOCOL_HTTP_TRANSACTION );
			assert( data != NULL );
			assert( dataLen == 0 );

			stream->callbackParams = data;
			break;

		case STREAM_IOCTL_CLOSESENDCHANNEL:
			assert( data == NULL );
			assert( dataLen == 0 );
			assert( !( stream->flags & STREAM_NFLAG_USERSOCKET ) );

			/* If this is a user-supplied socket, we can't perform a partial 
			   close without affecting the socket as seen by the user, so we 
			   only perform the partial close if it's a cryptlib-controlled 
			   socket */
			if( !( stream->flags & STREAM_NFLAG_USERSOCKET ) )
				stream->transportDisconnectFunction( stream, FALSE );
			break;
#endif /* USE_TCP */

		default:
			assert( NOTREACHED );
		}

	return( CRYPT_OK );
	}

/****************************************************************************
*																			*
*								Misc Functions								*
*																			*
****************************************************************************/

/* Convert a file stream to a memory stream.  Usually this allocates a 
   buffer and reads the stream into it, however if it's a read-only memory-
   mapped file it just creates a second reference to the data to save
   memory */

int sFileToMemStream( STREAM *memStream, STREAM *fileStream,
					  void **bufPtrPtr, const int length )
	{
	void *bufPtr;
	int status;

	assert( isWritePtr( memStream, sizeof( STREAM ) ) );
	assert( isWritePtr( fileStream, sizeof( STREAM ) ) );
	assert( isWritePtr( *bufPtrPtr, sizeof( void * ) ) );
	assert( length > 0 );

	/* Check that the input parameters are in order */
	if( !isWritePtr( memStream, sizeof( STREAM ) ) || \
		!isWritePtr( fileStream, sizeof( STREAM ) ) || \
		length <= 0 )
		{
		assert( NOTREACHED );
		return( CRYPT_ERROR_READ );
		}

	/* Clear return value */
	memset( memStream, 0, sizeof( STREAM ) );
	*bufPtrPtr = NULL;

	/* If it's a read-only memory-mapped file stream, create the memory 
	   stream as a reference to the file stream */
	if( ( fileStream->flags & \
		  ( STREAM_FLAG_READONLY | STREAM_FFLAG_MMAPPED ) ) == \
		( STREAM_FLAG_READONLY | STREAM_FFLAG_MMAPPED ) )
		{
		/* Make sure that there's enough data left in the memory-mapped
		   stream to reference it as a file stream */
		if( length > sMemDataLeft( fileStream ) )
			return( CRYPT_ERROR_UNDERFLOW );

		/* Create a second reference to the memory-mapped stream */
		status = sMemConnect( memStream, fileStream->buffer + \
										 fileStream->bufPos, length );
		if( cryptStatusError( status ) )
			return( status );
		status = sSkip( fileStream, length );
		if( cryptStatusError( status ) )
			{
			sMemDisconnect( memStream );
			return( status );
			}
		return( CRYPT_OK );
		}

	/* It's a file stream, allocate a buffer for the data and read it in as
	   a memory stream */
	if( ( bufPtr = clAlloc( "sFileToMemStream", length ) ) == NULL )
		return( CRYPT_ERROR_MEMORY );
	status = sread( fileStream, bufPtr, length );
	if( cryptStatusOK( status ) )
		status = sMemConnect( memStream, bufPtr, length );
	if( cryptStatusError( status ) )
		{
		clFree( "sFileToMemStream", bufPtr );
		return( status );
		}
	*bufPtrPtr = bufPtr;
	return( CRYPT_OK );
	}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美二区三区| 日韩精品三区四区| 91麻豆精品国产91久久久久久| 蜜桃av噜噜一区| 欧美国产日韩一二三区| 欧美日韩你懂的| 高清国产午夜精品久久久久久| 一区二区三区**美女毛片| xnxx国产精品| 欧美日韩精品综合在线| 成人aa视频在线观看| 青青草精品视频| 亚洲免费观看高清完整版在线观看| 精品久久久久久久久久久久包黑料 | 亚洲电影在线免费观看| 久久婷婷综合激情| 精品动漫一区二区三区在线观看| 不卡在线观看av| 老司机午夜精品99久久| 亚洲午夜免费电影| 亚洲人成网站精品片在线观看| 久久亚洲精华国产精华液| 欧美日本在线播放| 色视频一区二区| 99视频精品全部免费在线| 国产精品一区二区三区网站| 蜜桃视频一区二区| 性久久久久久久久久久久| 亚洲视频狠狠干| 中文字幕一区二区在线播放 | 精品久久久久一区| 欧美一级日韩一级| 欧美精品xxxxbbbb| 欧美性大战久久| 欧美影片第一页| 在线亚洲人成电影网站色www| a亚洲天堂av| 成人福利视频在线| 99久久精品国产一区二区三区| 国产一区二区不卡在线| 老鸭窝一区二区久久精品| 免费的国产精品| 麻豆高清免费国产一区| 精品写真视频在线观看| 精品一区二区免费视频| 精品在线播放免费| 国产一区二区女| 国产精品456| 床上的激情91.| 91丨porny丨国产入口| 91色视频在线| 91官网在线观看| 欧美日韩日日夜夜| 日韩视频不卡中文| 精品欧美一区二区在线观看| 国产午夜精品久久久久久久| 国产精品视频一二三区| 亚洲欧美日韩人成在线播放| 亚洲激情综合网| 日日夜夜一区二区| 国产主播一区二区三区| 成人教育av在线| 在线免费观看日本一区| 91精品国产综合久久久久久久 | 日韩福利视频导航| 久久国产精品99久久人人澡| 国模一区二区三区白浆| 成人亚洲精品久久久久软件| 一本久久a久久精品亚洲| 欧美日韩一二三| www国产亚洲精品久久麻豆| 亚洲欧洲一区二区三区| 亚洲成人中文在线| 国产在线视频不卡二| jizzjizzjizz欧美| 制服视频三区第一页精品| 久久久久国产成人精品亚洲午夜| 亚洲色图.com| 蜜桃久久久久久久| 91在线观看下载| 91精品国产综合久久精品图片| 久久影院午夜论| 亚洲综合精品自拍| 国产精品自拍网站| 欧美日韩中文精品| 久久日一线二线三线suv| 亚洲精品伦理在线| 激情欧美一区二区| 欧洲视频一区二区| 久久九九久久九九| 日韩国产在线一| av不卡在线播放| 欧美tk—视频vk| 亚洲一区二区在线免费看| 国产酒店精品激情| 欧美日韩国产精品自在自线| 欧美经典三级视频一区二区三区| 日日嗨av一区二区三区四区| av一区二区三区四区| 欧美mv和日韩mv的网站| 亚洲一区免费在线观看| 高清久久久久久| 精品女同一区二区| 一区二区欧美在线观看| 成人高清伦理免费影院在线观看| 欧美一区二区三区四区高清| 亚洲精品视频在线看| 国产精品一线二线三线| 欧美精品免费视频| 亚洲婷婷国产精品电影人久久| 国产一区二区三区免费| 91麻豆精品国产91久久久资源速度 | 欧美电影免费提供在线观看| 中文字幕视频一区| 国产一区在线视频| 日韩欧美专区在线| 日韩综合小视频| 在线区一区二视频| 亚洲欧美aⅴ...| 成人国产亚洲欧美成人综合网| 欧美tk—视频vk| 免费精品视频在线| 在线不卡a资源高清| 一二三区精品视频| 色欧美日韩亚洲| 亚洲免费观看视频| 91看片淫黄大片一级| 国产精品天美传媒沈樵| 国产91精品久久久久久久网曝门 | av一区二区三区| 久久精品视频免费观看| 国产在线不卡一卡二卡三卡四卡| 日韩一级高清毛片| 日本一不卡视频| 欧美一级黄色大片| 麻豆精品视频在线观看视频| 欧美精品在线一区二区| 五月激情六月综合| 欧美日韩一级视频| 图片区日韩欧美亚洲| 7777精品伊人久久久大香线蕉 | 国内精品国产成人| 久久奇米777| 国产成人精品免费看| 国产日本欧洲亚洲| av午夜一区麻豆| 亚洲伦理在线免费看| 色国产精品一区在线观看| 亚洲综合无码一区二区| 欧美日韩一二区| 蜜臀va亚洲va欧美va天堂| 精品国产免费人成在线观看| 国产福利精品一区二区| 国产精品久线在线观看| 5858s免费视频成人| 美女国产一区二区| 国产亚洲视频系列| a级精品国产片在线观看| 亚洲激情六月丁香| 91精品国产综合久久精品图片 | 国产精品影视在线观看| 国产精品欧美一区喷水| 91在线看国产| 亚洲v中文字幕| 日韩欧美国产电影| 成人综合激情网| 亚洲精选视频在线| 欧美日韩国产综合视频在线观看| 美腿丝袜亚洲综合| 欧美激情中文字幕| 欧洲av一区二区嗯嗯嗯啊| 奇米色777欧美一区二区| 国产色产综合色产在线视频| 色婷婷综合久久| 男人操女人的视频在线观看欧美| 久久久久久久久久看片| 一本到不卡免费一区二区| 蜜臀精品一区二区三区在线观看 | 精品国产一区二区三区不卡 | 国产成人精品亚洲日本在线桃色| 亚洲欧洲国产日韩| 欧美丰满嫩嫩电影| 成人国产一区二区三区精品| 日韩中文字幕一区二区三区| 国产精品视频一二| 欧美一区二区三区成人| 国产91精品露脸国语对白| 亚洲v中文字幕| 国产三级欧美三级日产三级99| 91国模大尺度私拍在线视频| 国内精品久久久久影院色| 亚洲在线视频网站| 久久精品一区二区三区av| 欧美日韩在线播放三区| 豆国产96在线|亚洲| 日韩av不卡在线观看| 1000部国产精品成人观看| 精品久久久久久综合日本欧美 | 日韩三级电影网址| 91国产免费观看|