summaryrefslogtreecommitdiffstats
path: root/native_client_sdk
diff options
context:
space:
mode:
authorsbc <sbc@chromium.org>2015-10-16 14:38:22 -0700
committerCommit bot <commit-bot@chromium.org>2015-10-16 21:39:01 +0000
commit8a174f84035c7395ceeb9aa24dd81646319b34b1 (patch)
tree3d8e0189ed4730231010ecb3fbd741b7b4b76a0d /native_client_sdk
parent3aa3839c53008b3ee094e93f26f25d8306c06cc7 (diff)
downloadchromium_src-8a174f84035c7395ceeb9aa24dd81646319b34b1.zip
chromium_src-8a174f84035c7395ceeb9aa24dd81646319b34b1.tar.gz
chromium_src-8a174f84035c7395ceeb9aa24dd81646319b34b1.tar.bz2
[NaCl SDK] Add support for SO_TYPE to getsockopt
CQ_EXTRA_TRYBOTS=tryserver.chromium.linux:linux_nacl_sdk;tryserver.chromium.mac:mac_nacl_sdk;tryserver.chromium.win:win_nacl_sdk BUG=447869 Review URL: https://codereview.chromium.org/1413683002 Cr-Commit-Position: refs/heads/master@{#354608}
Diffstat (limited to 'native_client_sdk')
-rw-r--r--native_client_sdk/src/libraries/nacl_io/socket/socket_node.cc14
-rw-r--r--native_client_sdk/src/libraries/nacl_io/socket/socket_node.h5
-rw-r--r--native_client_sdk/src/libraries/nacl_io/socket/tcp_node.cc4
-rw-r--r--native_client_sdk/src/libraries/nacl_io/socket/udp_node.cc2
-rw-r--r--native_client_sdk/src/libraries/nacl_io/socket/unix_node.cc5
-rw-r--r--native_client_sdk/src/tests/nacl_io_socket_test/socket_test.cc16
6 files changed, 35 insertions, 11 deletions
diff --git a/native_client_sdk/src/libraries/nacl_io/socket/socket_node.cc b/native_client_sdk/src/libraries/nacl_io/socket/socket_node.cc
index b3517de..0ec40cd 100644
--- a/native_client_sdk/src/libraries/nacl_io/socket/socket_node.cc
+++ b/native_client_sdk/src/libraries/nacl_io/socket/socket_node.cc
@@ -19,26 +19,28 @@
namespace nacl_io {
-SocketNode::SocketNode(Filesystem* filesystem)
+SocketNode::SocketNode(int type, Filesystem* filesystem)
: StreamNode(filesystem),
socket_resource_(0),
local_addr_(0),
remote_addr_(0),
socket_flags_(0),
last_errno_(0),
- keep_alive_(false) {
+ keep_alive_(false),
+ so_type_(type) {
memset(&linger_, 0, sizeof(linger_));
SetType(S_IFSOCK);
}
-SocketNode::SocketNode(Filesystem* filesystem, PP_Resource socket)
+SocketNode::SocketNode(int type, Filesystem* filesystem, PP_Resource socket)
: StreamNode(filesystem),
socket_resource_(socket),
local_addr_(0),
remote_addr_(0),
socket_flags_(0),
last_errno_(0),
- keep_alive_(false) {
+ keep_alive_(false),
+ so_type_(type) {
memset(&linger_, 0, sizeof(linger_));
SetType(S_IFSOCK);
filesystem_->ppapi()->AddRefResource(socket_resource_);
@@ -248,6 +250,10 @@ Error SocketNode::GetSockOpt(int lvl,
value_ptr = &value;
value_len = sizeof(value);
break;
+ case SO_TYPE:
+ value_ptr = &so_type_;
+ value_len = sizeof(so_type_);
+ break;
case SO_LINGER:
value_ptr = &linger_;
value_len = sizeof(linger_);
diff --git a/native_client_sdk/src/libraries/nacl_io/socket/socket_node.h b/native_client_sdk/src/libraries/nacl_io/socket/socket_node.h
index f6f1541..9b3c35b 100644
--- a/native_client_sdk/src/libraries/nacl_io/socket/socket_node.h
+++ b/native_client_sdk/src/libraries/nacl_io/socket/socket_node.h
@@ -30,8 +30,8 @@ typedef sdk_util::ScopedRef<SocketNode> ScopedSocketNode;
class SocketNode : public StreamNode {
public:
- explicit SocketNode(Filesystem* filesystem);
- SocketNode(Filesystem* filesystem, PP_Resource socket);
+ SocketNode(int type, Filesystem* filesystem);
+ SocketNode(int type, Filesystem* filesystem, PP_Resource socket);
protected:
virtual void Destroy();
@@ -169,6 +169,7 @@ class SocketNode : public StreamNode {
uint32_t socket_flags_;
int last_errno_;
bool keep_alive_;
+ int so_type_;
struct linger linger_;
friend class KernelProxy;
diff --git a/native_client_sdk/src/libraries/nacl_io/socket/tcp_node.cc b/native_client_sdk/src/libraries/nacl_io/socket/tcp_node.cc
index 5649566..a7bf74f 100644
--- a/native_client_sdk/src/libraries/nacl_io/socket/tcp_node.cc
+++ b/native_client_sdk/src/libraries/nacl_io/socket/tcp_node.cc
@@ -276,14 +276,14 @@ class TCPConnectWork : public StreamFs::Work {
};
TcpNode::TcpNode(Filesystem* filesystem)
- : SocketNode(filesystem),
+ : SocketNode(SOCK_STREAM, filesystem),
emitter_(new TcpEventEmitter(kDefaultFifoSize, kDefaultFifoSize)),
tcp_nodelay_(false) {
emitter_->AttachStream(this);
}
TcpNode::TcpNode(Filesystem* filesystem, PP_Resource socket)
- : SocketNode(filesystem, socket),
+ : SocketNode(SOCK_STREAM, filesystem, socket),
emitter_(new TcpEventEmitter(kDefaultFifoSize, kDefaultFifoSize)),
tcp_nodelay_(false) {
emitter_->AttachStream(this);
diff --git a/native_client_sdk/src/libraries/nacl_io/socket/udp_node.cc b/native_client_sdk/src/libraries/nacl_io/socket/udp_node.cc
index 604c99f..f19baee 100644
--- a/native_client_sdk/src/libraries/nacl_io/socket/udp_node.cc
+++ b/native_client_sdk/src/libraries/nacl_io/socket/udp_node.cc
@@ -163,7 +163,7 @@ class UdpRecvWork : public UdpWork {
};
UdpNode::UdpNode(Filesystem* filesystem)
- : SocketNode(filesystem),
+ : SocketNode(SOCK_DGRAM, filesystem),
emitter_(new UdpEventEmitter(kDefaultFifoSize, kDefaultFifoSize)) {
emitter_->AttachStream(this);
}
diff --git a/native_client_sdk/src/libraries/nacl_io/socket/unix_node.cc b/native_client_sdk/src/libraries/nacl_io/socket/unix_node.cc
index c5675a6..8fa44fd 100644
--- a/native_client_sdk/src/libraries/nacl_io/socket/unix_node.cc
+++ b/native_client_sdk/src/libraries/nacl_io/socket/unix_node.cc
@@ -15,13 +15,14 @@
namespace nacl_io {
UnixNode::UnixNode(Filesystem* filesystem)
- : SocketNode(filesystem),
+ : SocketNode(SOCK_STREAM, filesystem),
emitter_(UnixEventEmitter::MakeUnixEventEmitter(65536)) {
emitter_->AttachStream(this);
}
UnixNode::UnixNode(Filesystem* filesystem, const UnixNode& peer)
- : SocketNode(filesystem), emitter_(peer.emitter_->GetPeerEmitter()) {
+ : SocketNode(SOCK_STREAM, filesystem),
+ emitter_(peer.emitter_->GetPeerEmitter()) {
emitter_->AttachStream(this);
}
diff --git a/native_client_sdk/src/tests/nacl_io_socket_test/socket_test.cc b/native_client_sdk/src/tests/nacl_io_socket_test/socket_test.cc
index 1c7edd4..839babe 100644
--- a/native_client_sdk/src/tests/nacl_io_socket_test/socket_test.cc
+++ b/native_client_sdk/src/tests/nacl_io_socket_test/socket_test.cc
@@ -405,6 +405,8 @@ TEST_F(SocketTestTCP, TCPConnectFails) {
TEST_F(SocketTest, Getsockopt) {
sock1_ = ki_socket(AF_INET, SOCK_STREAM, 0);
EXPECT_GT(sock1_, -1);
+ sock2_ = ki_socket(AF_INET, SOCK_DGRAM, 0);
+ EXPECT_GT(sock1_, -1);
int socket_error = 99;
socklen_t len = sizeof(socket_error);
@@ -415,6 +417,20 @@ TEST_F(SocketTest, Getsockopt) {
ASSERT_EQ(0, socket_error);
ASSERT_EQ(sizeof(socket_error), len);
+ // Check SO_TYPE for TCP sockets
+ int socket_type = 0;
+ len = sizeof(socket_type);
+ ASSERT_EQ(0, ki_getsockopt(sock1_, SOL_SOCKET, SO_TYPE, &socket_type, &len));
+ ASSERT_EQ(SOCK_STREAM, socket_type);
+ ASSERT_EQ(sizeof(socket_type), len);
+
+ // Check SO_TYPE for UDP sockets
+ socket_type = 0;
+ len = sizeof(socket_type);
+ ASSERT_EQ(0, ki_getsockopt(sock2_, SOL_SOCKET, SO_TYPE, &socket_type, &len));
+ ASSERT_EQ(SOCK_DGRAM, socket_type);
+ ASSERT_EQ(sizeof(socket_type), len);
+
// Test for an invalid option (-1)
ASSERT_EQ(-1, ki_getsockopt(sock1_, SOL_SOCKET, -1, &socket_error, &len));
ASSERT_EQ(ENOPROTOOPT, errno);