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

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

?? rdp.c

?? LInux 下的遠程桌面工具 Rdesktop
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* -*- c-basic-offset: 8 -*-   rdesktop: A Remote Desktop Protocol client.   Protocol services - RDP layer   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 <time.h>#ifndef _WIN32#include <errno.h>#include <unistd.h>#endif#include "rdesktop.h"#ifdef HAVE_ICONV#ifdef HAVE_ICONV_H#include <iconv.h>#endif#ifndef ICONV_CONST#define ICONV_CONST ""#endif#endifextern uint16 g_mcs_userid;extern char g_username[64];extern char g_codepage[16];extern RD_BOOL g_bitmap_compression;extern RD_BOOL g_orders;extern RD_BOOL g_encryption;extern RD_BOOL g_desktop_save;extern RD_BOOL g_polygon_ellipse_orders;extern RD_BOOL g_use_rdp5;extern uint16 g_server_rdp_version;extern uint32 g_rdp5_performanceflags;extern int g_server_depth;extern int g_width;extern int g_height;extern RD_BOOL g_bitmap_cache;extern RD_BOOL g_bitmap_cache_persist_enable;extern RD_BOOL g_numlock_sync;uint8 *g_next_packet;uint32 g_rdp_shareid;extern RDPCOMP g_mppc_dict;/* Session Directory support */extern RD_BOOL g_redirect;extern char g_redirect_server[64];extern char g_redirect_domain[16];extern char g_redirect_password[64];extern char g_redirect_username[64];extern char g_redirect_cookie[128];extern uint32 g_redirect_flags;/* END Session Directory support */#if WITH_DEBUGstatic uint32 g_packetno;#endif#ifdef HAVE_ICONVstatic RD_BOOL g_iconv_works = True;#endif/* Receive an RDP packet */static STREAMrdp_recv(uint8 * type){	static STREAM rdp_s;	uint16 length, pdu_type;	uint8 rdpver;	if ((rdp_s == NULL) || (g_next_packet >= rdp_s->end) || (g_next_packet == NULL))	{		rdp_s = sec_recv(&rdpver);		if (rdp_s == NULL)			return NULL;		if (rdpver == 0xff)		{			g_next_packet = rdp_s->end;			*type = 0;			return rdp_s;		}		else if (rdpver != 3)		{			/* rdp5_process should move g_next_packet ok */			rdp5_process(rdp_s);			*type = 0;			return rdp_s;		}		g_next_packet = rdp_s->p;	}	else	{		rdp_s->p = g_next_packet;	}	in_uint16_le(rdp_s, length);	/* 32k packets are really 8, keepalive fix */	if (length == 0x8000)	{		g_next_packet += 8;		*type = 0;		return rdp_s;	}	in_uint16_le(rdp_s, pdu_type);	in_uint8s(rdp_s, 2);	/* userid */	*type = pdu_type & 0xf;#if WITH_DEBUG	DEBUG(("RDP packet #%d, (type %x)\n", ++g_packetno, *type));	hexdump(g_next_packet, length);#endif /*  */	g_next_packet += length;	return rdp_s;}/* Initialise an RDP data packet */static STREAMrdp_init_data(int maxlen){	STREAM s;	s = sec_init(g_encryption ? SEC_ENCRYPT : 0, maxlen + 18);	s_push_layer(s, rdp_hdr, 18);	return s;}/* Send an RDP data packet */static voidrdp_send_data(STREAM s, uint8 data_pdu_type){	uint16 length;	s_pop_layer(s, rdp_hdr);	length = s->end - s->p;	out_uint16_le(s, length);	out_uint16_le(s, (RDP_PDU_DATA | 0x10));	out_uint16_le(s, (g_mcs_userid + 1001));	out_uint32_le(s, g_rdp_shareid);	out_uint8(s, 0);	/* pad */	out_uint8(s, 1);	/* streamid */	out_uint16_le(s, (length - 14));	out_uint8(s, data_pdu_type);	out_uint8(s, 0);	/* compress_type */	out_uint16(s, 0);	/* compress_len */	sec_send(s, g_encryption ? SEC_ENCRYPT : 0);}/* Output a string in Unicode */voidrdp_out_unistr(STREAM s, char *string, int len){#ifdef HAVE_ICONV	size_t ibl = strlen(string), obl = len + 2;	static iconv_t iconv_h = (iconv_t) - 1;	char *pin = string, *pout = (char *) s->p;	memset(pout, 0, len + 4);	if (g_iconv_works)	{		if (iconv_h == (iconv_t) - 1)		{			size_t i = 1, o = 4;			if ((iconv_h = iconv_open(WINDOWS_CODEPAGE, g_codepage)) == (iconv_t) - 1)			{				warning("rdp_out_unistr: iconv_open[%s -> %s] fail %p\n",					g_codepage, WINDOWS_CODEPAGE, iconv_h);				g_iconv_works = False;				rdp_out_unistr(s, string, len);				return;			}			if (iconv(iconv_h, (ICONV_CONST char **) &pin, &i, &pout, &o) ==			    (size_t) - 1)			{				iconv_close(iconv_h);				iconv_h = (iconv_t) - 1;				warning("rdp_out_unistr: iconv(1) fail, errno %d\n", errno);				g_iconv_works = False;				rdp_out_unistr(s, string, len);				return;			}			pin = string;			pout = (char *) s->p;		}		if (iconv(iconv_h, (ICONV_CONST char **) &pin, &ibl, &pout, &obl) == (size_t) - 1)		{			iconv_close(iconv_h);			iconv_h = (iconv_t) - 1;			warning("rdp_out_unistr: iconv(2) fail, errno %d\n", errno);			g_iconv_works = False;			rdp_out_unistr(s, string, len);			return;		}		s->p += len + 2;	}	else#endif	{		int i = 0, j = 0;		len += 2;		while (i < len)		{			s->p[i++] = string[j++];			s->p[i++] = 0;		}		s->p += len;	}}/* Input a string in Unicode * * Returns str_len of string */intrdp_in_unistr(STREAM s, char *string, int str_size, int in_len){#ifdef HAVE_ICONV	size_t ibl = in_len, obl = str_size - 1;	char *pin = (char *) s->p, *pout = string;	static iconv_t iconv_h = (iconv_t) - 1;	if (g_iconv_works)	{		if (iconv_h == (iconv_t) - 1)		{			if ((iconv_h = iconv_open(g_codepage, WINDOWS_CODEPAGE)) == (iconv_t) - 1)			{				warning("rdp_in_unistr: iconv_open[%s -> %s] fail %p\n",					WINDOWS_CODEPAGE, g_codepage, iconv_h);				g_iconv_works = False;				return rdp_in_unistr(s, string, str_size, in_len);			}		}		if (iconv(iconv_h, (ICONV_CONST char **) &pin, &ibl, &pout, &obl) == (size_t) - 1)		{			if (errno == E2BIG)			{				warning("server sent an unexpectedly long string, truncating\n");			}			else			{				iconv_close(iconv_h);				iconv_h = (iconv_t) - 1;				warning("rdp_in_unistr: iconv fail, errno %d\n", errno);				g_iconv_works = False;				return rdp_in_unistr(s, string, str_size, in_len);			}		}		/* we must update the location of the current STREAM for future reads of s->p */		s->p += in_len;		*pout = 0;		return pout - string;	}	else#endif	{		int i = 0;		int len = in_len / 2;		int rem = 0;		if (len > str_size - 1)		{			warning("server sent an unexpectedly long string, truncating\n");			len = str_size - 1;			rem = in_len - 2 * len;		}		while (i < len)		{			in_uint8a(s, &string[i++], 1);			in_uint8s(s, 1);		}		in_uint8s(s, rem);		string[len] = 0;		return len;	}}/* Parse a logon info packet */static voidrdp_send_logon_info(uint32 flags, char *domain, char *user,		    char *password, char *program, char *directory){	char *ipaddr = tcp_get_address();	int len_domain = 2 * strlen(domain);	int len_user = 2 * strlen(user);	int len_password = 2 * strlen(password);	int len_program = 2 * strlen(program);	int len_directory = 2 * strlen(directory);	int len_ip = 2 * strlen(ipaddr);	int len_dll = 2 * strlen("C:\\WINNT\\System32\\mstscax.dll");	int packetlen = 0;	uint32 sec_flags = g_encryption ? (SEC_LOGON_INFO | SEC_ENCRYPT) : SEC_LOGON_INFO;	STREAM s;	time_t t = time(NULL);	time_t tzone;	if (!g_use_rdp5 || 1 == g_server_rdp_version)	{		DEBUG_RDP5(("Sending RDP4-style Logon packet\n"));		s = sec_init(sec_flags, 18 + len_domain + len_user + len_password			     + len_program + len_directory + 10);		out_uint32(s, 0);		out_uint32_le(s, flags);		out_uint16_le(s, len_domain);		out_uint16_le(s, len_user);		out_uint16_le(s, len_password);		out_uint16_le(s, len_program);		out_uint16_le(s, len_directory);		rdp_out_unistr(s, domain, len_domain);		rdp_out_unistr(s, user, len_user);		rdp_out_unistr(s, password, len_password);		rdp_out_unistr(s, program, len_program);		rdp_out_unistr(s, directory, len_directory);	}	else	{		flags |= RDP_LOGON_BLOB;		DEBUG_RDP5(("Sending RDP5-style Logon packet\n"));		packetlen = 4 +	/* Unknown uint32 */			4 +	/* flags */			2 +	/* len_domain */			2 +	/* len_user */			(flags & RDP_LOGON_AUTO ? 2 : 0) +	/* len_password */			(flags & RDP_LOGON_BLOB ? 2 : 0) +	/* Length of BLOB */			2 +	/* len_program */			2 +	/* len_directory */			(0 < len_domain ? len_domain : 2) +	/* domain */			len_user + (flags & RDP_LOGON_AUTO ? len_password : 0) + 0 +	/* We have no 512 byte BLOB. Perhaps we must? */			(flags & RDP_LOGON_BLOB && !(flags & RDP_LOGON_AUTO) ? 2 : 0) +	/* After the BLOB is a unknown int16. If there is a BLOB, that is. */			(0 < len_program ? len_program : 2) + (0 < len_directory ? len_directory : 2) + 2 +	/* Unknown (2) */			2 +	/* Client ip length */			len_ip +	/* Client ip */			2 +	/* DLL string length */			len_dll +	/* DLL string */			2 +	/* Unknown */			2 +	/* Unknown */			64 +	/* Time zone #0 */			2 +	/* Unknown */			64 +	/* Time zone #1 */			32;	/* Unknown */		s = sec_init(sec_flags, packetlen);		DEBUG_RDP5(("Called sec_init with packetlen %d\n", packetlen));		out_uint32(s, 0);	/* Unknown */		out_uint32_le(s, flags);		out_uint16_le(s, len_domain);		out_uint16_le(s, len_user);		if (flags & RDP_LOGON_AUTO)		{			out_uint16_le(s, len_password);		}		if (flags & RDP_LOGON_BLOB && !(flags & RDP_LOGON_AUTO))		{			out_uint16_le(s, 0);		}		out_uint16_le(s, len_program);		out_uint16_le(s, len_directory);		if (0 < len_domain)			rdp_out_unistr(s, domain, len_domain);		else			out_uint16_le(s, 0);		rdp_out_unistr(s, user, len_user);		if (flags & RDP_LOGON_AUTO)		{			rdp_out_unistr(s, password, len_password);		}		if (flags & RDP_LOGON_BLOB && !(flags & RDP_LOGON_AUTO))		{			out_uint16_le(s, 0);		}		if (0 < len_program)		{			rdp_out_unistr(s, program, len_program);		}		else		{			out_uint16_le(s, 0);		}		if (0 < len_directory)		{			rdp_out_unistr(s, directory, len_directory);		}		else		{			out_uint16_le(s, 0);		}		out_uint16_le(s, 2);		out_uint16_le(s, len_ip + 2);	/* Length of client ip */		rdp_out_unistr(s, ipaddr, len_ip);		out_uint16_le(s, len_dll + 2);		rdp_out_unistr(s, "C:\\WINNT\\System32\\mstscax.dll", len_dll);		tzone = (mktime(gmtime(&t)) - mktime(localtime(&t))) / 60;		out_uint32_le(s, tzone);		rdp_out_unistr(s, "GTB, normaltid", 2 * strlen("GTB, normaltid"));		out_uint8s(s, 62 - 2 * strlen("GTB, normaltid"));		out_uint32_le(s, 0x0a0000);		out_uint32_le(s, 0x050000);		out_uint32_le(s, 3);		out_uint32_le(s, 0);		out_uint32_le(s, 0);		rdp_out_unistr(s, "GTB, sommartid", 2 * strlen("GTB, sommartid"));		out_uint8s(s, 62 - 2 * strlen("GTB, sommartid"));		out_uint32_le(s, 0x30000);		out_uint32_le(s, 0x050000);		out_uint32_le(s, 2);		out_uint32(s, 0);		out_uint32_le(s, 0xffffffc4);		out_uint32_le(s, 0xfffffffe);		out_uint32_le(s, g_rdp5_performanceflags);		out_uint16(s, 0);	}	s_mark_end(s);	sec_send(s, sec_flags);}/* Send a control PDU */static voidrdp_send_control(uint16 action){	STREAM s;	s = rdp_init_data(8);	out_uint16_le(s, action);	out_uint16(s, 0);	/* userid */	out_uint32(s, 0);	/* control id */	s_mark_end(s);	rdp_send_data(s, RDP_DATA_PDU_CONTROL);}/* Send a synchronisation PDU */static voidrdp_send_synchronise(void){	STREAM s;	s = rdp_init_data(4);	out_uint16_le(s, 1);	/* type */	out_uint16_le(s, 1002);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
极品瑜伽女神91| 欧美精品在线一区二区| 欧美日韩精品一区二区三区蜜桃 | 国产日韩成人精品| 亚洲一二三区不卡| 成人av动漫在线| 欧美精品一区二区三区在线播放 | 日本中文字幕一区| 91丝袜国产在线播放| 精品久久久久久久久久久院品网| 亚洲精品国产精品乱码不99 | 亚洲综合久久久久| 国产成人在线网站| 欧美大肚乱孕交hd孕妇| 天天爽夜夜爽夜夜爽精品视频| 不卡一区中文字幕| 欧美国产精品专区| 久久国产成人午夜av影院| 欧美日韩成人在线| 亚洲主播在线观看| 欧美在线一区二区三区| 中文字幕亚洲不卡| 99久久久久久99| 中文字幕第一区| 国产精品18久久久久| 欧美一级黄色片| 奇米精品一区二区三区在线观看一 | 久久婷婷久久一区二区三区| 另类成人小视频在线| 日韩欧美一级二级三级久久久| 亚洲成av人片在线观看无码| 欧美亚洲高清一区二区三区不卡| 亚洲精品午夜久久久| 日本韩国一区二区三区视频| 曰韩精品一区二区| 欧美美女黄视频| 日本成人在线网站| 337p日本欧洲亚洲大胆色噜噜| 经典一区二区三区| 国产欧美一区二区精品性| 国产成人精品在线看| 国产精品视频看| 91麻豆国产自产在线观看| 亚洲视频每日更新| 欧美三级中文字幕| 免费欧美高清视频| 国产亚洲欧美激情| 99久久国产综合色|国产精品| 亚洲日本va在线观看| 在线观看日产精品| 欧美a一区二区| 久久综合网色—综合色88| 成人午夜av影视| 一区二区三区产品免费精品久久75| 欧美三级中文字| 久久不见久久见免费视频1| www国产精品av| 91浏览器打开| 日本女优在线视频一区二区| 久久久久久亚洲综合影院红桃| 成人视屏免费看| 亚洲123区在线观看| 2020国产精品久久精品美国| 99久免费精品视频在线观看| 偷拍日韩校园综合在线| 国产欧美日韩亚州综合| 在线欧美小视频| 国内国产精品久久| 一片黄亚洲嫩模| 337p日本欧洲亚洲大胆精品| av毛片久久久久**hd| 免费欧美在线视频| 亚洲欧美电影一区二区| 日韩一区二区在线播放| 色香色香欲天天天影视综合网| 人妖欧美一区二区| 亚洲人成小说网站色在线| 日韩欧美一级片| 在线精品视频小说1| 国产成人综合网| 青青草一区二区三区| 亚洲欧美日韩中文字幕一区二区三区 | 色综合久久六月婷婷中文字幕| 日本免费新一区视频| 亚洲免费观看在线视频| 久久久久久9999| 欧美调教femdomvk| 成人精品gif动图一区| 久久99久久久久久久久久久| 亚洲一区二区三区爽爽爽爽爽| 日本一区二区综合亚洲| 日韩欧美一区二区视频| 欧美日韩中字一区| www.性欧美| 丁香五精品蜜臀久久久久99网站 | 一区二区免费看| 久久九九影视网| 精品日韩在线观看| 欧美精品1区2区3区| 色噜噜夜夜夜综合网| 成人av网站免费| 丁香网亚洲国际| 国产一区91精品张津瑜| 美女性感视频久久| 日韩av网站在线观看| 性做久久久久久免费观看欧美| 亚洲精品中文字幕乱码三区| 亚洲欧洲成人精品av97| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美日韩国产首页在线观看| 色屁屁一区二区| 日本高清不卡一区| 91女人视频在线观看| 91在线国产福利| 99久久伊人网影院| 91天堂素人约啪| 色中色一区二区| 在线观看欧美黄色| 欧美日韩高清一区二区| 91精品视频网| 日韩精品一区二区三区四区| 久久伊99综合婷婷久久伊| 久久久久久夜精品精品免费| 国产日韩欧美综合在线| 国产精品麻豆久久久| 国产精品久久久一本精品| 国产精品久久久久久久久免费相片| 国产精品麻豆一区二区| 一区二区在线看| 日韩电影在线观看电影| 久色婷婷小香蕉久久| 国产成人免费视频精品含羞草妖精 | 精品在线亚洲视频| 国产激情精品久久久第一区二区| 国产剧情一区二区| 91免费观看视频| 欧美日韩电影在线播放| 久久亚洲精精品中文字幕早川悠里| 中文字幕乱码日本亚洲一区二区 | 麻豆91在线播放| 国产一区激情在线| 92精品国产成人观看免费| 欧美三级电影一区| 久久综合色天天久久综合图片| 亚洲国产精品成人综合色在线婷婷| 亚洲素人一区二区| 轻轻草成人在线| 成人99免费视频| 在线电影欧美成精品| 久久精品无码一区二区三区| 一区二区三区中文在线观看| 免费在线成人网| 99精品在线观看视频| 69堂成人精品免费视频| 国产精品不卡在线观看| 日韩福利电影在线观看| av在线免费不卡| 国产欧美在线观看一区| 亚洲线精品一区二区三区| 国内精品国产成人| 欧美午夜精品一区| 国产三级欧美三级日产三级99| 亚洲国产精品人人做人人爽| 大陆成人av片| 日韩精品中文字幕在线不卡尤物| 亚洲欧美日韩在线不卡| 国产一区二区三区精品欧美日韩一区二区三区 | 国产精品第13页| 激情综合五月天| 欧美美女视频在线观看| 亚洲欧洲日本在线| 国产剧情一区在线| 欧美一级黄色片| 亚洲高清一区二区三区| 不卡一卡二卡三乱码免费网站| 精品日韩在线观看| 日韩vs国产vs欧美| 91福利视频网站| 自拍偷在线精品自拍偷无码专区| 韩国女主播一区二区三区| 91精品国产日韩91久久久久久| 亚洲色图丝袜美腿| av动漫一区二区| 中文字幕乱码亚洲精品一区| 精品系列免费在线观看| 欧美一区二区网站| 亚洲va欧美va国产va天堂影院| 91亚洲精品久久久蜜桃网站| 中文一区一区三区高中清不卡| 精品一区二区av| 欧美mv日韩mv| 精品一区二区三区日韩| 日韩一区二区在线免费观看| 日本视频中文字幕一区二区三区| 欧美性色黄大片| 一区二区三区中文字幕电影| 色婷婷激情久久| 一区二区三区成人| 欧美日韩另类国产亚洲欧美一级| 亚洲午夜精品一区二区三区他趣|