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

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

?? vncextinit.cc

?? Informix Table extraction queries have been optimized
?? CC
?? 第 1 頁 / 共 2 頁
字號:
/* Copyright (C) 2002-2005 RealVNC Ltd.  All Rights Reserved. *  * This 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 software 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 software; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, * USA. */#include <stdio.h>extern "C" {#define class c_class#define NEED_EVENTS#include "X.h"#include "Xproto.h"#include "misc.h"#include "os.h"#include "dixstruct.h"#include "extnsionst.h"#include "scrnintstr.h"#include "selection.h"#define _VNCEXT_SERVER_#define _VNCEXT_PROTO_#include "vncExt.h"#undef class#undef xalloc}#include <rfb/Configuration.h>#include <rfb/Logger_stdio.h>#include <rfb/LogWriter.h>#include <rfb/util.h>#include <rfb/ServerCore.h>#include <rfb/SSecurityFactoryStandard.h>#include <rdr/HexOutStream.h>#include <rfb/LogWriter.h>#undef max#undef min#include <network/TcpSocket.h>#include "XserverDesktop.h"#include "vncHooks.h"#include "vncExtInit.h"extern "C" {  extern void vncExtensionInit();  static void vncResetProc(ExtensionEntry* extEntry);  static void vncBlockHandler(pointer data, OSTimePtr t, pointer readmask);  static void vncWakeupHandler(pointer data, int nfds, pointer readmask);  static void vncClientStateChange(CallbackListPtr*, pointer, pointer);  static void SendSelectionChangeEvent(Atom selection);  static int ProcVncExtDispatch(ClientPtr client);  static int SProcVncExtDispatch(ClientPtr client);  extern char *display;  extern Selection *CurrentSelections;  extern int NumCurrentSelections;}using namespace rfb;static rfb::LogWriter vlog("vncext");static unsigned long vncExtGeneration = 0;static bool initialised = false;static XserverDesktop* desktop[MAXSCREENS] = { 0, };void* vncFbptr[MAXSCREENS] = { 0, };static char* clientCutText = 0;static int clientCutTextLen = 0;static XserverDesktop* queryConnectDesktop = 0;static void* queryConnectId = 0;static int queryConnectTimeout = 0;static OsTimerPtr queryConnectTimer = 0;static struct VncInputSelect* vncInputSelectHead = 0;struct VncInputSelect {  VncInputSelect(ClientPtr c, Window w, int m) : client(c), window(w), mask(m)  {    next = vncInputSelectHead;    vncInputSelectHead = this;  }  ClientPtr client;  Window window;  int mask;  VncInputSelect* next;};static int nPrevSelections = 0;static TimeStamp* prevSelectionTimes = 0;static int vncErrorBase = 0;static int vncEventBase = 0;static char* vncPasswdFile = 0;int vncInetdSock = -1;rfb::AliasParameter rfbauth("rfbauth", "Alias for PasswordFile",                            &SSecurityFactoryStandard::vncAuthPasswdFile);rfb::StringParameter httpDir("httpd",                             "Directory containing files to serve via HTTP",                             "");rfb::IntParameter httpPort("httpPort", "TCP port to listen for HTTP",0);rfb::AliasParameter rfbwait("rfbwait", "Alias for ClientWaitTimeMillis",                            &rfb::Server::clientWaitTimeMillis);rfb::IntParameter rfbport("rfbport", "TCP port to listen for RFB protocol",0);rfb::StringParameter desktopName("desktop", "Name of VNC desktop","x11");rfb::BoolParameter localhostOnly("localhost",                                 "Only allow connections from localhost",                                 false);void vncExtensionInit(){  if (vncExtGeneration == serverGeneration) {    vlog.error("vncExtensionInit: called twice in same generation?");    return;  }  vncExtGeneration = serverGeneration;  ExtensionEntry* extEntry    = AddExtension(VNCEXTNAME, VncExtNumberEvents, VncExtNumberErrors,                   ProcVncExtDispatch, SProcVncExtDispatch, vncResetProc,                   StandardMinorOpcode);  if (!extEntry) {    ErrorF("vncExtInit: AddExtension failed\n");    return;  }  vncErrorBase = extEntry->errorBase;  vncEventBase = extEntry->eventBase;  vlog.info("VNC extension running!");  if (!AddCallback(&ClientStateCallback, vncClientStateChange, 0)) {    FatalError("AddCallback failed\n");  }  try {    if (!initialised) {      rfb::initStdIOLoggers();      initialised = true;    }    for (int scr = 0; scr < screenInfo.numScreens; scr++) {      if (!desktop[scr]) {        network::TcpListener* listener = 0;        network::TcpListener* httpListener = 0;        if (scr == 0 && vncInetdSock != -1) {          if (network::TcpSocket::isSocket(vncInetdSock) &&              !network::TcpSocket::isConnected(vncInetdSock))          {            listener = new network::TcpListener(0, 0, vncInetdSock, true);            vlog.info("inetd wait");          }        } else {          int port = rfbport;          if (port == 0) port = 5900 + atoi(display);          port += 1000 * scr;          listener = new network::TcpListener(port, localhostOnly);          vlog.info("Listening for VNC connections on port %d",port);          CharArray httpDirStr(httpDir.getData());          if (httpDirStr.buf[0]) {            port = httpPort;            if (port == 0) port = 5800 + atoi(display);            port += 1000 * scr;            httpListener = new network::TcpListener(port, localhostOnly);            vlog.info("Listening for HTTP connections on port %d",port);          }        }        CharArray desktopNameStr(desktopName.getData());        desktop[scr] = new XserverDesktop(screenInfo.screens[scr], listener,                                          httpListener,                                          desktopNameStr.buf,                                          vncFbptr[scr]);        vlog.info("created VNC server for screen %d", scr);        if (scr == 0 && vncInetdSock != -1 && !listener) {          network::Socket* sock = new network::TcpSocket(vncInetdSock);          desktop[scr]->addClient(sock, false);          vlog.info("added inetd sock");        }      } else {        desktop[scr]->serverReset(screenInfo.screens[scr]);      }      vncHooksInit(screenInfo.screens[scr], desktop[scr]);    }    RegisterBlockAndWakeupHandlers(vncBlockHandler, vncWakeupHandler, 0);  } catch (rdr::Exception& e) {    vlog.error("vncExtInit: %s",e.str());  }}static void vncResetProc(ExtensionEntry* extEntry){}//// vncBlockHandler - called just before the X server goes into select().  Call// on to the block handler for each desktop.  Then check whether any of the// selections have changed, and if so, notify any interested X clients.//static void vncBlockHandler(pointer data, OSTimePtr timeout, pointer readmask){  fd_set* fds = (fd_set*)readmask;  for (int scr = 0; scr < screenInfo.numScreens; scr++) {    if (desktop[scr]) {      desktop[scr]->blockHandler(fds);    }  }  if (nPrevSelections != NumCurrentSelections) {    prevSelectionTimes      = (TimeStamp*)xnfrealloc(prevSelectionTimes,                               NumCurrentSelections * sizeof(TimeStamp));    for (int i = nPrevSelections; i < NumCurrentSelections; i++) {      prevSelectionTimes[i].months = 0;      prevSelectionTimes[i].milliseconds = 0;    }    nPrevSelections = NumCurrentSelections;  }  for (int i = 0; i < NumCurrentSelections; i++) {    if (CurrentSelections[i].lastTimeChanged.months        != prevSelectionTimes[i].months ||        CurrentSelections[i].lastTimeChanged.milliseconds        != prevSelectionTimes[i].milliseconds)    {      SendSelectionChangeEvent(CurrentSelections[i].selection);      prevSelectionTimes[i] = CurrentSelections[i].lastTimeChanged;    }  }}static void vncWakeupHandler(pointer data, int nfds, pointer readmask){  fd_set* fds = (fd_set*)readmask;  for (int scr = 0; scr < screenInfo.numScreens; scr++) {    if (desktop[scr]) {      desktop[scr]->wakeupHandler(fds, nfds);    }  }}static void vncClientStateChange(CallbackListPtr*, pointer, pointer p){  ClientPtr client = ((NewClientInfoRec*)p)->client;  if (client->clientState == ClientStateGone) {    VncInputSelect** nextPtr = &vncInputSelectHead;    for (VncInputSelect* cur = vncInputSelectHead; cur; cur = *nextPtr) {      if (cur->client == client) {        *nextPtr = cur->next;        delete cur;        continue;      }      nextPtr = &cur->next;    }  }}void vncBell(){  for (int scr = 0; scr < screenInfo.numScreens; scr++) {    if (desktop[scr]) {      desktop[scr]->bell();    }  }}void vncClientGone(int fd){  if (fd == vncInetdSock) {    fprintf(stderr,"inetdSock client gone\n");    GiveUp(0);  }}void vncClientCutText(const char* str, int len){  delete [] clientCutText;  clientCutText = new char[len];  memcpy(clientCutText, str, len);  clientCutTextLen = len;  xVncExtClientCutTextNotifyEvent ev;  ev.type = vncEventBase + VncExtClientCutTextNotify;  for (VncInputSelect* cur = vncInputSelectHead; cur; cur = cur->next) {    if (cur->mask & VncExtClientCutTextMask) {      ev.sequenceNumber = cur->client->sequence;      ev.window = cur->window;      ev.time = GetTimeInMillis();      if (cur->client->swapped) {        int n;        swaps(&ev.sequenceNumber, n);        swapl(&ev.window, n);        swapl(&ev.time, n);      }      WriteToClient(cur->client, sizeof(xVncExtClientCutTextNotifyEvent),                    (char *)&ev);    }  }}static CARD32 queryConnectTimerCallback(OsTimerPtr timer,                                        CARD32 now, pointer arg){  if (queryConnectTimeout)    queryConnectDesktop->approveConnection(queryConnectId, false, "The attempt to prompt the user to accept the connection failed");  // Re-notify clients, causing them to discover that we're done  vncQueryConnect(queryConnectDesktop, queryConnectId);  return 0;}void vncQueryConnect(XserverDesktop* desktop, void* opaqueId){  // Only one query can be processed at any one time  if (queryConnectTimeout && ((desktop != queryConnectDesktop) ||                              (opaqueId != queryConnectId))) {    desktop->approveConnection(opaqueId, false,                               "Another connection is currently being queried.");    return;  }  // Get the query timeout.  If it's zero, there is no query.  queryConnectTimeout = desktop->getQueryTimeout(opaqueId);  queryConnectId = queryConnectTimeout ? opaqueId : 0;  queryConnectDesktop = queryConnectTimeout ? desktop : 0;  // Notify clients  bool notified = false;  xVncExtQueryConnectNotifyEvent ev;  ev.type = vncEventBase + VncExtQueryConnectNotify;  for (VncInputSelect* cur = vncInputSelectHead; cur; cur = cur->next) {    if (cur->mask & VncExtQueryConnectMask) {      ev.sequenceNumber = cur->client->sequence;      ev.window = cur->window;      if (cur->client->swapped) {        int n;        swaps(&ev.sequenceNumber, n);        swapl(&ev.window, n);      }      WriteToClient(cur->client, sizeof(xVncExtQueryConnectNotifyEvent),                    (char *)&ev);      notified = true;    }  }  // If we're being asked to query a connection (rather than to cancel  //   a query), and haven't been able to notify clients then reject it.  if (queryConnectTimeout && !notified) {    queryConnectTimeout = 0;    queryConnectId = 0;    queryConnectDesktop = 0;    desktop->approveConnection(opaqueId, false,                               "Unable to query the local user to accept the connection.");    return;  }      // Set a timer so that if no-one ever responds, we will eventually   //   reject the connection  //   NB: We don't set a timer if sock is null, since that indicates  //       that pending queries should be cancelled.  if (queryConnectDesktop)    queryConnectTimer = TimerSet(queryConnectTimer, 0,                                 queryConnectTimeout*2000,                                 queryConnectTimerCallback, 0);  else    TimerCancel(queryConnectTimer);}static void SendSelectionChangeEvent(Atom selection){  xVncExtSelectionChangeNotifyEvent ev;  ev.type = vncEventBase + VncExtSelectionChangeNotify;  for (VncInputSelect* cur = vncInputSelectHead; cur; cur = cur->next) {    if (cur->mask & VncExtSelectionChangeMask) {      ev.sequenceNumber = cur->client->sequence;      ev.window = cur->window;      ev.selection = selection;      if (cur->client->swapped) {        int n;        swaps(&ev.sequenceNumber, n);        swapl(&ev.window, n);        swapl(&ev.selection, n);      }      WriteToClient(cur->client, sizeof(xVncExtSelectionChangeNotifyEvent),                    (char *)&ev);    }  }}static int ProcVncExtSetParam(ClientPtr client){  REQUEST(xVncExtSetParamReq);  REQUEST_FIXED_SIZE(xVncExtSetParamReq, stuff->paramLen);  CharArray param(stuff->paramLen+1);  strncpy(param.buf, (char*)&stuff[1], stuff->paramLen);  param.buf[stuff->paramLen] = 0;  xVncExtSetParamReply rep;  int n;  rep.type = X_Reply;  rep.length = 0;  rep.sequenceNumber = client->sequence;  rep.success = rfb::Configuration::setParam(param.buf);  if (client->swapped) {    swaps(&rep.sequenceNumber, n);    swapl(&rep.length, n);  }  WriteToClient(client, sizeof(xVncExtSetParamReply), (char *)&rep);  return (client->noClientException);}static int SProcVncExtSetParam(ClientPtr client){

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品专区在线影院观看| 国内成人免费视频| 91精品婷婷国产综合久久性色| 日本中文字幕一区二区视频| 久久综合视频网| 欧美日韩中文字幕精品| 国产精品影音先锋| 日韩av一区二| 一区二区三区四区视频精品免费| 欧美va亚洲va在线观看蝴蝶网| 99国产欧美另类久久久精品| 韩国欧美一区二区| 免费人成在线不卡| 日韩在线播放一区二区| 亚洲女同一区二区| 国产精品久久久久久久久晋中 | 欧美三级电影一区| www.成人网.com| 国产69精品久久久久毛片| 激情六月婷婷综合| 国产在线看一区| 国产成人综合在线播放| 石原莉奈在线亚洲二区| 亚洲一区av在线| 日日骚欧美日韩| 美女视频免费一区| 久久99国产精品久久99| 韩国av一区二区三区四区 | 69p69国产精品| 欧美人妇做爰xxxⅹ性高电影| 在线视频一区二区免费| 在线视频中文字幕一区二区| 欧美日韩在线播放一区| 欧美一区二区播放| 久久久一区二区| 亚洲视频资源在线| 午夜精品一区二区三区免费视频| 国产精品久久综合| 欧美一级片免费看| 欧美成人video| 亚洲欧洲www| 日韩不卡在线观看日韩不卡视频| 毛片av一区二区| 成人福利视频网站| 欧美伦理电影网| 欧美—级在线免费片| 亚洲福利视频三区| 风间由美一区二区av101| 色狠狠一区二区三区香蕉| 欧美蜜桃一区二区三区| 国产视频在线观看一区二区三区| 一区二区三区在线视频播放| 久久电影网电视剧免费观看| 成人黄色av网站在线| 欧美一区二区三区四区五区 | 久久精品一区四区| 亚洲bt欧美bt精品| aaa国产一区| 亚洲精品一区二区三区蜜桃下载 | 国产精品第四页| 国产在线一区二区| 欧美一级二级在线观看| 伊人一区二区三区| jvid福利写真一区二区三区| 欧美成人艳星乳罩| 捆绑调教一区二区三区| 欧美久久婷婷综合色| 亚洲综合色婷婷| 99久久免费精品高清特色大片| 久久综合视频网| 国产一区二区在线视频| 精品国产乱码久久久久久闺蜜| 亚洲成人在线免费| 欧美午夜精品久久久久久超碰 | 欧美一区二区三区人| 日韩高清一区二区| 日韩欧美黄色影院| 精品一区在线看| 亚洲欧洲成人av每日更新| 久久精品国产亚洲一区二区三区| 91精品国产91久久久久久最新毛片| 亚洲制服丝袜av| 日韩限制级电影在线观看| 日韩精品电影一区亚洲| 精品国产乱码久久久久久1区2区| 国产一区二区0| 国产精品乱码人人做人人爱| 91原创在线视频| 亚洲国产成人tv| 久久影院午夜论| 91在线一区二区| 青青草原综合久久大伊人精品 | 欧美一区二区三区在线| 精品一区免费av| 一个色在线综合| 国产精品久久久久一区二区三区| 国产一区二区中文字幕| 欧美日韩精品电影| 国产麻豆精品theporn| 国产精品狼人久久影院观看方式| 色综合视频在线观看| 亚洲va韩国va欧美va精品| 国产亚洲污的网站| 在线成人免费观看| 99久久精品国产一区| 九九精品一区二区| 一区二区三区四区国产精品| 久久综合99re88久久爱| 91麻豆精品国产91久久久使用方法| 国产精品一级在线| 免费人成在线不卡| 午夜一区二区三区在线观看| 国产日韩欧美高清在线| 欧美一区二区久久| 91豆麻精品91久久久久久| 国产高清精品在线| 国内精品伊人久久久久av影院 | 日本美女视频一区二区| 亚洲精品免费播放| 日韩久久一区二区| 国产精品另类一区| 中文字幕一区二区在线播放| 久久精品一区八戒影视| 精品理论电影在线观看| 欧美一级国产精品| 91精品在线麻豆| 欧美精品一区二区在线播放| 91精品在线免费观看| 日韩欧美黄色影院| 日韩美女在线视频| 久久综合国产精品| 国产欧美日韩精品a在线观看| 久久精品免费在线观看| 欧美国产1区2区| 亚洲欧美激情一区二区| 亚洲尤物视频在线| 久久99国产精品麻豆| 国产精品一区二区免费不卡| 岛国一区二区在线观看| 99久久综合国产精品| 欧美日韩激情一区二区| 欧美成人女星排名| 日韩一区在线播放| 午夜精品一区二区三区电影天堂 | 麻豆成人91精品二区三区| 久久激情综合网| 99精品国产99久久久久久白柏| 在线看国产日韩| 国产亚洲污的网站| 亚洲3atv精品一区二区三区| 精品一区二区三区免费毛片爱| 日本不卡视频在线观看| 99久久精品国产一区| 日韩欧美电影一二三| 亚洲女女做受ⅹxx高潮| 激情文学综合网| 欧美日韩亚洲国产综合| 国产精品久久777777| 精彩视频一区二区| 制服丝袜亚洲精品中文字幕| 日韩美女精品在线| 国产激情偷乱视频一区二区三区| 欧美伊人精品成人久久综合97| 国产亚洲自拍一区| 久久成人免费日本黄色| 色综合久久久久久久久久久| 欧美日韩黄色一区二区| 精品日产卡一卡二卡麻豆| 亚洲成在人线免费| 色综合久久中文综合久久97| 中文av字幕一区| 国产精品中文有码| 亚洲精品在线一区二区| 三级一区在线视频先锋| 欧美日韩国产成人在线91| 亚洲精品va在线观看| 欧美影院精品一区| 一二三四社区欧美黄| 欧美日韩免费电影| 亚洲高清在线视频| 8v天堂国产在线一区二区| 亚洲国产cao| 91精品国产免费久久综合| 天天色天天操综合| 制服丝袜亚洲播放| 国内不卡的二区三区中文字幕 | 欧美成人国产一区二区| 久久精品国产网站| 欧美国产综合一区二区| 91视频在线观看免费| 亚洲欧美另类小说视频| 91同城在线观看| 亚洲一区二区三区视频在线播放| 欧美三级一区二区| 免费人成在线不卡| 欧美韩日一区二区三区| 在线亚洲免费视频| 久久激情五月婷婷| 综合久久久久综合| 精品精品国产高清一毛片一天堂|