aboutsummaryrefslogtreecommitdiffstats
path: root/unix/xserver/hw/vnc/RFBGlue.cc
diff options
context:
space:
mode:
Diffstat (limited to 'unix/xserver/hw/vnc/RFBGlue.cc')
-rw-r--r--unix/xserver/hw/vnc/RFBGlue.cc195
1 files changed, 195 insertions, 0 deletions
diff --git a/unix/xserver/hw/vnc/RFBGlue.cc b/unix/xserver/hw/vnc/RFBGlue.cc
new file mode 100644
index 00000000..7747d888
--- /dev/null
+++ b/unix/xserver/hw/vnc/RFBGlue.cc
@@ -0,0 +1,195 @@
+/* Copyright (C) 2002-2005 RealVNC Ltd. All Rights Reserved.
+ * Copyright 2011-2015 Pierre Ossman for Cendio AB
+ *
+ * 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 <stdlib.h>
+
+#include <network/TcpSocket.h>
+#include <rfb/Configuration.h>
+#include <rfb/LogWriter.h>
+#include <rfb/Logger_stdio.h>
+
+#include "RFBGlue.h"
+
+using namespace rfb;
+
+// Loggers used by C code must be created here
+static LogWriter inputLog("Input");
+
+void vncInitRFB(void)
+{
+ rfb::initStdIOLoggers();
+ rfb::LogWriter::setLogParams("*:stderr:30");
+ rfb::Configuration::enableServerParams();
+}
+
+void vncLogError(const char *name, const char *format, ...)
+{
+ LogWriter *vlog;
+ va_list ap;
+ vlog = LogWriter::getLogWriter(name);
+ if (vlog == NULL)
+ return;
+ va_start(ap, format);
+ vlog->error(format, ap);
+ va_end(ap);
+}
+
+void vncLogStatus(const char *name, const char *format, ...)
+{
+ LogWriter *vlog;
+ va_list ap;
+ vlog = LogWriter::getLogWriter(name);
+ if (vlog == NULL)
+ return;
+ va_start(ap, format);
+ vlog->status(format, ap);
+ va_end(ap);
+}
+
+void vncLogInfo(const char *name, const char *format, ...)
+{
+ LogWriter *vlog;
+ va_list ap;
+ vlog = LogWriter::getLogWriter(name);
+ if (vlog == NULL)
+ return;
+ va_start(ap, format);
+ vlog->info(format, ap);
+ va_end(ap);
+}
+
+void vncLogDebug(const char *name, const char *format, ...)
+{
+ LogWriter *vlog;
+ va_list ap;
+ vlog = LogWriter::getLogWriter(name);
+ if (vlog == NULL)
+ return;
+ va_start(ap, format);
+ vlog->debug(format, ap);
+ va_end(ap);
+}
+
+int vncSetParam(const char *name, const char *value)
+{
+ return rfb::Configuration::setParam(name, value);
+}
+
+int vncSetParamSimple(const char *nameAndValue)
+{
+ return rfb::Configuration::setParam(nameAndValue);
+}
+
+char* vncGetParam(const char *name)
+{
+ rfb::VoidParameter *param;
+ char *value;
+ char *ret;
+
+ // Hack to avoid exposing password!
+ if (strcasecmp(name, "Password") == 0)
+ return NULL;
+
+ param = rfb::Configuration::getParam(name);
+ if (param == NULL)
+ return NULL;
+
+ value = param->getValueStr();
+ if (value == NULL)
+ return NULL;
+
+ ret = strdup(value);
+
+ delete [] value;
+
+ return ret;
+}
+
+const char* vncGetParamDesc(const char *name)
+{
+ rfb::VoidParameter *param;
+
+ param = rfb::Configuration::getParam(name);
+ if (param == NULL)
+ return NULL;
+
+ return param->getDescription();
+}
+
+int vncGetParamCount(void)
+{
+ int count;
+
+ count = 0;
+ for (ParameterIterator i; i.param; i.next())
+ count++;
+
+ return count;
+}
+
+char *vncGetParamList(void)
+{
+ int len;
+ char *data, *ptr;
+
+ len = 0;
+
+ for (ParameterIterator i; i.param; i.next()) {
+ int l = strlen(i.param->getName());
+ if (l <= 255)
+ len += l + 1;
+ }
+
+ data = (char*)malloc(len + 1);
+ if (data == NULL)
+ return NULL;
+
+ ptr = data;
+ for (ParameterIterator i; i.param; i.next()) {
+ int l = strlen(i.param->getName());
+ if (l <= 255) {
+ *ptr++ = l;
+ memcpy(ptr, i.param->getName(), l);
+ ptr += l;
+ }
+ }
+ *ptr = '\0';
+
+ return data;
+}
+
+void vncListParams(int width, int nameWidth)
+{
+ rfb::Configuration::listParams(width, nameWidth);
+}
+
+int vncGetSocketPort(int fd)
+{
+ return network::TcpSocket::getSockPort(fd);
+}
+
+int vncIsTCPPortUsed(int port)
+{
+ try {
+ network::TcpListener l(NULL, port);
+ } catch (rdr::Exception& e) {
+ return 0;
+ }
+ return 1;
+}