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

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

?? mppc.c

?? LInux 下的遠程桌面工具 Rdesktop
?? C
字號:
/* -*- c-basic-offset: 8 -*-   rdesktop: A Remote Desktop Protocol client.   Protocol services - RDP decompression   Copyright (C) Matthew Chapman 1999-2007   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;	RD_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一区二区三区免费野_久草精品视频
一区二区国产视频| 丰满放荡岳乱妇91ww| 激情文学综合网| 97久久精品人人爽人人爽蜜臀| 91精选在线观看| 亚洲欧美在线另类| 国产一区二区精品在线观看| 欧洲一区二区三区免费视频| 久久精品亚洲麻豆av一区二区| 视频一区二区中文字幕| 成人av网站在线| 久久婷婷国产综合国色天香 | 亚洲自拍偷拍欧美| 国产综合色产在线精品| 欧美精品第1页| 亚洲精品免费看| 99久久777色| 亚洲国产精品精华液ab| 黄色精品一二区| 欧美一区二区三区人| 亚洲成人在线观看视频| 99久久婷婷国产综合精品| 久久久久久久久久看片| 美女一区二区视频| 日韩午夜激情免费电影| 夜夜精品视频一区二区| 色噜噜狠狠色综合中国| 国产精品网曝门| 成人动漫中文字幕| 中文字幕欧美一| 99久久精品国产精品久久| 国产欧美一区二区三区鸳鸯浴| 久久国产精品露脸对白| 欧美不卡视频一区| 久久99精品国产麻豆婷婷洗澡| 欧美一级搡bbbb搡bbbb| 免费在线观看日韩欧美| 日韩一区二区在线观看| 免费成人美女在线观看| 精品国产乱子伦一区| 国产乱人伦偷精品视频不卡| 精品国产亚洲在线| 国产成人综合自拍| 欧美激情一区在线观看| av激情成人网| 一二三四区精品视频| 欧美日本乱大交xxxxx| 午夜精品久久久久久久| 日韩欧美国产午夜精品| 国内精品久久久久影院一蜜桃| 久久久久久综合| 成人av在线电影| 一区二区三区四区高清精品免费观看| 在线观看一区不卡| 日一区二区三区| 久久欧美一区二区| 99国产精品久久久| 亚洲成人在线网站| 久久久久久久av麻豆果冻| 成a人片国产精品| 亚洲成人自拍一区| 久久久久久综合| 91久久精品一区二区| 青椒成人免费视频| 中文成人综合网| 欧美喷水一区二区| 国产成人精品免费| 一区二区欧美精品| 久久一留热品黄| 日本丶国产丶欧美色综合| 久久疯狂做爰流白浆xx| 中文字幕在线免费不卡| 91精品综合久久久久久| 粉嫩高潮美女一区二区三区| 亚洲福利国产精品| 国产日本欧洲亚洲| 5566中文字幕一区二区电影| 成人一级视频在线观看| 亚洲成av人片在线| 中文字幕av一区二区三区免费看| 91成人免费网站| 国产一区二区成人久久免费影院 | 91精品综合久久久久久| 国产一二精品视频| 日韩福利视频导航| 亚洲女人****多毛耸耸8| 欧美成人三级在线| 欧美片网站yy| 色综合天天综合在线视频| 精品一区二区影视| 亚洲成av人综合在线观看| 国产精品欧美一区喷水| 日韩亚洲欧美一区| 欧美一级欧美三级在线观看| 国产suv一区二区三区88区| 日产欧产美韩系列久久99| 亚洲少妇30p| 国产亚洲精品7777| 日韩欧美国产一区二区三区 | 蜜臀av一区二区三区| 一区2区3区在线看| 国产精品福利一区| 2024国产精品视频| 日韩久久免费av| 欧美日韩专区在线| 欧美主播一区二区三区美女| 99这里只有久久精品视频| 国产成人精品免费视频网站| 黑人巨大精品欧美一区| 蜜桃精品视频在线观看| 免费精品视频最新在线| 亚洲成人一区二区在线观看| 一区二区三区精品视频| 一区二区三区中文在线观看| 亚洲视频一区在线观看| 亚洲婷婷综合色高清在线| 中文字幕av在线一区二区三区| 精品国产人成亚洲区| 久久先锋影音av鲁色资源网| 精品sm捆绑视频| 久久女同互慰一区二区三区| 欧美精品一区二区久久婷婷| 久久视频一区二区| 国产亲近乱来精品视频| 中文字幕乱码久久午夜不卡| 欧美国产日韩精品免费观看| 国产亚洲精品aa午夜观看| 天堂在线一区二区| 亚洲午夜电影网| 日本大胆欧美人术艺术动态| 亚洲福利视频一区二区| 日日摸夜夜添夜夜添亚洲女人| 日本成人中文字幕在线视频 | 精品久久人人做人人爽| 欧美大肚乱孕交hd孕妇| 久久久久久久久久久久久夜| 中文子幕无线码一区tr| 亚洲三级在线播放| 日韩主播视频在线| 国产高清在线观看免费不卡| 99久久精品国产麻豆演员表| 欧美熟乱第一页| 精品国产乱码久久久久久1区2区| 久久精品视频一区| 一区二区三区中文在线观看| 日本视频在线一区| 豆国产96在线|亚洲| 欧美亚洲综合色| 久久综合色播五月| 亚洲欧美日韩在线播放| 男人的天堂亚洲一区| 国产馆精品极品| 欧美无人高清视频在线观看| 精品久久久久久久人人人人传媒| 中文字幕精品在线不卡| 亚洲第一在线综合网站| 国产成人av一区| 欧美猛男男办公室激情| 国产无一区二区| 午夜影视日本亚洲欧洲精品| 国产一区二区三区综合| 欧美亚洲日本一区| 久久久亚洲午夜电影| 亚洲成人激情综合网| 国产精品一区久久久久| 欧美久久久久中文字幕| 国产精品久久久久国产精品日日| 日韩 欧美一区二区三区| 99riav一区二区三区| 精品久久99ma| 午夜影院久久久| www.一区二区| 久久亚洲春色中文字幕久久久| 亚洲mv在线观看| 97久久超碰国产精品电影| 久久综合九色综合97婷婷 | 国产精品久久久久影院| 另类成人小视频在线| 欧美三级一区二区| 亚洲欧洲99久久| 丰满少妇在线播放bd日韩电影| 日韩免费福利电影在线观看| 亚洲成人综合视频| 在线精品视频免费播放| 中文字幕一区二区三中文字幕| 国内精品视频666| 欧美mv日韩mv国产网站app| 亚洲成人动漫精品| 在线精品视频小说1| 亚洲欧美日韩中文播放| 99久久精品国产一区二区三区| 日本一区二区三区在线观看| 美女诱惑一区二区| 欧美一区二区三区四区在线观看| 亚洲国产欧美日韩另类综合 | 久久99国产精品免费| 日韩欧美一级特黄在线播放| 日精品一区二区三区| 91精品国产综合久久福利| 香蕉加勒比综合久久|