00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef CERTI_SOCKET_HH
00021 #define CERTI_SOCKET_HH
00022
00023 #include "certi.hh"
00024 #include "Exception.hh"
00025 #ifndef _WIN32
00026 #include <sys/time.h>
00027 #include <sys/types.h>
00028 #include <netinet/in.h>
00029 #include <netdb.h>
00030 #endif
00031
00032 #include <string>
00033 #include <sstream>
00034
00035 namespace certi {
00036
00037 class Socket
00038 {
00039 public:
00040 typedef unsigned long ByteCount_t;
00041 virtual ~Socket() {};
00042
00043 virtual void createConnection(const char *server_name, unsigned int port)
00044 throw (NetworkError) = 0;
00045 virtual void send(const unsigned char *, size_t) = 0;
00046 virtual void receive(void *Buffer, unsigned long Size) = 0 ;
00047 virtual void close() = 0 ;
00048
00049
00050
00051
00052 virtual bool isDataReady() const = 0 ;
00053
00054 virtual unsigned long returnAdress() const = 0 ;
00055
00056 #ifdef _WIN32
00057 virtual SOCKET returnSocket() = 0;
00058 #else
00059 virtual int returnSocket() = 0;
00060 #endif
00061
00068 static const std::string addr2string(in_addr_t addr) {
00069 typedef union {
00070 uint32_t addr;
00071 uint8_t parts[4];
00072 } addr_union_t;
00073 std::stringstream msg;
00074
00075 addr_union_t uaddr;
00076 uaddr.addr = (uint32_t)ntohl((uint32_t)(addr));
00077 msg << "" << static_cast<int>(uaddr.parts[3])
00078 << "." << static_cast<int>(uaddr.parts[2])
00079 << "." << static_cast<int>(uaddr.parts[1])
00080 << "." << static_cast<int>(uaddr.parts[0]);
00081 return msg.str();
00082 }
00083 };
00084
00085 }
00086
00087 #endif // CERTI_SOCKET_HH