summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2015-12-13 12:53:29 -0300
committerJuan Linietsky <reduzio@gmail.com>2015-12-13 12:53:29 -0300
commit95a469ad28e54fe05c3ae548725e557f91021d79 (patch)
tree52b9ee5ebd82671f69e4bab9417ebaf751914048 /drivers
parent451b1d91446f6e15763b4d6ec3bd6d74c2be8080 (diff)
added binary API to StreamPeer, fixes #2863
Diffstat (limited to 'drivers')
-rw-r--r--drivers/openssl/stream_peer_openssl.cpp7
-rw-r--r--drivers/openssl/stream_peer_openssl.h2
-rw-r--r--drivers/unix/stream_peer_tcp_posix.cpp9
-rw-r--r--drivers/unix/stream_peer_tcp_posix.h2
4 files changed, 20 insertions, 0 deletions
diff --git a/drivers/openssl/stream_peer_openssl.cpp b/drivers/openssl/stream_peer_openssl.cpp
index ef07f11334..81795fdc60 100644
--- a/drivers/openssl/stream_peer_openssl.cpp
+++ b/drivers/openssl/stream_peer_openssl.cpp
@@ -479,6 +479,13 @@ Error StreamPeerOpenSSL::get_partial_data(uint8_t* p_buffer, int p_bytes,int &r_
return OK;
}
+int StreamPeerOpenSSL::get_available_bytes() const {
+
+ ERR_FAIL_COND_V(!connected,0);
+
+ return SSL_pending(ssl);
+
+}
StreamPeerOpenSSL::StreamPeerOpenSSL() {
ctx=NULL;
diff --git a/drivers/openssl/stream_peer_openssl.h b/drivers/openssl/stream_peer_openssl.h
index a66b641dd4..64f5a1d7ac 100644
--- a/drivers/openssl/stream_peer_openssl.h
+++ b/drivers/openssl/stream_peer_openssl.h
@@ -71,6 +71,8 @@ public:
virtual Error get_data(uint8_t* p_buffer, int p_bytes);
virtual Error get_partial_data(uint8_t* p_buffer, int p_bytes,int &r_received);
+ virtual int get_available_bytes() const;
+
static void initialize_ssl();
static void finalize_ssl();
diff --git a/drivers/unix/stream_peer_tcp_posix.cpp b/drivers/unix/stream_peer_tcp_posix.cpp
index 5aa3915893..edf5e02971 100644
--- a/drivers/unix/stream_peer_tcp_posix.cpp
+++ b/drivers/unix/stream_peer_tcp_posix.cpp
@@ -38,6 +38,7 @@
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
+#include <sys/ioctl.h>
#ifndef NO_FCNTL
#ifdef __HAIKU__
#include <fcntl.h>
@@ -367,6 +368,14 @@ Error StreamPeerTCPPosix::get_partial_data(uint8_t* p_buffer, int p_bytes,int &r
return read(p_buffer, p_bytes, r_received, false);
};
+int StreamPeerTCPPosix::get_available_bytes() const {
+
+ unsigned long len;
+ int ret = ioctl(sockfd,FIONREAD,&len);
+ ERR_FAIL_COND_V(ret==-1,0)
+ return len;
+
+}
IP_Address StreamPeerTCPPosix::get_connected_host() const {
return peer_host;
diff --git a/drivers/unix/stream_peer_tcp_posix.h b/drivers/unix/stream_peer_tcp_posix.h
index 9b1716ac42..817f24c91c 100644
--- a/drivers/unix/stream_peer_tcp_posix.h
+++ b/drivers/unix/stream_peer_tcp_posix.h
@@ -67,6 +67,8 @@ public:
virtual Error get_data(uint8_t* p_buffer, int p_bytes);
virtual Error get_partial_data(uint8_t* p_buffer, int p_bytes,int &r_received);
+ virtual int get_available_bytes() const;
+
void set_socket(int p_sockfd, IP_Address p_host, int p_port);
virtual IP_Address get_connected_host() const;