added tcutils, a utility for unmounting usb drives remotely
This commit is contained in:
parent
fa40106a69
commit
f8f648c574
29
tcutils/README.txt
Normal file
29
tcutils/README.txt
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
A QT based utility program for thinclients using xrdp and NeutrinoRDP
|
||||||
|
|
||||||
|
This program sends commands to NeutrinoRDP to do something
|
||||||
|
useful on the client end (such as unmounting a USB drive,
|
||||||
|
or powering down the client)
|
||||||
|
|
||||||
|
Required packages to build tcutils:
|
||||||
|
-----------------------------------
|
||||||
|
libqt4-gui
|
||||||
|
qt4-dev-tools
|
||||||
|
|
||||||
|
to build tcutils:
|
||||||
|
-----------------
|
||||||
|
qmake
|
||||||
|
make
|
||||||
|
|
||||||
|
To run tcutils:
|
||||||
|
---------------
|
||||||
|
include xrdpapi/.libs in your LD_LIBRARY_PATH
|
||||||
|
|
||||||
|
Example:
|
||||||
|
--------
|
||||||
|
export LD_LIBRARY_PATH=../xrdpapi/.libs
|
||||||
|
run tcutils inside the xfreerdp session
|
||||||
|
|
||||||
|
this is how we run xfreerdp:
|
||||||
|
----------------------------
|
||||||
|
./xfreerdp --sec rdp --plugin tcutils 192.168.2.149
|
||||||
|
|
11
tcutils/main.cpp
Normal file
11
tcutils/main.cpp
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#include <QtGui/QApplication>
|
||||||
|
#include "mainwindow.h"
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
QApplication a(argc, argv);
|
||||||
|
MainWindow w;
|
||||||
|
w.show();
|
||||||
|
|
||||||
|
return a.exec();
|
||||||
|
}
|
234
tcutils/mainwindow.cpp
Normal file
234
tcutils/mainwindow.cpp
Normal file
@ -0,0 +1,234 @@
|
|||||||
|
#include "mainwindow.h"
|
||||||
|
#include "ui_mainwindow.h"
|
||||||
|
|
||||||
|
MainWindow::MainWindow(QWidget *parent) :
|
||||||
|
QMainWindow(parent),
|
||||||
|
ui(new Ui::MainWindow)
|
||||||
|
{
|
||||||
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
wtsChannel = NULL;
|
||||||
|
okToQuit = false;
|
||||||
|
savedGeometry = this->geometry();
|
||||||
|
|
||||||
|
/* setup tab to unmount drives */
|
||||||
|
ui->tabWidget->setTabText(0, "Unmount drives");
|
||||||
|
connect(ui->btnRefresh, SIGNAL(clicked()), this, SLOT(onBtnRefreshClicked()));
|
||||||
|
connect(ui->btnUnmount, SIGNAL(clicked()), this, SLOT(onBtnUnmountClicked()));
|
||||||
|
|
||||||
|
ui->tabWidget->setTabText(1, "");
|
||||||
|
if (initWtsChannel())
|
||||||
|
{
|
||||||
|
okToQuit = true;
|
||||||
|
QTimer::singleShot(10, qApp, SLOT(quit()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setupSystemTray();
|
||||||
|
|
||||||
|
/* set up status bar to display messages */
|
||||||
|
statusBar = new QStatusBar;
|
||||||
|
this->setStatusBar(statusBar);
|
||||||
|
setStatusMsg("Connected to client");
|
||||||
|
}
|
||||||
|
|
||||||
|
MainWindow::~MainWindow()
|
||||||
|
{
|
||||||
|
delete ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::setupSystemTray()
|
||||||
|
{
|
||||||
|
trayMenu = new QMenu(this);
|
||||||
|
trayMenu->addAction("Launch Thinclient Utils", this, SLOT(onActionLaunch()));
|
||||||
|
trayMenu->addSeparator();
|
||||||
|
trayMenu->addAction("Quit", this, SLOT(onActionQuit()));
|
||||||
|
|
||||||
|
trayIcon = new QSystemTrayIcon;
|
||||||
|
trayIcon->setContextMenu(trayMenu);
|
||||||
|
trayIcon->setIcon(QIcon(":/images/resources/images/tools.gif"));
|
||||||
|
|
||||||
|
trayIcon->show();
|
||||||
|
|
||||||
|
trayIcon->showMessage("TCutils", "Click on the tcutils icon to launch tcutils",
|
||||||
|
QSystemTrayIcon::Information, 3000);
|
||||||
|
|
||||||
|
connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
|
||||||
|
this, SLOT(onSystemTrayClicked(QSystemTrayIcon::ActivationReason)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
int MainWindow::initWtsChannel()
|
||||||
|
{
|
||||||
|
/* init the channel just once */
|
||||||
|
if (wtsChannel)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* open a WTS channel and connect to remote client */
|
||||||
|
wtsChannel = WTSVirtualChannelOpenEx(WTS_CURRENT_SESSION, "tcutils", 0);
|
||||||
|
if (wtsChannel == NULL)
|
||||||
|
{
|
||||||
|
QMessageBox::information(this, "Open virtual channel", "Error "
|
||||||
|
"connecting to remote client. This program "
|
||||||
|
"can only be used when connected via "
|
||||||
|
"NeutrinoRDP.\n\nClick ok to close this "
|
||||||
|
"application");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
int MainWindow::deinitWtsChannel()
|
||||||
|
{
|
||||||
|
if (!wtsChannel)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
WTSVirtualChannelClose(wtsChannel);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display a msg on the status bar
|
||||||
|
*
|
||||||
|
* @param msg message to display in status bar
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
void MainWindow::setStatusMsg(QString msg)
|
||||||
|
{
|
||||||
|
statusBar->showMessage(msg, 30000);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
void MainWindow::closeEvent(QCloseEvent *event)
|
||||||
|
{
|
||||||
|
if (!okToQuit)
|
||||||
|
{
|
||||||
|
savedGeometry = this->geometry();
|
||||||
|
this->hide();
|
||||||
|
event->ignore();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wtsChannel)
|
||||||
|
deinitWtsChannel();
|
||||||
|
|
||||||
|
event->accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
** **
|
||||||
|
** slots go here **
|
||||||
|
** **
|
||||||
|
******************************************************************************/
|
||||||
|
#if 1
|
||||||
|
void MainWindow::onBtnRefreshClicked()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* clear drive list */
|
||||||
|
if (itemList.count())
|
||||||
|
{
|
||||||
|
for (i = 0; i < itemList.count(); i++)
|
||||||
|
ui->listWidget->removeItemWidget(itemList.at(i));
|
||||||
|
|
||||||
|
itemList.clear();
|
||||||
|
}
|
||||||
|
ui->listWidget->clear();
|
||||||
|
|
||||||
|
if (Utils::getMountList(wtsChannel, &itemList))
|
||||||
|
{
|
||||||
|
QMessageBox::information(this, "Get device list", "\nError getting "
|
||||||
|
"device list from client");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemList.count() == 0)
|
||||||
|
{
|
||||||
|
QMessageBox::information(this, "Get device list",
|
||||||
|
"\nNo devices found!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add mount point to list widget */
|
||||||
|
for (i = 0; i < itemList.count(); i++)
|
||||||
|
ui->listWidget->insertItem(i, itemList.at(i));
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
void MainWindow::onBtnRefreshClicked()
|
||||||
|
{
|
||||||
|
QListWidgetItem *item;
|
||||||
|
int i;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
/* clear drive list */
|
||||||
|
if (itemList.count())
|
||||||
|
{
|
||||||
|
for (i = 0; i < itemList.count(); i++)
|
||||||
|
ui->listWidget->removeItemWidget(itemList.at(i));
|
||||||
|
|
||||||
|
itemList.clear();
|
||||||
|
}
|
||||||
|
ui->listWidget->clear();
|
||||||
|
|
||||||
|
QDir dir(QDir::homePath() + "/xrdp_client");
|
||||||
|
QStringList sl = dir.entryList();
|
||||||
|
|
||||||
|
for (i = 0, j = 0; i < sl.count(); i++)
|
||||||
|
{
|
||||||
|
/* skip files starting with . */
|
||||||
|
if (sl.at(i).startsWith("."))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* add mount point to list widget */
|
||||||
|
item = new QListWidgetItem;
|
||||||
|
item->setText(sl.at(i));
|
||||||
|
ui->listWidget->insertItem(j++, item);
|
||||||
|
itemList.append(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void MainWindow::onBtnUnmountClicked()
|
||||||
|
{
|
||||||
|
QListWidgetItem *item = ui->listWidget->currentItem();
|
||||||
|
|
||||||
|
if (!item)
|
||||||
|
{
|
||||||
|
QMessageBox::information(this, "Unmount device", "\nNo device selected. "
|
||||||
|
"You must select a device to unmount");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Utils::unmountDevice(wtsChannel, item->text(), statusBar) == 0)
|
||||||
|
{
|
||||||
|
delete ui->listWidget->takeItem(itemList.indexOf(item));
|
||||||
|
itemList.removeOne(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onActionQuit()
|
||||||
|
{
|
||||||
|
okToQuit = true;
|
||||||
|
this->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onActionLaunch()
|
||||||
|
{
|
||||||
|
this->show();
|
||||||
|
this->setGeometry(savedGeometry);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::onSystemTrayClicked(QSystemTrayIcon::ActivationReason)
|
||||||
|
{
|
||||||
|
trayMenu->popup(QCursor::pos());
|
||||||
|
}
|
57
tcutils/mainwindow.h
Normal file
57
tcutils/mainwindow.h
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
#ifndef MAINWINDOW_H
|
||||||
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
|
#include <QMainWindow>
|
||||||
|
#include <xrdpapi.h>
|
||||||
|
#include <QSystemTrayIcon>
|
||||||
|
#include <QMenu>
|
||||||
|
#include <QCloseEvent>
|
||||||
|
#include <QFileDialog>
|
||||||
|
#include <QDir>
|
||||||
|
#include <QListWidgetItem>
|
||||||
|
#include <QList>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QTimer>
|
||||||
|
#include <QStatusBar>
|
||||||
|
//#include <QDebug>
|
||||||
|
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class MainWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
class MainWindow : public QMainWindow
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit MainWindow(QWidget *parent = 0);
|
||||||
|
~MainWindow();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ui::MainWindow *ui;
|
||||||
|
void *wtsChannel;
|
||||||
|
QSystemTrayIcon *trayIcon;
|
||||||
|
QMenu *trayMenu;
|
||||||
|
bool okToQuit;
|
||||||
|
QRect savedGeometry;
|
||||||
|
QStatusBar *statusBar;
|
||||||
|
|
||||||
|
QList<QListWidgetItem *> itemList;
|
||||||
|
|
||||||
|
void setupSystemTray();
|
||||||
|
int initWtsChannel();
|
||||||
|
int deinitWtsChannel();
|
||||||
|
void setStatusMsg(QString msg);
|
||||||
|
void closeEvent(QCloseEvent * event);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void onBtnRefreshClicked();
|
||||||
|
void onBtnUnmountClicked();
|
||||||
|
void onActionQuit();
|
||||||
|
void onActionLaunch();
|
||||||
|
void onSystemTrayClicked(QSystemTrayIcon::ActivationReason);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // MAINWINDOW_H
|
100
tcutils/mainwindow.ui
Normal file
100
tcutils/mainwindow.ui
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>MainWindow</class>
|
||||||
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>541</width>
|
||||||
|
<height>355</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>TC Utils</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="centralWidget">
|
||||||
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>511</width>
|
||||||
|
<height>291</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="currentIndex">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="tabUnmount">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Tab 1</string>
|
||||||
|
</attribute>
|
||||||
|
<widget class="QListWidget" name="listWidget">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>321</width>
|
||||||
|
<height>221</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" name="btnUnmount">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>350</x>
|
||||||
|
<y>60</y>
|
||||||
|
<width>141</width>
|
||||||
|
<height>27</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Unmount device</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QPushButton" name="btnRefresh">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>350</x>
|
||||||
|
<y>10</y>
|
||||||
|
<width>141</width>
|
||||||
|
<height>27</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Get device list</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QWidget" name="tab_2">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>Tab 2</string>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
<widget class="QMenuBar" name="menuBar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>541</width>
|
||||||
|
<height>25</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QToolBar" name="mainToolBar">
|
||||||
|
<attribute name="toolBarArea">
|
||||||
|
<enum>TopToolBarArea</enum>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="toolBarBreak">
|
||||||
|
<bool>false</bool>
|
||||||
|
</attribute>
|
||||||
|
</widget>
|
||||||
|
<widget class="QStatusBar" name="statusBar"/>
|
||||||
|
</widget>
|
||||||
|
<layoutdefault spacing="6" margin="11"/>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
104
tcutils/moc_mainwindow.cpp
Normal file
104
tcutils/moc_mainwindow.cpp
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
** Meta object code from reading C++ file 'mainwindow.h'
|
||||||
|
**
|
||||||
|
** Created: Sun Aug 25 15:11:44 2013
|
||||||
|
** by: The Qt Meta Object Compiler version 63 (Qt 4.8.1)
|
||||||
|
**
|
||||||
|
** WARNING! All changes made in this file will be lost!
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
#include "mainwindow.h"
|
||||||
|
#if !defined(Q_MOC_OUTPUT_REVISION)
|
||||||
|
#error "The header file 'mainwindow.h' doesn't include <QObject>."
|
||||||
|
#elif Q_MOC_OUTPUT_REVISION != 63
|
||||||
|
#error "This file was generated using the moc from 4.8.1. It"
|
||||||
|
#error "cannot be used with the include files from this version of Qt."
|
||||||
|
#error "(The moc has changed too much.)"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
QT_BEGIN_MOC_NAMESPACE
|
||||||
|
static const uint qt_meta_data_MainWindow[] = {
|
||||||
|
|
||||||
|
// content:
|
||||||
|
6, // revision
|
||||||
|
0, // classname
|
||||||
|
0, 0, // classinfo
|
||||||
|
5, 14, // methods
|
||||||
|
0, 0, // properties
|
||||||
|
0, 0, // enums/sets
|
||||||
|
0, 0, // constructors
|
||||||
|
0, // flags
|
||||||
|
0, // signalCount
|
||||||
|
|
||||||
|
// slots: signature, parameters, type, tag, flags
|
||||||
|
12, 11, 11, 11, 0x08,
|
||||||
|
34, 11, 11, 11, 0x08,
|
||||||
|
56, 11, 11, 11, 0x08,
|
||||||
|
71, 11, 11, 11, 0x08,
|
||||||
|
88, 11, 11, 11, 0x08,
|
||||||
|
|
||||||
|
0 // eod
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char qt_meta_stringdata_MainWindow[] = {
|
||||||
|
"MainWindow\0\0onBtnRefreshClicked()\0"
|
||||||
|
"onBtnUnmountClicked()\0onActionQuit()\0"
|
||||||
|
"onActionLaunch()\0"
|
||||||
|
"onSystemTrayClicked(QSystemTrayIcon::ActivationReason)\0"
|
||||||
|
};
|
||||||
|
|
||||||
|
void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
|
||||||
|
{
|
||||||
|
if (_c == QMetaObject::InvokeMetaMethod) {
|
||||||
|
Q_ASSERT(staticMetaObject.cast(_o));
|
||||||
|
MainWindow *_t = static_cast<MainWindow *>(_o);
|
||||||
|
switch (_id) {
|
||||||
|
case 0: _t->onBtnRefreshClicked(); break;
|
||||||
|
case 1: _t->onBtnUnmountClicked(); break;
|
||||||
|
case 2: _t->onActionQuit(); break;
|
||||||
|
case 3: _t->onActionLaunch(); break;
|
||||||
|
case 4: _t->onSystemTrayClicked((*reinterpret_cast< QSystemTrayIcon::ActivationReason(*)>(_a[1]))); break;
|
||||||
|
default: ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const QMetaObjectExtraData MainWindow::staticMetaObjectExtraData = {
|
||||||
|
0, qt_static_metacall
|
||||||
|
};
|
||||||
|
|
||||||
|
const QMetaObject MainWindow::staticMetaObject = {
|
||||||
|
{ &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow,
|
||||||
|
qt_meta_data_MainWindow, &staticMetaObjectExtraData }
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef Q_NO_DATA_RELOCATION
|
||||||
|
const QMetaObject &MainWindow::getStaticMetaObject() { return staticMetaObject; }
|
||||||
|
#endif //Q_NO_DATA_RELOCATION
|
||||||
|
|
||||||
|
const QMetaObject *MainWindow::metaObject() const
|
||||||
|
{
|
||||||
|
return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *MainWindow::qt_metacast(const char *_clname)
|
||||||
|
{
|
||||||
|
if (!_clname) return 0;
|
||||||
|
if (!strcmp(_clname, qt_meta_stringdata_MainWindow))
|
||||||
|
return static_cast<void*>(const_cast< MainWindow*>(this));
|
||||||
|
return QMainWindow::qt_metacast(_clname);
|
||||||
|
}
|
||||||
|
|
||||||
|
int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
|
||||||
|
{
|
||||||
|
_id = QMainWindow::qt_metacall(_c, _id, _a);
|
||||||
|
if (_id < 0)
|
||||||
|
return _id;
|
||||||
|
if (_c == QMetaObject::InvokeMetaMethod) {
|
||||||
|
if (_id < 5)
|
||||||
|
qt_static_metacall(this, _c, _id, _a);
|
||||||
|
_id -= 5;
|
||||||
|
}
|
||||||
|
return _id;
|
||||||
|
}
|
||||||
|
QT_END_MOC_NAMESPACE
|
1191
tcutils/qrc_resources.cpp
Normal file
1191
tcutils/qrc_resources.cpp
Normal file
File diff suppressed because it is too large
Load Diff
5
tcutils/resources.qrc
Normal file
5
tcutils/resources.qrc
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<RCC>
|
||||||
|
<qresource prefix="/images">
|
||||||
|
<file>resources/images/tools.gif</file>
|
||||||
|
</qresource>
|
||||||
|
</RCC>
|
BIN
tcutils/resources/images/tools.gif
Normal file
BIN
tcutils/resources/images/tools.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
BIN
tcutils/tcutils
Executable file
BIN
tcutils/tcutils
Executable file
Binary file not shown.
30
tcutils/tcutils.pro
Normal file
30
tcutils/tcutils.pro
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#-------------------------------------------------
|
||||||
|
#
|
||||||
|
# Project created by QtCreator 2013-08-18T13:54:44
|
||||||
|
#
|
||||||
|
#-------------------------------------------------
|
||||||
|
|
||||||
|
QT += core gui
|
||||||
|
|
||||||
|
TARGET = tcutils
|
||||||
|
TEMPLATE = app
|
||||||
|
|
||||||
|
|
||||||
|
SOURCES += main.cpp\
|
||||||
|
mainwindow.cpp \
|
||||||
|
utils.cpp
|
||||||
|
|
||||||
|
HEADERS += mainwindow.h \
|
||||||
|
utils.h
|
||||||
|
|
||||||
|
FORMS += mainwindow.ui
|
||||||
|
|
||||||
|
# added by LK Rashinkar
|
||||||
|
INCLUDEPATH += ../xrdpapi
|
||||||
|
|
||||||
|
LIBS += -Wl,-rpath
|
||||||
|
LIBS += -Wl,/usr/local/lib/xrdp
|
||||||
|
LIBS += -L../xrdpapi/.libs -lxrdpapi
|
||||||
|
|
||||||
|
RESOURCES += \
|
||||||
|
resources.qrc
|
365
tcutils/tcutils.pro.user
Normal file
365
tcutils/tcutils.pro.user
Normal file
@ -0,0 +1,365 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE QtCreatorProject>
|
||||||
|
<!-- Written by Qt Creator 2.4.1, 2013-08-25T13:35:29. -->
|
||||||
|
<qtcreator>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||||
|
<value type="int">0</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
||||||
|
<value type="QString" key="language">Cpp</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QString" key="CurrentPreferences">CppGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
||||||
|
<value type="QString" key="language">QmlJS</value>
|
||||||
|
<valuemap type="QVariantMap" key="value">
|
||||||
|
<value type="QString" key="CurrentPreferences">QmlJSGlobal</value>
|
||||||
|
</valuemap>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
|
||||||
|
<value type="QByteArray" key="EditorConfiguration.Codec">System</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ConstrainTooltips">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">2</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||||
|
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||||
|
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||||
|
<value type="bool" key="EditorConfiguration.inEntireDocument">true</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
||||||
|
<valuemap type="QVariantMap"/>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Target.0</variable>
|
||||||
|
<valuemap type="QVariantMap">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Target.DesktopTarget</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-32bit./usr/bin/gdb</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.1 in PATH (System) Release</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/home/lk/projects/jtech/nlabs_xrdp_tcutils/tcutils-build-desktop-Qt_4_8_1_in_PATH__System__Release</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">1</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-32bit./usr/bin/gdb</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.1 in PATH (System) Debug</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/home/lk/projects/jtech/nlabs_xrdp_tcutils/tcutils-build-desktop-Qt_4_8_1_in_PATH__System__Debug</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">1</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-32bit./usr/bin/gdb</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.1 (System) Release</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/home/lk/projects/jtech/nlabs_xrdp_tcutils/tcutils-build-desktop-Qt_4_8_1__System__Release</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">2</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
|
||||||
|
<value type="QString" key="ProjectExplorer.BuildCOnfiguration.ToolChain">ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-32bit./usr/bin/gdb</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibraryAuto">true</value>
|
||||||
|
<value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
|
||||||
|
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||||
|
</valuemap>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||||
|
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||||
|
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 4.8.1 (System) Debug</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory">/home/lk/projects/jtech/nlabs_xrdp_tcutils/tcutils-build-desktop-Qt_4_8_1__System__Debug</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId">2</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">4</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||||
|
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">No deployment</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||||
|
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||||
|
<value type="bool" key="Analyzer.Project.UseGlobal">true</value>
|
||||||
|
<value type="bool" key="Analyzer.Project.UseGlobal">true</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
||||||
|
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
||||||
|
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
||||||
|
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
|
||||||
|
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
||||||
|
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||||
|
<value type="int">0</value>
|
||||||
|
<value type="int">1</value>
|
||||||
|
<value type="int">2</value>
|
||||||
|
<value type="int">3</value>
|
||||||
|
<value type="int">4</value>
|
||||||
|
<value type="int">5</value>
|
||||||
|
<value type="int">6</value>
|
||||||
|
<value type="int">7</value>
|
||||||
|
<value type="int">8</value>
|
||||||
|
<value type="int">9</value>
|
||||||
|
<value type="int">10</value>
|
||||||
|
<value type="int">11</value>
|
||||||
|
<value type="int">12</value>
|
||||||
|
<value type="int">13</value>
|
||||||
|
<value type="int">14</value>
|
||||||
|
</valuelist>
|
||||||
|
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
|
||||||
|
<value type="int">0</value>
|
||||||
|
<value type="int">1</value>
|
||||||
|
<value type="int">2</value>
|
||||||
|
<value type="int">3</value>
|
||||||
|
<value type="int">4</value>
|
||||||
|
<value type="int">5</value>
|
||||||
|
<value type="int">6</value>
|
||||||
|
<value type="int">7</value>
|
||||||
|
<value type="int">8</value>
|
||||||
|
<value type="int">9</value>
|
||||||
|
<value type="int">10</value>
|
||||||
|
<value type="int">11</value>
|
||||||
|
<value type="int">12</value>
|
||||||
|
<value type="int">13</value>
|
||||||
|
<value type="int">14</value>
|
||||||
|
</valuelist>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">tcutils</value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||||
|
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration</value>
|
||||||
|
<value type="int" key="Qt4ProjectManager.Qt4RunConfiguration.BaseEnvironmentBase">2</value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">tcutils.pro</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
|
||||||
|
<value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal">false</value>
|
||||||
|
<valuelist type="QVariantList" key="Qt4ProjectManager.Qt4RunConfiguration.UserEnvironmentChanges"/>
|
||||||
|
<value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
|
||||||
|
<value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseCppDebugger">true</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
|
||||||
|
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">false</value>
|
||||||
|
</valuemap>
|
||||||
|
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||||
|
</valuemap>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||||
|
<value type="int">1</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Updater.EnvironmentId</variable>
|
||||||
|
<value type="QString">{9a0d9632-2baf-44e0-864a-a12692180779}</value>
|
||||||
|
</data>
|
||||||
|
<data>
|
||||||
|
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
||||||
|
<value type="int">10</value>
|
||||||
|
</data>
|
||||||
|
</qtcreator>
|
105
tcutils/ui_mainwindow.h
Normal file
105
tcutils/ui_mainwindow.h
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
/********************************************************************************
|
||||||
|
** Form generated from reading UI file 'mainwindow.ui'
|
||||||
|
**
|
||||||
|
** Created: Sun Aug 25 15:11:42 2013
|
||||||
|
** by: Qt User Interface Compiler version 4.8.1
|
||||||
|
**
|
||||||
|
** WARNING! All changes made in this file will be lost when recompiling UI file!
|
||||||
|
********************************************************************************/
|
||||||
|
|
||||||
|
#ifndef UI_MAINWINDOW_H
|
||||||
|
#define UI_MAINWINDOW_H
|
||||||
|
|
||||||
|
#include <QtCore/QVariant>
|
||||||
|
#include <QtGui/QAction>
|
||||||
|
#include <QtGui/QApplication>
|
||||||
|
#include <QtGui/QButtonGroup>
|
||||||
|
#include <QtGui/QHeaderView>
|
||||||
|
#include <QtGui/QListWidget>
|
||||||
|
#include <QtGui/QMainWindow>
|
||||||
|
#include <QtGui/QMenuBar>
|
||||||
|
#include <QtGui/QPushButton>
|
||||||
|
#include <QtGui/QStatusBar>
|
||||||
|
#include <QtGui/QTabWidget>
|
||||||
|
#include <QtGui/QToolBar>
|
||||||
|
#include <QtGui/QWidget>
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
class Ui_MainWindow
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
QWidget *centralWidget;
|
||||||
|
QTabWidget *tabWidget;
|
||||||
|
QWidget *tabUnmount;
|
||||||
|
QListWidget *listWidget;
|
||||||
|
QPushButton *btnUnmount;
|
||||||
|
QPushButton *btnRefresh;
|
||||||
|
QWidget *tab_2;
|
||||||
|
QMenuBar *menuBar;
|
||||||
|
QToolBar *mainToolBar;
|
||||||
|
QStatusBar *statusBar;
|
||||||
|
|
||||||
|
void setupUi(QMainWindow *MainWindow)
|
||||||
|
{
|
||||||
|
if (MainWindow->objectName().isEmpty())
|
||||||
|
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
|
||||||
|
MainWindow->resize(541, 355);
|
||||||
|
centralWidget = new QWidget(MainWindow);
|
||||||
|
centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
|
||||||
|
tabWidget = new QTabWidget(centralWidget);
|
||||||
|
tabWidget->setObjectName(QString::fromUtf8("tabWidget"));
|
||||||
|
tabWidget->setGeometry(QRect(0, 0, 511, 291));
|
||||||
|
tabUnmount = new QWidget();
|
||||||
|
tabUnmount->setObjectName(QString::fromUtf8("tabUnmount"));
|
||||||
|
listWidget = new QListWidget(tabUnmount);
|
||||||
|
listWidget->setObjectName(QString::fromUtf8("listWidget"));
|
||||||
|
listWidget->setGeometry(QRect(10, 10, 321, 221));
|
||||||
|
btnUnmount = new QPushButton(tabUnmount);
|
||||||
|
btnUnmount->setObjectName(QString::fromUtf8("btnUnmount"));
|
||||||
|
btnUnmount->setGeometry(QRect(350, 60, 141, 27));
|
||||||
|
btnRefresh = new QPushButton(tabUnmount);
|
||||||
|
btnRefresh->setObjectName(QString::fromUtf8("btnRefresh"));
|
||||||
|
btnRefresh->setGeometry(QRect(350, 10, 141, 27));
|
||||||
|
tabWidget->addTab(tabUnmount, QString());
|
||||||
|
tab_2 = new QWidget();
|
||||||
|
tab_2->setObjectName(QString::fromUtf8("tab_2"));
|
||||||
|
tabWidget->addTab(tab_2, QString());
|
||||||
|
MainWindow->setCentralWidget(centralWidget);
|
||||||
|
menuBar = new QMenuBar(MainWindow);
|
||||||
|
menuBar->setObjectName(QString::fromUtf8("menuBar"));
|
||||||
|
menuBar->setGeometry(QRect(0, 0, 541, 25));
|
||||||
|
MainWindow->setMenuBar(menuBar);
|
||||||
|
mainToolBar = new QToolBar(MainWindow);
|
||||||
|
mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
|
||||||
|
MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);
|
||||||
|
statusBar = new QStatusBar(MainWindow);
|
||||||
|
statusBar->setObjectName(QString::fromUtf8("statusBar"));
|
||||||
|
MainWindow->setStatusBar(statusBar);
|
||||||
|
|
||||||
|
retranslateUi(MainWindow);
|
||||||
|
|
||||||
|
tabWidget->setCurrentIndex(0);
|
||||||
|
|
||||||
|
|
||||||
|
QMetaObject::connectSlotsByName(MainWindow);
|
||||||
|
} // setupUi
|
||||||
|
|
||||||
|
void retranslateUi(QMainWindow *MainWindow)
|
||||||
|
{
|
||||||
|
MainWindow->setWindowTitle(QApplication::translate("MainWindow", "TC Utils", 0, QApplication::UnicodeUTF8));
|
||||||
|
btnUnmount->setText(QApplication::translate("MainWindow", "Unmount device", 0, QApplication::UnicodeUTF8));
|
||||||
|
btnRefresh->setText(QApplication::translate("MainWindow", "Get device list", 0, QApplication::UnicodeUTF8));
|
||||||
|
tabWidget->setTabText(tabWidget->indexOf(tabUnmount), QApplication::translate("MainWindow", "Tab 1", 0, QApplication::UnicodeUTF8));
|
||||||
|
tabWidget->setTabText(tabWidget->indexOf(tab_2), QApplication::translate("MainWindow", "Tab 2", 0, QApplication::UnicodeUTF8));
|
||||||
|
} // retranslateUi
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace Ui {
|
||||||
|
class MainWindow: public Ui_MainWindow {};
|
||||||
|
} // namespace Ui
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
#endif // UI_MAINWINDOW_H
|
217
tcutils/utils.cpp
Normal file
217
tcutils/utils.cpp
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
#include "utils.h"
|
||||||
|
|
||||||
|
Utils::Utils()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int Utils::getMountList(void *wtsChannel, QList<QListWidgetItem *> *itemList)
|
||||||
|
{
|
||||||
|
QListWidgetItem *item;
|
||||||
|
|
||||||
|
STREAM s;
|
||||||
|
quint32 bytesToSend;
|
||||||
|
quint32 bytesWritten;
|
||||||
|
quint32 bytesRead;
|
||||||
|
quint32 cmdLen;
|
||||||
|
quint32 cmd;
|
||||||
|
int rv;
|
||||||
|
int i;
|
||||||
|
int nentries;
|
||||||
|
char buf[2048];
|
||||||
|
|
||||||
|
if (!wtsChannel)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
qstream_new(s, 1024 * 8);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* command format:
|
||||||
|
* 4 bytes cmd_len length of this command
|
||||||
|
* 1 byte cmd TCU_CMD_GET_MOUNT_LIST
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* setup command */
|
||||||
|
qstream_wr_u32(&s, 1);
|
||||||
|
qstream_wr_u8(&s, TCU_CMD_GET_MOUNT_LIST);
|
||||||
|
bytesToSend = 5;
|
||||||
|
|
||||||
|
/* send command */
|
||||||
|
rv = WTSVirtualChannelWrite(wtsChannel, s.data, bytesToSend, &bytesWritten);
|
||||||
|
if (rv)
|
||||||
|
{
|
||||||
|
QMessageBox::information(NULL, "Get device list", "\nError sending "
|
||||||
|
"command to client");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
qstream_set_pos(&s, 0); /* reuse stream */
|
||||||
|
|
||||||
|
/* get response */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* response format
|
||||||
|
* 4 bytes cmd_len length of this command
|
||||||
|
* 4 bytes cmd TCU_CMD_GET_MOUNT_LIST
|
||||||
|
* 1 byte nentries number of entries in this pkt
|
||||||
|
* n bytes entry_list nentries null terminated strings
|
||||||
|
*/
|
||||||
|
|
||||||
|
rv = WTSVirtualChannelRead(wtsChannel, 1000 * 5, s.data, 1024 * 8, &bytesRead);
|
||||||
|
if (rv == 0 || bytesRead == 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
/* did we get the entire cmd? */
|
||||||
|
qstream_rd_u32(&s, cmdLen);
|
||||||
|
if (cmdLen != bytesRead - 4)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
/* did we get the right response? */
|
||||||
|
qstream_rd_u32(&s, cmd);
|
||||||
|
if (cmd != TCU_CMD_GET_MOUNT_LIST)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
qstream_rd_u8(&s, nentries);
|
||||||
|
if (nentries == 0)
|
||||||
|
goto done;
|
||||||
|
|
||||||
|
for (i = 0; i < nentries; i++)
|
||||||
|
{
|
||||||
|
strcpy(buf, s.pos);
|
||||||
|
qstream_inc_pos(&s, strlen(buf) + 1);
|
||||||
|
item = new QListWidgetItem;
|
||||||
|
item->setText(QString(buf));
|
||||||
|
itemList->append(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
done:
|
||||||
|
qstream_free(&s);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
error:
|
||||||
|
qstream_free(&s);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Utils::unmountDevice(void *wtsChannel, QString device, QStatusBar *statusBar)
|
||||||
|
{
|
||||||
|
STREAM s;
|
||||||
|
quint32 bytesRead;
|
||||||
|
quint32 cmdLen;
|
||||||
|
quint32 cmd;
|
||||||
|
quint32 bytesWritten;
|
||||||
|
int bytesToSend;
|
||||||
|
int rv;
|
||||||
|
int seconds = 0;
|
||||||
|
char status;
|
||||||
|
char* buf;
|
||||||
|
|
||||||
|
if (!wtsChannel)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
qstream_new(s, 1024);
|
||||||
|
buf = device.toAscii().data();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* command format:
|
||||||
|
* 4 bytes cmd_len length of this command
|
||||||
|
* 4 bytes cmd TCU_CMD_UNMOUNT_DEVICE
|
||||||
|
* n bytes device null terminated device name
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* setup command */
|
||||||
|
bytesToSend = 4 + 4 + device.count() + 1;
|
||||||
|
qstream_wr_u32(&s, bytesToSend - 4);
|
||||||
|
qstream_wr_u32(&s, TCU_CMD_UNMOUNT_DEVICE);
|
||||||
|
strcpy(s.pos, buf);
|
||||||
|
|
||||||
|
/* send command */
|
||||||
|
rv = WTSVirtualChannelWrite(wtsChannel, s.data, bytesToSend, &bytesWritten);
|
||||||
|
if (rv)
|
||||||
|
{
|
||||||
|
QMessageBox::information(NULL, "Unmount device", "\nError sending "
|
||||||
|
"command to client");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
qstream_set_pos(&s, 0); /* reuse stream */
|
||||||
|
|
||||||
|
/* get response */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* command format
|
||||||
|
* 4 bytes cmd_len number of bytes in this pkt
|
||||||
|
* 4 bytes cmd TCU_CMD_UNMOUNT_DEVICE
|
||||||
|
* 1 byte status operation status code
|
||||||
|
*/
|
||||||
|
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
rv = WTSVirtualChannelRead(wtsChannel, 1000 * 1, s.data, 1024, &bytesRead);
|
||||||
|
if (rv == 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if (bytesRead)
|
||||||
|
break;
|
||||||
|
|
||||||
|
statusBar->showMessage("Waiting for client to unmount device: " +
|
||||||
|
QString::number(++seconds) + " seconds", 30000);
|
||||||
|
}
|
||||||
|
|
||||||
|
statusBar->showMessage("");
|
||||||
|
|
||||||
|
/* did we get the entire pkt? */
|
||||||
|
qstream_rd_u32(&s, cmdLen);
|
||||||
|
if (cmdLen != bytesRead - 4)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
/* did we get the right response? */
|
||||||
|
qstream_rd_u32(&s, cmd);
|
||||||
|
if (cmd != TCU_CMD_UNMOUNT_DEVICE)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
/* get status */
|
||||||
|
qstream_rd_u8(&s, status);
|
||||||
|
switch(status)
|
||||||
|
{
|
||||||
|
case UMOUNT_SUCCESS:
|
||||||
|
goto done;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case UMOUNT_BUSY:
|
||||||
|
QMessageBox::information(NULL, "Unmount error", "\nCannot unmount device "
|
||||||
|
"because it is in use");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case UMOUNT_NOT_MOUNTED:
|
||||||
|
QMessageBox::information(NULL, "Unmount error", "\nCannot unmount device "
|
||||||
|
"because it is not mounted");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case UMOUNT_OP_NOT_PERMITTED:
|
||||||
|
QMessageBox::information(NULL, "Unmount error", "\nOperation not "
|
||||||
|
"permitted. The device may be in use");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case UMOUNT_PERMISSION_DENIED:
|
||||||
|
QMessageBox::information(NULL, "Unmount error", "\nYou don't have "
|
||||||
|
"permission to unmount this device");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case UMOUNT_UNKNOWN:
|
||||||
|
QMessageBox::information(NULL, "Unmount error", "Cannot unmount "
|
||||||
|
"device, an unknown error has occurred. The "
|
||||||
|
"drive may be in use or you do not have "
|
||||||
|
"permission to unmount it");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
done:
|
||||||
|
qstream_free(&s);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
error:
|
||||||
|
qstream_free(&s);
|
||||||
|
return -1;
|
||||||
|
}
|
150
tcutils/utils.h
Normal file
150
tcutils/utils.h
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
#ifndef UTILS_H
|
||||||
|
#define UTILS_H
|
||||||
|
|
||||||
|
#include <QDebug>
|
||||||
|
#include <QListWidgetItem>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QStatusBar>
|
||||||
|
#include <xrdpapi.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* stream definition and macros to access them;
|
||||||
|
* all definitions default to little endian
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct stream
|
||||||
|
{
|
||||||
|
char* data; /* holds stream data */
|
||||||
|
char* pos; /* current read/write position */
|
||||||
|
int size; /* number of bytes in data */
|
||||||
|
} STREAM;
|
||||||
|
|
||||||
|
#define qstream_new(_s, _size) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
(_s).data = (char *) malloc(_size); \
|
||||||
|
(_s).pos = (_s).data; \
|
||||||
|
(_s).size = (_size); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
|
||||||
|
#define qstream_new_zero(_s, _size) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
(_s).data = (char *) calloc((_size), 1); \
|
||||||
|
(_s).pos = (_s).data; \
|
||||||
|
(_s).size = (_size); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
|
||||||
|
#define qstream_free(_s) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
if ((_s)->data) \
|
||||||
|
free((_s)->data); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
|
||||||
|
#define qstream_set_pos(_s, _p) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
(_s)->pos = (_s)->data + (_p); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
|
||||||
|
#define qstream_inc_pos(_s, _v) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
(_s)->pos += (_v); \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
|
||||||
|
#define qstream_rd_u8(_s, _v) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
(_v) = *((unsigned char *) ((_s)->pos)); \
|
||||||
|
(_s)->pos++; \
|
||||||
|
} \
|
||||||
|
while (0)
|
||||||
|
|
||||||
|
#define qstream_rd_u16(_s, _v) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
(_v) = (unsigned short) \
|
||||||
|
( \
|
||||||
|
(*((unsigned char *) ((_s)->pos + 0)) << 0) | \
|
||||||
|
(*((unsigned char *) ((_s)->pos + 1)) << 8) \
|
||||||
|
); \
|
||||||
|
(_s)->pos += 2; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define qstream_rd_u32(_s, _v) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
(_v) = (unsigned int) \
|
||||||
|
( \
|
||||||
|
(*((unsigned char *) ((_s)->pos + 0)) << 0) | \
|
||||||
|
(*((unsigned char *) ((_s)->pos + 1)) << 8) | \
|
||||||
|
(*((unsigned char *) ((_s)->pos + 2)) << 16) | \
|
||||||
|
(*((unsigned char *) ((_s)->pos + 3)) << 24) \
|
||||||
|
); \
|
||||||
|
(_s)->pos += 4; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define qstream_wr_u8(_s, _v) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
*((_s)->pos) = (unsigned char) (_v); \
|
||||||
|
(_s)->pos++; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define qstream_wr_u16(_s, _v) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
*((_s)->pos) = (unsigned char) ((_v) >> 0); \
|
||||||
|
(_s)->pos++; \
|
||||||
|
*((_s)->pos) = (unsigned char) ((_v) >> 8); \
|
||||||
|
(_s)->pos++; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define qstream_wr_u32(_s, _v) \
|
||||||
|
do \
|
||||||
|
{ \
|
||||||
|
*((_s)->pos) = (unsigned char) ((_v) >> 0); \
|
||||||
|
(_s)->pos++; \
|
||||||
|
*((_s)->pos) = (unsigned char) ((_v) >> 8); \
|
||||||
|
(_s)->pos++; \
|
||||||
|
*((_s)->pos) = (unsigned char) ((_v) >> 16); \
|
||||||
|
(_s)->pos++; \
|
||||||
|
*((_s)->pos) = (unsigned char) ((_v) >> 24); \
|
||||||
|
(_s)->pos++; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/* list of commands we support; this list should match the one in */
|
||||||
|
/* NeutrinoRDP channels/tcutils/tcutils_main.h */
|
||||||
|
enum TCU_COMMANDS
|
||||||
|
{
|
||||||
|
TCU_CMD_GET_MOUNT_LIST = 1,
|
||||||
|
TCU_CMD_UNMOUNT_DEVICE
|
||||||
|
};
|
||||||
|
|
||||||
|
/* umount error codes */
|
||||||
|
enum TCU_UMOUNT_ERROR
|
||||||
|
{
|
||||||
|
UMOUNT_SUCCESS = 0,
|
||||||
|
UMOUNT_BUSY,
|
||||||
|
UMOUNT_NOT_MOUNTED,
|
||||||
|
UMOUNT_OP_NOT_PERMITTED,
|
||||||
|
UMOUNT_PERMISSION_DENIED,
|
||||||
|
UMOUNT_UNKNOWN
|
||||||
|
};
|
||||||
|
|
||||||
|
class Utils
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Utils();
|
||||||
|
static int getMountList(void *wtsChannel, QList<QListWidgetItem *> *itemList);
|
||||||
|
static int unmountDevice(void *wtsChannel, QString device, QStatusBar *statusBar);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // UTILS_H
|
Loading…
Reference in New Issue
Block a user