mirror of
https://github.com/debauchee/barrier.git
synced 2026-05-10 08:21:40 +08:00
event loop model. Streams, stream filters, and sockets are converted. Client proxies are almost converted. CServer is in progress. Removed all HTTP code. Haven't converted the necessary win32 arch stuff.
96 lines
3.0 KiB
C++
96 lines
3.0 KiB
C++
/*
|
|
* synergy -- mouse and keyboard sharing utility
|
|
* Copyright (C) 2002 Chris Schoeneman
|
|
*
|
|
* This package is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* found in the file COPYING that should have accompanied this file.
|
|
*
|
|
* This package 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.
|
|
*/
|
|
|
|
#ifndef CPROTOCOLUTIL_H
|
|
#define CPROTOCOLUTIL_H
|
|
|
|
#include "BasicTypes.h"
|
|
#include "XIO.h"
|
|
#include <stdarg.h>
|
|
|
|
class IStream;
|
|
|
|
//! Synergy protocol utilities
|
|
/*!
|
|
This class provides various functions for implementing the synergy
|
|
protocol.
|
|
*/
|
|
class CProtocolUtil {
|
|
public:
|
|
//! Write formatted data
|
|
/*!
|
|
Write formatted binary data to a stream. \c fmt consists of
|
|
regular characters and format specifiers. Format specifiers
|
|
begin with \%. All characters not part of a format specifier
|
|
are regular and are transmitted unchanged.
|
|
|
|
Format specifiers are:
|
|
- \%\% -- literal `\%'
|
|
- \%1i -- converts integer argument to 1 byte integer
|
|
- \%2i -- converts integer argument to 2 byte integer in NBO
|
|
- \%4i -- converts integer argument to 4 byte integer in NBO
|
|
- \%1I -- converts std::vector<UInt8>* to 1 byte integers
|
|
- \%2I -- converts std::vector<UInt16>* to 2 byte integers in NBO
|
|
- \%4I -- converts std::vector<UInt32>* to 4 byte integers in NBO
|
|
- \%s -- converts CString* to stream of bytes
|
|
- \%S -- converts integer N and const UInt8* to stream of N bytes
|
|
*/
|
|
static void writef(IStream*,
|
|
const char* fmt, ...);
|
|
|
|
//! Read formatted data
|
|
/*!
|
|
Read formatted binary data from a buffer. This performs the
|
|
reverse operation of writef(). Returns true if the entire
|
|
format was successfully parsed, false otherwise.
|
|
|
|
Format specifiers are:
|
|
- \%\% -- read (and discard) a literal `\%'
|
|
- \%1i -- reads a 1 byte integer; argument is a SInt32* or UInt32*
|
|
- \%2i -- reads an NBO 2 byte integer; arg is SInt32* or UInt32*
|
|
- \%4i -- reads an NBO 4 byte integer; arg is SInt32* or UInt32*
|
|
- \%1I -- reads 1 byte integers; arg is std::vector<UInt8>*
|
|
- \%2I -- reads NBO 2 byte integers; arg is std::vector<UInt16>*
|
|
- \%4I -- reads NBO 4 byte integers; arg is std::vector<UInt32>*
|
|
- \%s -- reads bytes; argument must be a CString*, \b not a char*
|
|
*/
|
|
static bool readf(IStream*,
|
|
const char* fmt, ...);
|
|
|
|
private:
|
|
static void vwritef(IStream*,
|
|
const char* fmt, UInt32 size, va_list);
|
|
static bool vreadf(IStream*,
|
|
const char* fmt, va_list);
|
|
|
|
static UInt32 getLength(const char* fmt, va_list);
|
|
static void writef(void*, const char* fmt, va_list);
|
|
static UInt32 eatLength(const char** fmt);
|
|
static void read(IStream*, void*, UInt32);
|
|
};
|
|
|
|
//! Mismatched read exception
|
|
/*!
|
|
Thrown by CProtocolUtil::readf() when the data being read does not
|
|
match the format.
|
|
*/
|
|
class XIOReadMismatch : public XIO {
|
|
public:
|
|
// XBase overrides
|
|
virtual CString getWhat() const throw();
|
|
};
|
|
|
|
#endif
|
|
|