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

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

?? mppc.c

?? rdesktop是一個開放源碼的Window NT中斷服務器的客戶端
?? C
字號:
/* -*- c-basic-offset: 8 -*-   rdesktop: A Remote Desktop Protocol client.   Protocol services - RDP decompression   Copyright (C) Matthew Chapman 1999-2005   This program 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 2 of the License, or   (at your option) any later version.   This program 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 this program; if not, write to the Free Software   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.*/#include <stdio.h>#include <string.h>#include "rdesktop.h"/* mppc decompression                       *//* http://www.faqs.org/rfcs/rfc2118.html    *//* Contacts:                                *//* hifn contact mentioned in the faq is     *//* Robert Friend rfriend at hifn dot com    *//* if you have questions regarding MPPC     *//* our contact is                           *//* Guus Dhaeze  GDhaeze at hifn dot com     *//* Licensing:                               *//* decompression is alright as long as we   *//* don't compress data                      *//* Algorithm: *//* as the rfc states the algorithm seems to *//* be LZ77 with a sliding buffer            *//* that is empty at init.                   *//* the algorithm is called LZS and is       *//* patented for another couple of years.    *//* more information is available in         *//* http://www.ietf.org/ietf/IPR/hifn-ipr-draft-friend-tls-lzs-compression.txt */RDPCOMP g_mppc_dict;intmppc_expand(uint8 * data, uint32 clen, uint8 ctype, uint32 * roff, uint32 * rlen){	int k, walker_len = 0, walker;	uint32 i = 0;	int next_offset, match_off;	int match_len;	int old_offset, match_bits;	BOOL big = ctype & RDP_MPPC_BIG ? True : False;	uint8 *dict = g_mppc_dict.hist;	if ((ctype & RDP_MPPC_COMPRESSED) == 0)	{		*roff = 0;		*rlen = clen;		return 0;	}	if ((ctype & RDP_MPPC_RESET) != 0)	{		g_mppc_dict.roff = 0;	}	if ((ctype & RDP_MPPC_FLUSH) != 0)	{		memset(dict, 0, RDP_MPPC_DICT_SIZE);		g_mppc_dict.roff = 0;	}	*roff = 0;	*rlen = 0;	walker = g_mppc_dict.roff;	next_offset = walker;	old_offset = next_offset;	*roff = old_offset;	if (clen == 0)		return 0;	clen += i;	do	{		if (walker_len == 0)		{			if (i >= clen)				break;			walker = data[i++] << 24;			walker_len = 8;		}		if (walker >= 0)		{			if (walker_len < 8)			{				if (i >= clen)				{					if (walker != 0)						return -1;					break;				}				walker |= (data[i++] & 0xff) << (24 - walker_len);				walker_len += 8;			}			if (next_offset >= RDP_MPPC_DICT_SIZE)				return -1;			dict[next_offset++] = (((uint32) walker) >> ((uint32) 24));			walker <<= 8;			walker_len -= 8;			continue;		}		walker <<= 1;		/* fetch next 8-bits */		if (--walker_len == 0)		{			if (i >= clen)				return -1;			walker = data[i++] << 24;			walker_len = 8;		}		/* literal decoding */		if (walker >= 0)		{			if (walker_len < 8)			{				if (i >= clen)					return -1;				walker |= (data[i++] & 0xff) << (24 - walker_len);				walker_len += 8;			}			if (next_offset >= RDP_MPPC_DICT_SIZE)				return -1;			dict[next_offset++] = (uint8) (walker >> 24 | 0x80);			walker <<= 8;			walker_len -= 8;			continue;		}		/* decode offset  */		/* length pair    */		walker <<= 1;		if (--walker_len < (big ? 3 : 2))		{			if (i >= clen)				return -1;			walker |= (data[i++] & 0xff) << (24 - walker_len);			walker_len += 8;		}		if (big)		{			/* offset decoding where offset len is:			   -63: 11111 followed by the lower 6 bits of the value			   64-319: 11110 followed by the lower 8 bits of the value ( value - 64 )			   320-2367: 1110 followed by lower 11 bits of the value ( value - 320 )			   2368-65535: 110 followed by lower 16 bits of the value ( value - 2368 )			 */			switch (((uint32) walker) >> ((uint32) 29))			{				case 7:	/* - 63 */					for (; walker_len < 9; walker_len += 8)					{						if (i >= clen)							return -1;						walker |= (data[i++] & 0xff) << (24 - walker_len);					}					walker <<= 3;					match_off = ((uint32) walker) >> ((uint32) 26);					walker <<= 6;					walker_len -= 9;					break;				case 6:	/* 64 - 319 */					for (; walker_len < 11; walker_len += 8)					{						if (i >= clen)							return -1;						walker |= (data[i++] & 0xff) << (24 - walker_len);					}					walker <<= 3;					match_off = (((uint32) walker) >> ((uint32) 24)) + 64;					walker <<= 8;					walker_len -= 11;					break;				case 5:				case 4:	/* 320 - 2367 */					for (; walker_len < 13; walker_len += 8)					{						if (i >= clen)							return -1;						walker |= (data[i++] & 0xff) << (24 - walker_len);					}					walker <<= 2;					match_off = (((uint32) walker) >> ((uint32) 21)) + 320;					walker <<= 11;					walker_len -= 13;					break;				default:	/* 2368 - 65535 */					for (; walker_len < 17; walker_len += 8)					{						if (i >= clen)							return -1;						walker |= (data[i++] & 0xff) << (24 - walker_len);					}					walker <<= 1;					match_off = (((uint32) walker) >> ((uint32) 16)) + 2368;					walker <<= 16;					walker_len -= 17;					break;			}		}		else		{			/* offset decoding where offset len is:			   -63: 1111 followed by the lower 6 bits of the value			   64-319: 1110 followed by the lower 8 bits of the value ( value - 64 )			   320-8191: 110 followed by the lower 13 bits of the value ( value - 320 )			 */			switch (((uint32) walker) >> ((uint32) 30))			{				case 3:	/* - 63 */					if (walker_len < 8)					{						if (i >= clen)							return -1;						walker |= (data[i++] & 0xff) << (24 - walker_len);						walker_len += 8;					}					walker <<= 2;					match_off = ((uint32) walker) >> ((uint32) 26);					walker <<= 6;					walker_len -= 8;					break;				case 2:	/* 64 - 319 */					for (; walker_len < 10; walker_len += 8)					{						if (i >= clen)							return -1;						walker |= (data[i++] & 0xff) << (24 - walker_len);					}					walker <<= 2;					match_off = (((uint32) walker) >> ((uint32) 24)) + 64;					walker <<= 8;					walker_len -= 10;					break;				default:	/* 320 - 8191 */					for (; walker_len < 14; walker_len += 8)					{						if (i >= clen)							return -1;						walker |= (data[i++] & 0xff) << (24 - walker_len);					}					match_off = (walker >> 18) + 320;					walker <<= 14;					walker_len -= 14;					break;			}		}		if (walker_len == 0)		{			if (i >= clen)				return -1;			walker = data[i++] << 24;			walker_len = 8;		}		/* decode length of match */		match_len = 0;		if (walker >= 0)		{		/* special case - length of 3 is in bit 0 */			match_len = 3;			walker <<= 1;			walker_len--;		}		else		{			/* this is how it works len of:			   4-7: 10 followed by 2 bits of the value			   8-15: 110 followed by 3 bits of the value			   16-31: 1110 followed by 4 bits of the value			   32-63: .... and so forth			   64-127:			   128-255:			   256-511:			   512-1023:			   1024-2047:			   2048-4095:			   4096-8191:			   i.e. 4097 is encoded as: 111111111110 000000000001			   meaning 4096 + 1...			 */			match_bits = big ? 14 : 11;	/* 11 or 14 bits of value at most */			do			{				walker <<= 1;				if (--walker_len == 0)				{					if (i >= clen)						return -1;					walker = data[i++] << 24;					walker_len = 8;				}				if (walker >= 0)					break;				if (--match_bits == 0)				{					return -1;				}			}			while (1);			match_len = (big ? 16 : 13) - match_bits;			walker <<= 1;			if (--walker_len < match_len)			{				for (; walker_len < match_len; walker_len += 8)				{					if (i >= clen)					{						return -1;					}					walker |= (data[i++] & 0xff) << (24 - walker_len);				}			}			match_bits = match_len;			match_len =				((walker >> (32 - match_bits)) & (~(-1 << match_bits))) | (1 <<											   match_bits);			walker <<= match_bits;			walker_len -= match_bits;		}		if (next_offset + match_len >= RDP_MPPC_DICT_SIZE)		{			return -1;		}		/* memory areas can overlap - meaning we can't use memXXX functions */		k = (next_offset - match_off) & (big ? 65535 : 8191);		do		{			dict[next_offset++] = dict[k++];		}		while (--match_len != 0);	}	while (1);	/* store history offset */	g_mppc_dict.roff = next_offset;	*roff = old_offset;	*rlen = next_offset - old_offset;	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
粉嫩aⅴ一区二区三区四区| 国产综合色在线视频区| 国产欧美日韩另类一区| 久久综合99re88久久爱| 欧美不卡一区二区三区| 日韩亚洲国产中文字幕欧美| 制服.丝袜.亚洲.中文.综合| 欧美日韩电影一区| 欧美精品日韩精品| 日韩美女主播在线视频一区二区三区 | 国产精品久久久久天堂| 中文在线一区二区| 亚洲欧美日韩一区二区三区在线观看| 国产精品不卡一区二区三区| 亚洲免费观看视频| 天天综合网天天综合色| 免费观看日韩av| 国产不卡视频在线观看| 99热在这里有精品免费| 91在线精品秘密一区二区| 欧美午夜影院一区| 日韩一区二区三区在线观看| 欧美精品一区二区三区视频| 国产精品福利一区| 三级影片在线观看欧美日韩一区二区| 美女网站色91| 91看片淫黄大片一级| 91精品欧美久久久久久动漫| 国产亚洲一二三区| 亚洲高清久久久| 国产精品资源网| 欧美色电影在线| 久久九九久精品国产免费直播| 亚洲男女毛片无遮挡| 日韩精品一二区| 成人黄色在线网站| 91精品欧美福利在线观看| 中文字幕免费一区| 麻豆国产精品一区二区三区| 99re这里只有精品首页| 欧美岛国在线观看| 一区二区三区精品在线| 国产精一区二区三区| 欧美做爰猛烈大尺度电影无法无天| 日韩欧美电影在线| 亚洲一级二级在线| 99久久婷婷国产综合精品电影| 精品久久久久久无| 亚洲第一综合色| 99久久伊人精品| 亚洲国产精品传媒在线观看| 日韩电影在线观看电影| 色综合久久综合网97色综合| 国产午夜久久久久| 精品一二线国产| 欧美日韩精品高清| 亚洲精品国产无套在线观| 成人免费毛片片v| 久久综合成人精品亚洲另类欧美 | 欧美精三区欧美精三区| 亚洲女子a中天字幕| 国产成人高清视频| 久久只精品国产| 久久精品国产一区二区| 777xxx欧美| 日本在线不卡视频一二三区| 欧美午夜一区二区| 亚洲高清免费一级二级三级| 在线观看一区二区精品视频| 国产精品二三区| av在线一区二区| 中文字幕国产精品一区二区| 国产精品99久久久久久久vr| 欧美精品一区二区在线播放 | 久久久三级国产网站| 久久99蜜桃精品| 欧美不卡激情三级在线观看| 久久超碰97人人做人人爱| 欧美电影免费观看高清完整版在线 | 亚洲精选视频在线| 99久久99久久久精品齐齐| 日本一区二区电影| 99精品视频在线观看| 中文字幕色av一区二区三区| 高清国产一区二区| 日韩一区有码在线| 欧美亚州韩日在线看免费版国语版| 亚洲欧美偷拍另类a∨色屁股| 97久久超碰精品国产| 亚洲综合久久久久| 欧美日本不卡视频| 开心九九激情九九欧美日韩精美视频电影| 日韩欧美自拍偷拍| 国产福利精品一区| 亚洲毛片av在线| 欧美福利视频一区| 韩国精品在线观看| 国产精品传媒入口麻豆| 91久久精品一区二区| 免费视频一区二区| 国产精品久久久久婷婷| 欧美日韩大陆一区二区| 国产一区在线观看视频| 日韩理论电影院| 日韩欧美国产精品一区| av在线这里只有精品| 日本女人一区二区三区| 久久精品这里都是精品| 在线观看三级视频欧美| 国内精品伊人久久久久av影院| 中文字幕在线不卡视频| 91精品国产一区二区三区蜜臀| 国产精品影视网| 日韩电影在线一区二区三区| 国产欧美精品在线观看| 91精品国产综合久久香蕉麻豆| 高清成人免费视频| 日韩影视精彩在线| 亚洲欧美另类在线| 国产天堂亚洲国产碰碰| 在线不卡免费av| 色视频一区二区| 丁香六月综合激情| 韩日精品视频一区| 日产欧产美韩系列久久99| 亚洲天堂免费看| 日本一区二区三区视频视频| 欧美一区二区二区| 欧美日韩在线电影| 一本大道综合伊人精品热热| 国产麻豆精品在线| 日韩专区中文字幕一区二区| 亚洲日本成人在线观看| 欧美国产禁国产网站cc| 亚洲精品在线一区二区| 7777精品伊人久久久大香线蕉超级流畅 | 51精品秘密在线观看| 91蝌蚪国产九色| 成人教育av在线| 国产成人h网站| 国产剧情在线观看一区二区| 日韩成人一级大片| 免费高清成人在线| 免费观看在线综合色| 日产国产高清一区二区三区| 亚洲高清视频中文字幕| 亚洲制服丝袜一区| 亚洲午夜日本在线观看| 一区二区三区小说| 亚洲天堂2014| 亚洲美女免费视频| 一区二区三区四区在线免费观看| 日韩美女视频19| 亚洲曰韩产成在线| 亚洲国产欧美另类丝袜| 亚洲成人av在线电影| 亚洲成人激情综合网| 亚洲电影一区二区三区| 无码av免费一区二区三区试看| 午夜精品久久久久久久久| 午夜成人在线视频| 免费成人av资源网| 国产在线精品一区二区三区不卡 | 91精品国产综合久久精品图片| 欧美日产国产精品| 日韩美女一区二区三区四区| 欧美电影免费观看高清完整版在| 日韩三级视频在线看| 久久一区二区视频| 中文字幕av资源一区| 亚洲欧洲三级电影| 一区二区三区波多野结衣在线观看| 亚洲一区在线播放| 欧美aⅴ一区二区三区视频| 国模少妇一区二区三区| 国产91清纯白嫩初高中在线观看| hitomi一区二区三区精品| 色哟哟亚洲精品| 制服.丝袜.亚洲.另类.中文| 久久人人97超碰com| 亚洲视频免费在线观看| 午夜精彩视频在线观看不卡| 精品一区免费av| 成人av免费在线观看| 欧美精品粉嫩高潮一区二区| 2023国产精品自拍| 亚洲欧美日韩国产中文在线| 日本 国产 欧美色综合| 国产成人av网站| 欧美在线色视频| 久久精品夜夜夜夜久久| 亚洲午夜精品网| 国产成人自拍网| 欧美日韩久久久一区| 久久美女高清视频| 亚洲图片有声小说| 高清国产一区二区三区| 欧美一级片在线| 亚洲美女视频在线| 国产一区二区网址|