summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-01-16 17:41:17 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2011-01-16 17:41:17 +0900
commite60181d1ad73ef2ca873d8d2ba0e13a932f0751a (patch)
tree0cbbaad16fcda83770094de552f9fcbf43de4188 /src
parent629099d40d1d6675772aa1082ff0b9b27e9c522c (diff)
Removed SocketCore::peekData()
Diffstat (limited to 'src')
-rw-r--r--src/SocketCore.cc136
-rw-r--r--src/SocketCore.h24
2 files changed, 2 insertions, 158 deletions
diff --git a/src/SocketCore.cc b/src/SocketCore.cc
index aba9db26..dcd5d676 100644
--- a/src/SocketCore.cc
+++ b/src/SocketCore.cc
@@ -158,17 +158,11 @@ void SocketCore::init()
#endif // HAVE_LIBSSL
#ifdef HAVE_LIBGNUTLS
sslSession_ = 0;
- peekBufMax_ = 4096;
- peekBuf_ = 0;
- peekBufLength_ = 0;
#endif //HAVE_LIBGNUTLS
}
SocketCore::~SocketCore() {
closeConnection();
-#ifdef HAVE_LIBGNUTLS
- delete [] peekBuf_;
-#endif // HAVE_LIBGNUTLS
}
void SocketCore::create(int family, int protocol)
@@ -646,11 +640,6 @@ bool SocketCore::isWritable(time_t timeout)
bool SocketCore::isReadable(time_t timeout)
{
-#ifdef HAVE_LIBGNUTLS
- if(secure_ && peekBufLength_ > 0) {
- return true;
- }
-#endif // HAVE_LIBGNUTLS
#ifdef HAVE_POLL
struct pollfd p;
p.fd = sockfd_;
@@ -801,7 +790,8 @@ void SocketCore::readData(char* data, size_t& len)
}
#endif // HAVE_LIBSSL
#ifdef HAVE_LIBGNUTLS
- ret = gnutlsRecv(data, len);
+ while((ret = gnutls_record_recv(sslSession_, data, len)) ==
+ GNUTLS_E_INTERRUPTED);
if(ret == GNUTLS_E_AGAIN) {
gnutlsRecordCheckDirection();
ret = 0;
@@ -814,127 +804,6 @@ void SocketCore::readData(char* data, size_t& len)
len = ret;
}
-void SocketCore::peekData(char* data, size_t& len)
-{
- ssize_t ret = 0;
- wantRead_ = false;
- wantWrite_ = false;
-
- if(!secure_) {
- while((ret = recv(sockfd_, data, len, MSG_PEEK)) == -1 &&
- SOCKET_ERRNO == A2_EINTR);
- int errNum = SOCKET_ERRNO;
- if(ret == -1) {
- if(A2_WOULDBLOCK(errNum)) {
- wantRead_ = true;
- ret = 0;
- } else {
- throw DL_RETRY_EX(fmt(EX_SOCKET_PEEK, errorMsg(errNum).c_str()));
- }
- }
- } else {
-#ifdef HAVE_LIBSSL
- // for SSL
- // TODO handling len == 0 case required
- ret = SSL_peek(ssl, data, len);
- if(ret < 0) {
- ret = sslHandleEAGAIN(ret);
- }
- if(ret < 0) {
- throw DL_RETRY_EX
- (fmt(EX_SOCKET_PEEK,
- ERR_error_string(SSL_get_error(ssl, ret), 0)));
- }
-#endif // HAVE_LIBSSL
-#ifdef HAVE_LIBGNUTLS
- ret = gnutlsPeek(data, len);
- if(ret == GNUTLS_E_AGAIN) {
- gnutlsRecordCheckDirection();
- ret = 0;
- } else if(ret < 0) {
- throw DL_RETRY_EX(fmt(EX_SOCKET_PEEK, gnutls_strerror(ret)));
- }
-#endif // HAVE_LIBGNUTLS
- }
-
- len = ret;
-}
-
-#ifdef HAVE_LIBGNUTLS
-size_t SocketCore::shiftPeekData(char* data, size_t len)
-{
- if(peekBufLength_ <= len) {
- memcpy(data, peekBuf_, peekBufLength_);
- size_t ret = peekBufLength_;
- peekBufLength_ = 0;
- return ret;
- } else {
- memcpy(data, peekBuf_, len);
- peekBufLength_ -= len;
- memmove(peekBuf_, peekBuf_+len, peekBufLength_);
- return len;
- }
-
-}
-
-void SocketCore::addPeekData(char* data, size_t len)
-{
- if(peekBufLength_+len > peekBufMax_) {
- char* temp = new char[peekBufMax_+len];
- memcpy(temp, peekBuf_, peekBufLength_);
- delete [] peekBuf_;
- peekBuf_ = temp;
- peekBufMax_ = peekBufLength_+len;
- }
- memcpy(peekBuf_+peekBufLength_, data, len);
- peekBufLength_ += len;
-}
-
-static ssize_t GNUTLS_RECORD_RECV_NO_INTERRUPT
-(gnutls_session_t sslSession, char* data, size_t len)
-{
- int ret;
- while((ret = gnutls_record_recv(sslSession, data, len)) ==
- GNUTLS_E_INTERRUPTED);
- if(ret < 0 && ret != GNUTLS_E_AGAIN) {
- throw DL_RETRY_EX(fmt(EX_SOCKET_RECV, gnutls_strerror(ret)));
- }
- return ret;
-}
-
-ssize_t SocketCore::gnutlsRecv(char* data, size_t len)
-{
- size_t plen = shiftPeekData(data, len);
- if(plen < len) {
- ssize_t ret = GNUTLS_RECORD_RECV_NO_INTERRUPT
- (sslSession_, data+plen, len-plen);
- if(ret == GNUTLS_E_AGAIN) {
- return GNUTLS_E_AGAIN;
- }
- return plen+ret;
- } else {
- return plen;
- }
-}
-
-ssize_t SocketCore::gnutlsPeek(char* data, size_t len)
-{
- if(peekBufLength_ >= len) {
- memcpy(data, peekBuf_, len);
- return len;
- } else {
- memcpy(data, peekBuf_, peekBufLength_);
- ssize_t ret = GNUTLS_RECORD_RECV_NO_INTERRUPT
- (sslSession_, data+peekBufLength_, len-peekBufLength_);
- if(ret == GNUTLS_E_AGAIN) {
- return GNUTLS_E_AGAIN;
- }
- addPeekData(data+peekBufLength_, ret);
- return peekBufLength_;
- }
-}
-#endif // HAVE_LIBGNUTLS
-
void SocketCore::prepareSecureConnection()
{
if(!secure_) {
@@ -1136,7 +1005,6 @@ bool SocketCore::initiateSecureConnection(const std::string& hostname)
}
}
}
- peekBuf_ = new char[peekBufMax_];
#endif // HAVE_LIBGNUTLS
secure_ = 2;
return true;
diff --git a/src/SocketCore.h b/src/SocketCore.h
index ed91195e..bbf01ea7 100644
--- a/src/SocketCore.h
+++ b/src/SocketCore.h
@@ -96,14 +96,6 @@ private:
#endif // HAVE_LIBSSL
#ifdef HAVE_LIBGNUTLS
gnutls_session_t sslSession_;
- char* peekBuf_;
- size_t peekBufLength_;
- size_t peekBufMax_;
-
- size_t shiftPeekData(char* data, size_t len);
- void addPeekData(char* data, size_t len);
- ssize_t gnutlsRecv(char* data, size_t len);
- ssize_t gnutlsPeek(char* data, size_t len);
void gnutlsRecordCheckDirection();
#endif // HAVE_LIBGNUTLS
@@ -295,22 +287,6 @@ public:
}
/**
- * Reads up to len bytes from this socket, but bytes are not removed from
- * this socket.
- * This method internally calls isReadable(). The parameter timeout is used
- * for this method call.
- * @param data holder to store data.
- * @param len the maximum size data can store. This method assigns
- * the number of bytes read to len.
- */
- void peekData(char* data, size_t& len);
-
- void peekData(unsigned char* data, size_t& len)
- {
- peekData(reinterpret_cast<char*>(data), len);
- }
-
- /**
* Makes this socket secure.
* If the system has not OpenSSL, then this method do nothing.
* connection must be established before calling this method.