Replaced HTONX() and NTOHX() with qToBigEndian() and qFromBigEndian()
This commit is contained in:
parent
c59306d78d
commit
971713ae0f
@ -19,6 +19,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
|
||||
#include "pbrpcchannel.h"
|
||||
|
||||
#include <qendian.h>
|
||||
|
||||
PbRpcChannel::PbRpcChannel(QHostAddress ip, quint16 port)
|
||||
{
|
||||
isPending = false;
|
||||
@ -130,9 +132,9 @@ void PbRpcChannel::CallMethod(
|
||||
Q_ASSERT(ret == true);
|
||||
|
||||
len = req->ByteSize();
|
||||
*((quint16*)(msg+0)) = HTONS(PB_MSG_TYPE_REQUEST); // type
|
||||
*((quint16*)(msg+2)) = HTONS(method->index()); // method id
|
||||
*((quint32*)(msg+4)) = HTONL(len); // len
|
||||
*((quint16*)(msg+0)) = qToBigEndian(quint16(PB_MSG_TYPE_REQUEST)); // type
|
||||
*((quint16*)(msg+2)) = qToBigEndian(quint16(method->index())); // method id
|
||||
*((quint32*)(msg+4)) = qToBigEndian(quint32(len)); // len
|
||||
|
||||
// Avoid printing stats since it happens every couple of seconds
|
||||
if (pendingMethodId != 13)
|
||||
@ -147,8 +149,8 @@ void PbRpcChannel::CallMethod(
|
||||
|
||||
void PbRpcChannel::on_mpSocket_readyRead()
|
||||
{
|
||||
char msg[MSGBUF_SIZE];
|
||||
char *p = (char*)&msg;
|
||||
uchar msg[MSGBUF_SIZE];
|
||||
uchar *p = (uchar*) &msg;
|
||||
int msgLen;
|
||||
static bool parsing = false;
|
||||
static quint16 type, method;
|
||||
@ -165,13 +167,13 @@ void PbRpcChannel::on_mpSocket_readyRead()
|
||||
return;
|
||||
}
|
||||
|
||||
msgLen = mpSocket->read(msg, PB_HDR_SIZE);
|
||||
msgLen = mpSocket->read((char*)msg, PB_HDR_SIZE);
|
||||
|
||||
Q_ASSERT(msgLen == PB_HDR_SIZE);
|
||||
|
||||
type = NTOHS(GET16(p+0));
|
||||
method = NTOHS(GET16(p+2));
|
||||
len = NTOHL(GET32(p+4));
|
||||
type = qFromBigEndian<quint16>(p+0);
|
||||
method = qFromBigEndian<quint16>(p+2);
|
||||
len = qFromBigEndian<quint32>(p+4);
|
||||
|
||||
//BUFDUMP(msg, PB_HDR_SIZE);
|
||||
//qDebug("type = %hu, method = %hu, len = %u", type, method, len);
|
||||
@ -193,8 +195,8 @@ void PbRpcChannel::on_mpSocket_readyRead()
|
||||
{
|
||||
int l;
|
||||
|
||||
l = mpSocket->read(msg, sizeof(msg));
|
||||
blob->write(msg, l);
|
||||
l = mpSocket->read((char*)msg, sizeof(msg));
|
||||
blob->write((char*)msg, l);
|
||||
cumLen += l;
|
||||
}
|
||||
|
||||
@ -229,7 +231,7 @@ void PbRpcChannel::on_mpSocket_readyRead()
|
||||
return;
|
||||
}
|
||||
|
||||
msgLen = mpSocket->read(msg, sizeof(msg));
|
||||
msgLen = mpSocket->read((char*)msg, sizeof(msg));
|
||||
|
||||
Q_ASSERT((unsigned) msgLen == len);
|
||||
|
||||
|
@ -20,45 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
#ifndef _PB_RPC_COMMON_H
|
||||
#define _PB_RPC_COMMON_H
|
||||
|
||||
//! \todo (LOW) check which one is right - wrong one seems to be working!!!!!
|
||||
#if 0
|
||||
#define GET16(p) (quint16)( \
|
||||
(*((quint8*)(p)+0) << 8 ) \
|
||||
| (*((quint8*)(p)+1)))
|
||||
#else
|
||||
#define GET16(p) (quint16)( \
|
||||
(*((quint8*)(p)+1) << 8 ) \
|
||||
| (*((quint8*)(p)+0)))
|
||||
#define GET32(p) (quint32)( \
|
||||
(*((quint8*)(p)+3) << 24) \
|
||||
| (*((quint8*)(p)+2) << 16) \
|
||||
| (*((quint8*)(p)+1) << 8 ) \
|
||||
| (*((quint8*)(p)+0)))
|
||||
#endif
|
||||
|
||||
#define BYTESWAP4(x) \
|
||||
(((x & 0xFF000000) >> 24) | \
|
||||
((x & 0x00FF0000) >> 8) | \
|
||||
((x & 0x0000FF00) << 8) | \
|
||||
((x & 0x000000FF) << 24))
|
||||
|
||||
#define BYTESWAP2(x) \
|
||||
(((x & 0xFF00) >> 8) | \
|
||||
((x & 0x00FF) << 8))
|
||||
|
||||
//! \todo (LOW) : portability
|
||||
#if 1
|
||||
#define HTONL(x) BYTESWAP4(x)
|
||||
#define NTOHL(x) BYTESWAP4(x)
|
||||
#define HTONS(x) BYTESWAP2(x)
|
||||
#define NTOHS(x) BYTESWAP2(x)
|
||||
#else
|
||||
#define HTONL(x) (x)
|
||||
#define NTOHL(x) (x)
|
||||
#define HTONS(x) (x)
|
||||
#define NTOHS(x) (x)
|
||||
#endif
|
||||
|
||||
// Print a HexDump
|
||||
#define BUFDUMP(ptr, len) qDebug("%s", QString(QByteArray((char*)(ptr), \
|
||||
(len)).toHex()).toAscii().data());
|
||||
|
@ -20,6 +20,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>
|
||||
//#include "pbhelper.h"
|
||||
#include "rpcserver.h"
|
||||
|
||||
#include <qendian.h>
|
||||
|
||||
RpcServer::RpcServer()
|
||||
{
|
||||
server = NULL;
|
||||
@ -87,9 +89,9 @@ void RpcServer::done(PbRpcController *controller)
|
||||
len = blob->size();
|
||||
qDebug("is binary blob of len %d", len);
|
||||
|
||||
*((quint16*)(msg+0)) = HTONS(PB_MSG_TYPE_BINBLOB); // type
|
||||
*((quint16*)(msg+2)) = HTONS(pendingMethodId); // method
|
||||
(*(quint32*)(msg+4)) = HTONL(len); // len
|
||||
*((quint16*)(msg+0)) = qToBigEndian(quint16(PB_MSG_TYPE_BINBLOB)); // type
|
||||
*((quint16*)(msg+2)) = qToBigEndian(quint16(pendingMethodId)); // method
|
||||
(*(quint32*)(msg+4)) = qToBigEndian(quint32(len)); // len
|
||||
|
||||
clientSock->write(msg, PB_HDR_SIZE);
|
||||
|
||||
@ -118,9 +120,9 @@ void RpcServer::done(PbRpcController *controller)
|
||||
|
||||
len = response->ByteSize();
|
||||
|
||||
*((quint16*)(msg+0)) = HTONS(PB_MSG_TYPE_RESPONSE); // type
|
||||
*((quint16*)(msg+2)) = HTONS(pendingMethodId); // method
|
||||
*((quint32*)(msg+4)) = HTONL(len); // len
|
||||
*((quint16*)(msg+0)) = qToBigEndian(quint16(PB_MSG_TYPE_RESPONSE)); // type
|
||||
*((quint16*)(msg+2)) = qToBigEndian(quint16(pendingMethodId)); // method
|
||||
*((quint32*)(msg+4)) = qToBigEndian(quint32(len)); // len
|
||||
|
||||
// Avoid printing stats since it happens once every couple of seconds
|
||||
if (pendingMethodId != 13)
|
||||
@ -187,7 +189,7 @@ void RpcServer::when_error(QAbstractSocket::SocketError socketError)
|
||||
|
||||
void RpcServer::when_dataAvail()
|
||||
{
|
||||
char msg[MSGBUF_SIZE];
|
||||
uchar msg[MSGBUF_SIZE];
|
||||
int msgLen;
|
||||
static bool parsing = false;
|
||||
static quint16 type, method;
|
||||
@ -201,13 +203,13 @@ void RpcServer::when_dataAvail()
|
||||
if (clientSock->bytesAvailable() < PB_HDR_SIZE)
|
||||
return;
|
||||
|
||||
msgLen = clientSock->read(msg, PB_HDR_SIZE);
|
||||
msgLen = clientSock->read((char*)msg, PB_HDR_SIZE);
|
||||
|
||||
Q_ASSERT(msgLen == PB_HDR_SIZE);
|
||||
|
||||
type = NTOHS(GET16(&msg[0]));
|
||||
method = NTOHS(GET16(&msg[2]));
|
||||
len = NTOHL(GET32(&msg[4]));
|
||||
type = qFromBigEndian<quint16>(&msg[0]);
|
||||
method = qFromBigEndian<quint16>(&msg[2]);
|
||||
len = qFromBigEndian<quint32>(&msg[4]);
|
||||
//qDebug("type = %d, method = %d, len = %d", type, method, len);
|
||||
|
||||
parsing = true;
|
||||
@ -216,7 +218,7 @@ void RpcServer::when_dataAvail()
|
||||
if (clientSock->bytesAvailable() < len)
|
||||
return;
|
||||
|
||||
msgLen = clientSock->read(msg, sizeof(msg));
|
||||
msgLen = clientSock->read((char*)msg, sizeof(msg));
|
||||
Q_ASSERT((unsigned) msgLen == len);
|
||||
|
||||
if (type != PB_MSG_TYPE_REQUEST)
|
||||
|
Loading…
Reference in New Issue
Block a user