xrdp/tcutils/utils.h
2013-08-25 18:02:04 -07:00

151 lines
5.2 KiB
C++

#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