Snapshot 2009-06-11

This commit is contained in:
Frank Schmirler
2010-12-02 09:43:13 +01:00
parent 31df0eaf8e
commit 7254a67528
83 changed files with 2200 additions and 6221 deletions

View File

@@ -1,5 +1,6 @@
#include "tools/socket.h"
#include <vdr/tools.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
@@ -15,10 +16,11 @@
// actual DSCP value used
#define STREAMDEV_DSCP DSCP_AF41
cTBSocket::cTBSocket(int Type) {
cTBSocket::cTBSocket(int Type, int Protocol) {
memset(&m_LocalAddr, 0, sizeof(m_LocalAddr));
memset(&m_RemoteAddr, 0, sizeof(m_RemoteAddr));
m_Type = Type;
m_Protocol = Protocol;
}
cTBSocket::~cTBSocket() {
@@ -31,7 +33,7 @@ bool cTBSocket::Connect(const std::string &Host, unsigned int Port) {
if (IsOpen()) Close();
if ((socket = ::socket(PF_INET, m_Type, IPPROTO_IP)) == -1)
if ((socket = ::socket(PF_INET, m_Type, m_Protocol)) == -1)
return false;
m_LocalAddr.sin_family = AF_INET;
@@ -52,10 +54,12 @@ bool cTBSocket::Connect(const std::string &Host, unsigned int Port) {
return false;
}
len = sizeof(struct sockaddr_in);
if (::getpeername(socket, (struct sockaddr*)&m_RemoteAddr, &len) == -1) {
::close(socket);
return false;
if (m_Type == SOCK_STREAM) {
len = sizeof(struct sockaddr_in);
if (::getpeername(socket, (struct sockaddr*)&m_RemoteAddr, &len) == -1) {
::close(socket);
return false;
}
}
len = sizeof(struct sockaddr_in);
@@ -64,7 +68,11 @@ bool cTBSocket::Connect(const std::string &Host, unsigned int Port) {
return false;
}
return cTBSource::Open(socket);
if (!cTBSource::Open(socket)) {
::close(socket);
return false;
}
return true;
}
bool cTBSocket::Listen(const std::string &Ip, unsigned int Port, int BackLog) {
@@ -74,7 +82,7 @@ bool cTBSocket::Listen(const std::string &Ip, unsigned int Port, int BackLog) {
if (IsOpen()) Close();
if ((socket = ::socket(PF_INET, m_Type, IPPROTO_IP)) == -1)
if ((socket = ::socket(PF_INET, m_Type, m_Protocol)) == -1)
return false;
val = 1;

View File

@@ -18,9 +18,10 @@ private:
struct sockaddr_in m_RemoteAddr;
int m_Type;
int m_Protocol;
public:
cTBSocket(int Type = SOCK_STREAM);
cTBSocket(int Type = SOCK_STREAM, int Protocol = 0);
virtual ~cTBSocket();
/* See cTBSource::SysRead()
@@ -97,15 +98,22 @@ public:
};
inline ssize_t cTBSocket::SysRead(void *Buffer, size_t Length) const {
if (m_Type == SOCK_DGRAM) {
if (m_Type == SOCK_STREAM)
return ::recv(*this, Buffer, Length, 0);
else {
socklen_t len = sizeof(m_RemoteAddr);
return ::recvfrom(*this, Buffer, Length, 0, (sockaddr*)&m_RemoteAddr, &len);
} else
return ::recv(*this, Buffer, Length, 0);
}
}
inline ssize_t cTBSocket::SysWrite(const void *Buffer, size_t Length) const {
return ::send(*this, Buffer, Length, 0);
if (m_Type == SOCK_STREAM)
return ::send(*this, Buffer, Length, 0);
else {
socklen_t len = sizeof(m_RemoteAddr);
return ::sendto(*this, Buffer, Length, 0, (sockaddr*)&m_RemoteAddr, len);
}
}
#endif // TOOLBOX_SOCKET_H