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

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

?? seamless.c

?? ReactOS是一些高手根據Windows XP的內核編寫出的類XP。內核實現機理和API函數調用幾乎相同。甚至可以兼容XP的程序。喜歡研究系統內核的人可以看一看。
?? C
字號:
/* -*- c-basic-offset: 8 -*-
   rdesktop: A Remote Desktop Protocol client.
   Seamless Windows support
   Copyright (C) Peter Astrand <astrand@cendio.se> 2005-2006
   
   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 "rdesktop.h"
#include <stdarg.h>
#include <assert.h>

/* #define WITH_DEBUG_SEAMLESS */

#ifdef WITH_DEBUG_SEAMLESS
#define DEBUG_SEAMLESS(args) printf args;
#else
#define DEBUG_SEAMLESS(args)
#endif

static char *
seamless_get_token(char **s)
{
	char *comma, *head;
	head = *s;

	if (!head)
		return NULL;

	comma = strchr(head, ',');
	if (comma)
	{
		*comma = '\0';
		*s = comma + 1;
	}
	else
	{
		*s = NULL;
	}

	return head;
}


static BOOL
seamless_process_line(RDPCLIENT * This, const char *line, void *data)
{
	char *p, *l;
	char *tok1, *tok2, *tok3, *tok4, *tok5, *tok6, *tok7, *tok8;
	unsigned long id, flags;
	char *endptr;

	l = xstrdup(line);
	p = l;

	DEBUG_SEAMLESS(("seamlessrdp got:%s\n", p));

	tok1 = seamless_get_token(&p);
	tok2 = seamless_get_token(&p);
	tok3 = seamless_get_token(&p);
	tok4 = seamless_get_token(&p);
	tok5 = seamless_get_token(&p);
	tok6 = seamless_get_token(&p);
	tok7 = seamless_get_token(&p);
	tok8 = seamless_get_token(&p);

	if (!strcmp("CREATE", tok1))
	{
		unsigned long group, parent;
		if (!tok6)
			return False;

		id = strtoul(tok3, &endptr, 0);
		if (*endptr)
			return False;

		group = strtoul(tok4, &endptr, 0);
		if (*endptr)
			return False;

		parent = strtoul(tok5, &endptr, 0);
		if (*endptr)
			return False;

		flags = strtoul(tok6, &endptr, 0);
		if (*endptr)
			return False;

		ui_seamless_create_window(This, id, group, parent, flags);
	}
	else if (!strcmp("DESTROY", tok1))
	{
		if (!tok4)
			return False;

		id = strtoul(tok3, &endptr, 0);
		if (*endptr)
			return False;

		flags = strtoul(tok4, &endptr, 0);
		if (*endptr)
			return False;

		ui_seamless_destroy_window(This, id, flags);

	}
	else if (!strcmp("DESTROYGRP", tok1))
	{
		if (!tok4)
			return False;

		id = strtoul(tok3, &endptr, 0);
		if (*endptr)
			return False;

		flags = strtoul(tok4, &endptr, 0);
		if (*endptr)
			return False;

		ui_seamless_destroy_group(This, id, flags);
	}
	else if (!strcmp("SETICON", tok1))
	{
		unimpl("SeamlessRDP SETICON1\n");
	}
	else if (!strcmp("POSITION", tok1))
	{
		int x, y, width, height;

		if (!tok8)
			return False;

		id = strtoul(tok3, &endptr, 0);
		if (*endptr)
			return False;

		x = strtol(tok4, &endptr, 0);
		if (*endptr)
			return False;
		y = strtol(tok5, &endptr, 0);
		if (*endptr)
			return False;

		width = strtol(tok6, &endptr, 0);
		if (*endptr)
			return False;
		height = strtol(tok7, &endptr, 0);
		if (*endptr)
			return False;

		flags = strtoul(tok8, &endptr, 0);
		if (*endptr)
			return False;

		ui_seamless_move_window(This, id, x, y, width, height, flags);
	}
	else if (!strcmp("ZCHANGE", tok1))
	{
		unsigned long behind;

		id = strtoul(tok3, &endptr, 0);
		if (*endptr)
			return False;

		behind = strtoul(tok4, &endptr, 0);
		if (*endptr)
			return False;

		flags = strtoul(tok5, &endptr, 0);
		if (*endptr)
			return False;

		ui_seamless_restack_window(This, id, behind, flags);
	}
	else if (!strcmp("TITLE", tok1))
	{
		if (!tok5)
			return False;

		id = strtoul(tok3, &endptr, 0);
		if (*endptr)
			return False;

		flags = strtoul(tok5, &endptr, 0);
		if (*endptr)
			return False;

		ui_seamless_settitle(This, id, tok4, flags);
	}
	else if (!strcmp("STATE", tok1))
	{
		unsigned int state;

		if (!tok5)
			return False;

		id = strtoul(tok3, &endptr, 0);
		if (*endptr)
			return False;

		state = strtoul(tok4, &endptr, 0);
		if (*endptr)
			return False;

		flags = strtoul(tok5, &endptr, 0);
		if (*endptr)
			return False;

		ui_seamless_setstate(This, id, state, flags);
	}
	else if (!strcmp("DEBUG", tok1))
	{
		DEBUG_SEAMLESS(("SeamlessRDP:%s\n", line));
	}
	else if (!strcmp("SYNCBEGIN", tok1))
	{
		if (!tok3)
			return False;

		flags = strtoul(tok3, &endptr, 0);
		if (*endptr)
			return False;

		ui_seamless_syncbegin(This, flags);
	}
	else if (!strcmp("SYNCEND", tok1))
	{
		if (!tok3)
			return False;

		flags = strtoul(tok3, &endptr, 0);
		if (*endptr)
			return False;

		/* do nothing, currently */
	}
	else if (!strcmp("HELLO", tok1))
	{
		if (!tok3)
			return False;

		flags = strtoul(tok3, &endptr, 0);
		if (*endptr)
			return False;

		ui_seamless_begin(This, !!(flags & SEAMLESSRDP_HELLO_HIDDEN));
	}
	else if (!strcmp("ACK", tok1))
	{
		unsigned int serial;

		serial = strtoul(tok3, &endptr, 0);
		if (*endptr)
			return False;

		ui_seamless_ack(This, serial);
	}
	else if (!strcmp("HIDE", tok1))
	{
		if (!tok3)
			return False;

		flags = strtoul(tok3, &endptr, 0);
		if (*endptr)
			return False;

		ui_seamless_hide_desktop(This);
	}
	else if (!strcmp("UNHIDE", tok1))
	{
		if (!tok3)
			return False;

		flags = strtoul(tok3, &endptr, 0);
		if (*endptr)
			return False;

		ui_seamless_unhide_desktop(This);
	}


	xfree(l);
	return True;
}


static BOOL
seamless_line_handler(RDPCLIENT * This, const char *line, void *data)
{
	if (!seamless_process_line(This, line, data))
	{
		warning("SeamlessRDP: Invalid request:%s\n", line);
	}
	return True;
}


static void
seamless_process(RDPCLIENT * This, STREAM s)
{
	unsigned int pkglen;
	static char *rest = NULL;
	char *buf;

	pkglen = s->end - s->p;
	/* str_handle_lines requires null terminated strings */
	buf = xmalloc(pkglen + 1);
	STRNCPY(buf, (char *) s->p, pkglen + 1);
#if 0
	printf("seamless recv:\n");
	hexdump(s->p, pkglen);
#endif

	str_handle_lines(This, buf, &rest, seamless_line_handler, NULL);

	xfree(buf);
}


BOOL
seamless_init(RDPCLIENT * This)
{
	if (!This->seamless_rdp)
		return False;

	This->seamless.serial = 0;

	This->seamless.channel =
		channel_register(This, "seamrdp", CHANNEL_OPTION_INITIALIZED | CHANNEL_OPTION_ENCRYPT_RDP,
				 seamless_process);
	return (This->seamless.channel != NULL);
}


static unsigned int
seamless_send(RDPCLIENT * This, const char *command, const char *format, ...)
{
	STREAM s;
	size_t len;
	va_list argp;
	char buf[1025];

	len = snprintf(buf, sizeof(buf) - 1, "%s,%u,", command, This->seamless.serial);

	assert(len < (sizeof(buf) - 1));

	va_start(argp, format);
	len += vsnprintf(buf + len, sizeof(buf) - len - 1, format, argp);
	va_end(argp);

	assert(len < (sizeof(buf) - 1));

	buf[len] = '\n';
	buf[len + 1] = '\0';

	len++;

	s = channel_init(This, This->seamless.channel, len);
	out_uint8p(s, buf, len) s_mark_end(s);

	DEBUG_SEAMLESS(("SeamlessRDP sending:%s", buf));

#if 0
	printf("seamless send:\n");
	hexdump(s->channel_hdr + 8, s->end - s->channel_hdr - 8);
#endif

	channel_send(This, s, This->seamless.channel);

	return This->seamless.serial++;
}


unsigned int
seamless_send_sync(RDPCLIENT * This)
{
	if (!This->seamless_rdp)
		return (unsigned int) -1;

	return seamless_send(This, "SYNC", "");
}


unsigned int
seamless_send_state(RDPCLIENT * This, unsigned long id, unsigned int state, unsigned long flags)
{
	if (!This->seamless_rdp)
		return (unsigned int) -1;

	return seamless_send(This, "STATE", "0x%08lx,0x%x,0x%lx", id, state, flags);
}


unsigned int
seamless_send_position(RDPCLIENT * This, unsigned long id, int x, int y, int width, int height, unsigned long flags)
{
	return seamless_send(This, "POSITION", "0x%08lx,%d,%d,%d,%d,0x%lx", id, x, y, width, height,
			     flags);
}


/* Update select timeout */
void
seamless_select_timeout(RDPCLIENT * This, struct timeval *tv)
{
	struct timeval ourtimeout = { 0, SEAMLESSRDP_POSITION_TIMER };

	if (This->seamless_rdp)
	{
		if (timercmp(&ourtimeout, tv, <))
		{
			tv->tv_sec = ourtimeout.tv_sec;
			tv->tv_usec = ourtimeout.tv_usec;
		}
	}
}


unsigned int
seamless_send_zchange(RDPCLIENT * This, unsigned long id, unsigned long below, unsigned long flags)
{
	if (!This->seamless_rdp)
		return (unsigned int) -1;

	return seamless_send(This, "ZCHANGE", "0x%08lx,0x%08lx,0x%lx", id, below, flags);
}



unsigned int
seamless_send_focus(RDPCLIENT * This, unsigned long id, unsigned long flags)
{
	if (!This->seamless_rdp)
		return (unsigned int) -1;

	return seamless_send(This, "FOCUS", "0x%08lx,0x%lx", id, flags);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久伊人久久99| 欧美精品在线视频| 精品少妇一区二区三区免费观看 | 久久精品欧美一区二区三区不卡 | 国产欧美日韩精品一区| 黑人巨大精品欧美黑白配亚洲| 欧美日韩一区二区三区高清| 一区二区三区蜜桃网| 欧美主播一区二区三区| 亚洲123区在线观看| 91麻豆精品国产91久久久久久久久 | 一区二区免费视频| 在线欧美小视频| 亚洲一级二级在线| 欧美日韩国产精品自在自线| 亚洲6080在线| 欧美不卡视频一区| 高清视频一区二区| 亚洲猫色日本管| 97久久人人超碰| 久久久一区二区| 亚洲1区2区3区4区| 日韩欧美激情四射| 国产资源在线一区| 国产精品视频麻豆| 91女神在线视频| 亚洲国产欧美在线人成| 欧美猛男超大videosgay| 麻豆国产精品官网| 国产视频911| 色偷偷88欧美精品久久久| 亚洲欧美日韩国产综合| 欧美精品国产精品| 国产成人日日夜夜| 亚洲国产精品久久不卡毛片| 91精品视频网| 国产91精品欧美| 亚洲色图19p| 欧美精品xxxxbbbb| 韩国成人福利片在线播放| 欧美不卡在线视频| 99精品桃花视频在线观看| 一区二区视频在线| 欧美精品乱人伦久久久久久| 国产美女av一区二区三区| 久久久久久一级片| 欧美色爱综合网| 高清久久久久久| 日韩av中文字幕一区二区三区| 久久综合九色综合久久久精品综合 | 欧美aaa在线| 最好看的中文字幕久久| 日韩一区二区不卡| 色久综合一二码| 国产精品一区一区| 国产日韩精品一区| 欧美色男人天堂| 成人午夜视频在线观看| 日韩中文字幕不卡| 最近中文字幕一区二区三区| 日韩片之四级片| 成人精品在线视频观看| 秋霞午夜鲁丝一区二区老狼| 亚洲视频一区在线观看| 日韩手机在线导航| 欧美中文字幕不卡| 一本一道波多野结衣一区二区| 激情综合网最新| 五月天国产精品| 国产精品九色蝌蚪自拍| 日韩女优毛片在线| 欧美日韩一区二区在线视频| 成人看片黄a免费看在线| 久久99热狠狠色一区二区| 亚洲欧美另类久久久精品| 久久亚洲影视婷婷| 日韩午夜激情免费电影| 欧美图片一区二区三区| 不卡一二三区首页| 国内精品国产三级国产a久久| 亚洲成人av免费| 亚洲精品免费电影| 亚洲欧美在线视频观看| 国产欧美一区二区精品久导航 | 91精品在线麻豆| 99精品国产99久久久久久白柏 | 中文字幕亚洲在| 欧美国产日产图区| 久久精品综合网| 久久免费看少妇高潮| 精品国产亚洲一区二区三区在线观看| 欧美日韩国产美| 欧美美女直播网站| 欧美日韩国产欧美日美国产精品| 色婷婷久久久久swag精品| 94-欧美-setu| 91在线精品一区二区三区| 岛国一区二区三区| 99国产麻豆精品| 色综合一个色综合亚洲| 色婷婷av久久久久久久| 欧美三级韩国三级日本一级| 欧美日本国产一区| 欧美一级片在线观看| 精品精品欲导航| 久久亚洲一区二区三区四区| 久久综合九色综合欧美就去吻| 国产午夜精品一区二区三区嫩草| 中文字幕乱码日本亚洲一区二区| 欧美国产一区二区在线观看| 国产精品私人影院| 亚洲日韩欧美一区二区在线| 亚洲精品福利视频网站| 亚洲成人精品在线观看| 麻豆久久一区二区| 国产91色综合久久免费分享| 91猫先生在线| 欧美日本在线观看| 26uuu欧美| 亚洲欧美另类久久久精品2019| 夜夜夜精品看看| 久久99精品久久久久久动态图 | 国产伦精品一区二区三区免费| 成人小视频免费在线观看| 91免费视频观看| 欧美日本视频在线| 日韩三区在线观看| 中文字幕在线一区| 日本特黄久久久高潮| 国产麻豆成人传媒免费观看| 99久久婷婷国产综合精品| 不卡的av电影在线观看| 欧美视频一区二区三区四区| 日韩精品影音先锋| 中文字幕亚洲一区二区av在线| 一区二区三区在线观看动漫| 亚洲va国产天堂va久久en| 国产精品911| 欧美日韩国产免费一区二区| 久久精品人人做| 日韩激情视频网站| 91丨九色丨尤物| 久久一二三国产| 亚洲欧美日本韩国| 狠狠色伊人亚洲综合成人| 不卡一区中文字幕| 日韩午夜在线影院| 亚洲精品国久久99热| 久久国产生活片100| 在线免费观看成人短视频| 精品成人a区在线观看| 日韩毛片视频在线看| 日韩高清欧美激情| 91在线一区二区| 久久久电影一区二区三区| 日韩高清不卡一区二区三区| 91一区在线观看| 26uuu久久综合| 日本特黄久久久高潮| 99久久精品免费精品国产| xfplay精品久久| 美女网站一区二区| 欧美日韩国产区一| 亚洲一区二区免费视频| 99综合电影在线视频| 日本一二三不卡| 国产精品一级在线| 久久综合久久久久88| 日本成人中文字幕| 欧美美女bb生活片| 亚洲高清免费在线| 91国偷自产一区二区使用方法| 国产视频视频一区| 国产乱码精品一区二区三区忘忧草 | 欧美亚洲一区二区三区四区| 国产精品三级电影| 丰满白嫩尤物一区二区| 久久色中文字幕| 国产精品影视网| 久久久久久久国产精品影院| 麻豆视频一区二区| 日韩精品资源二区在线| 免费不卡在线观看| 欧美大片在线观看| 国产一区二区主播在线| 久久久久久久性| 成人免费看黄yyy456| 欧美国产综合一区二区| 成人精品一区二区三区四区| 国产欧美一区二区精品性色| 成人一道本在线| 亚洲欧美日韩一区二区 | 91精品国产91久久综合桃花| 日韩在线a电影| 精品免费日韩av| 国产精品18久久久久久vr| 久久久.com| 91色.com| 日韩不卡在线观看日韩不卡视频| 日韩一区二区中文字幕|