|
|
#ifndef PACKETSOCKET_HPP_INCLUDED |
|
|
#define PACKETSOCKET_HPP_INCLUDED |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <sys/types.h> |
|
|
#include <string> |
|
|
#include <queue> |
|
|
|
|
|
#include <xmlrpc-c/c_util.h> |
|
|
#include <xmlrpc-c/girmem.hpp> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef XMLRPC_BUILDING_PACKETSOCKET |
|
|
#define XMLRPC_PACKETSOCKET_EXPORTED XMLRPC_DLLEXPORT |
|
|
#else |
|
|
#define XMLRPC_PACKETSOCKET_EXPORTED |
|
|
#endif |
|
|
|
|
|
namespace xmlrpc_c { |
|
|
|
|
|
class XMLRPC_PACKETSOCKET_EXPORTED packet : public girmem::autoObject { |
|
|
|
|
|
public: |
|
|
packet(); |
|
|
|
|
|
packet(const unsigned char * const data, |
|
|
size_t const dataLength); |
|
|
|
|
|
packet(const char * const data, |
|
|
size_t const dataLength); |
|
|
|
|
|
~packet(); |
|
|
|
|
|
unsigned char * |
|
|
getBytes() const { return this->bytes; } |
|
|
|
|
|
size_t |
|
|
getLength() const { return this->length; } |
|
|
|
|
|
void |
|
|
addData(const unsigned char * const data, |
|
|
size_t const dataLength); |
|
|
|
|
|
private: |
|
|
unsigned char * bytes; |
|
|
size_t length; |
|
|
size_t allocSize; |
|
|
|
|
|
void |
|
|
initialize(const unsigned char * const data, |
|
|
size_t const dataLength); |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
class XMLRPC_PACKETSOCKET_EXPORTED packetPtr: public girmem::autoObjectPtr { |
|
|
|
|
|
public: |
|
|
packetPtr(); |
|
|
|
|
|
explicit packetPtr(packet * const packetP); |
|
|
|
|
|
packet * |
|
|
operator->() const; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
class XMLRPC_PACKETSOCKET_EXPORTED packetSocket_impl; |
|
|
|
|
|
class XMLRPC_PACKETSOCKET_EXPORTED packetSocket { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public: |
|
|
packetSocket(int sockFd); |
|
|
|
|
|
~packetSocket(); |
|
|
|
|
|
void |
|
|
writeWait(packetPtr const& packetPtr) const; |
|
|
|
|
|
void |
|
|
writeWait(packetPtr const& packetPtr, |
|
|
bool * const brokenConnP) const; |
|
|
|
|
|
void |
|
|
read(bool * const eofP, |
|
|
bool * const gotPacketP, |
|
|
packetPtr * const packetPP); |
|
|
|
|
|
void |
|
|
readWait(volatile const int * const interruptP, |
|
|
bool * const eofP, |
|
|
bool * const gotPacketP, |
|
|
packetPtr * const packetPP); |
|
|
|
|
|
void |
|
|
readWait(volatile const int * const interruptP, |
|
|
bool * const eofP, |
|
|
packetPtr * const packetPP); |
|
|
|
|
|
void |
|
|
readWait(bool * const eofP, |
|
|
packetPtr * const packetPP); |
|
|
|
|
|
void |
|
|
useBrokenConnEx(); |
|
|
|
|
|
private: |
|
|
packetSocket_impl * implP; |
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
#endif |
|
|
|