Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: net/socket/unix_domain_socket_posix.cc

Issue 20142003: Remove ref-counting from StreamListenSocket (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixup Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/socket/unix_domain_socket_posix.h" 5 #include "net/socket/unix_domain_socket_posix.h"
6 6
7 #include <cstring> 7 #include <cstring>
8 #include <string> 8 #include <string>
9 9
10 #include <errno.h> 10 #include <errno.h>
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 } 46 }
47 47
48 } // namespace 48 } // namespace
49 49
50 // static 50 // static
51 UnixDomainSocket::AuthCallback NoAuthentication() { 51 UnixDomainSocket::AuthCallback NoAuthentication() {
52 return base::Bind(NoAuthenticationCallback); 52 return base::Bind(NoAuthenticationCallback);
53 } 53 }
54 54
55 // static 55 // static
56 UnixDomainSocket* UnixDomainSocket::CreateAndListenInternal( 56 scoped_ptr<UnixDomainSocket> UnixDomainSocket::CreateAndListenInternal(
57 const std::string& path, 57 const std::string& path,
58 const std::string& fallback_path, 58 const std::string& fallback_path,
59 StreamListenSocket::Delegate* del, 59 StreamListenSocket::Delegate* del,
60 const AuthCallback& auth_callback, 60 const AuthCallback& auth_callback,
61 bool use_abstract_namespace) { 61 bool use_abstract_namespace) {
62 SocketDescriptor s = CreateAndBind(path, use_abstract_namespace); 62 SocketDescriptor s = CreateAndBind(path, use_abstract_namespace);
63 if (s == kInvalidSocket && !fallback_path.empty()) 63 if (s == kInvalidSocket && !fallback_path.empty())
64 s = CreateAndBind(fallback_path, use_abstract_namespace); 64 s = CreateAndBind(fallback_path, use_abstract_namespace);
65 if (s == kInvalidSocket) 65 if (s == kInvalidSocket)
66 return NULL; 66 return scoped_ptr<UnixDomainSocket>();
67 UnixDomainSocket* sock = new UnixDomainSocket(s, del, auth_callback); 67 scoped_ptr<UnixDomainSocket> sock(
68 new UnixDomainSocket(s, del, auth_callback));
68 sock->Listen(); 69 sock->Listen();
69 return sock; 70 return sock.Pass();
70 } 71 }
71 72
72 // static 73 // static
73 scoped_refptr<UnixDomainSocket> UnixDomainSocket::CreateAndListen( 74 scoped_ptr<UnixDomainSocket> UnixDomainSocket::CreateAndListen(
74 const std::string& path, 75 const std::string& path,
75 StreamListenSocket::Delegate* del, 76 StreamListenSocket::Delegate* del,
76 const AuthCallback& auth_callback) { 77 const AuthCallback& auth_callback) {
77 return CreateAndListenInternal(path, "", del, auth_callback, false); 78 return CreateAndListenInternal(path, "", del, auth_callback, false);
78 } 79 }
79 80
80 #if defined(SOCKET_ABSTRACT_NAMESPACE_SUPPORTED) 81 #if defined(SOCKET_ABSTRACT_NAMESPACE_SUPPORTED)
81 // static 82 // static
82 scoped_refptr<UnixDomainSocket> 83 scoped_ptr<UnixDomainSocket>
83 UnixDomainSocket::CreateAndListenWithAbstractNamespace( 84 UnixDomainSocket::CreateAndListenWithAbstractNamespace(
84 const std::string& path, 85 const std::string& path,
85 const std::string& fallback_path, 86 const std::string& fallback_path,
86 StreamListenSocket::Delegate* del, 87 StreamListenSocket::Delegate* del,
87 const AuthCallback& auth_callback) { 88 const AuthCallback& auth_callback) {
88 return make_scoped_refptr( 89 return
89 CreateAndListenInternal(path, fallback_path, del, auth_callback, true)); 90 CreateAndListenInternal(path, fallback_path, del, auth_callback, true);
90 } 91 }
91 #endif 92 #endif
92 93
93 UnixDomainSocket::UnixDomainSocket( 94 UnixDomainSocket::UnixDomainSocket(
94 SocketDescriptor s, 95 SocketDescriptor s,
95 StreamListenSocket::Delegate* del, 96 StreamListenSocket::Delegate* del,
96 const AuthCallback& auth_callback) 97 const AuthCallback& auth_callback)
97 : StreamListenSocket(s, del), 98 : StreamListenSocket(s, del),
98 auth_callback_(auth_callback) {} 99 auth_callback_(auth_callback) {}
99 100
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 if (conn == kInvalidSocket) 141 if (conn == kInvalidSocket)
141 return; 142 return;
142 uid_t user_id; 143 uid_t user_id;
143 gid_t group_id; 144 gid_t group_id;
144 if (!GetPeerIds(conn, &user_id, &group_id) || 145 if (!GetPeerIds(conn, &user_id, &group_id) ||
145 !auth_callback_.Run(user_id, group_id)) { 146 !auth_callback_.Run(user_id, group_id)) {
146 if (HANDLE_EINTR(close(conn)) < 0) 147 if (HANDLE_EINTR(close(conn)) < 0)
147 LOG(ERROR) << "close() error"; 148 LOG(ERROR) << "close() error";
148 return; 149 return;
149 } 150 }
150 scoped_refptr<UnixDomainSocket> sock( 151 scoped_ptr<UnixDomainSocket> sock(
151 new UnixDomainSocket(conn, socket_delegate_, auth_callback_)); 152 new UnixDomainSocket(conn, socket_delegate_, auth_callback_));
152 // It's up to the delegate to AddRef if it wants to keep it around. 153 // It's up to the delegate to AddRef if it wants to keep it around.
153 sock->WatchSocket(WAITING_READ); 154 sock->WatchSocket(WAITING_READ);
154 socket_delegate_->DidAccept(this, sock.get()); 155 socket_delegate_->DidAccept(this, sock.PassAs<StreamListenSocket>());
155 } 156 }
156 157
157 UnixDomainSocketFactory::UnixDomainSocketFactory( 158 UnixDomainSocketFactory::UnixDomainSocketFactory(
158 const std::string& path, 159 const std::string& path,
159 const UnixDomainSocket::AuthCallback& auth_callback) 160 const UnixDomainSocket::AuthCallback& auth_callback)
160 : path_(path), 161 : path_(path),
161 auth_callback_(auth_callback) {} 162 auth_callback_(auth_callback) {}
162 163
163 UnixDomainSocketFactory::~UnixDomainSocketFactory() {} 164 UnixDomainSocketFactory::~UnixDomainSocketFactory() {}
164 165
165 scoped_refptr<StreamListenSocket> UnixDomainSocketFactory::CreateAndListen( 166 scoped_ptr<StreamListenSocket> UnixDomainSocketFactory::CreateAndListen(
166 StreamListenSocket::Delegate* delegate) const { 167 StreamListenSocket::Delegate* delegate) const {
167 return UnixDomainSocket::CreateAndListen( 168 return UnixDomainSocket::CreateAndListen(
168 path_, delegate, auth_callback_); 169 path_, delegate, auth_callback_).PassAs<StreamListenSocket>();
169 } 170 }
170 171
171 #if defined(SOCKET_ABSTRACT_NAMESPACE_SUPPORTED) 172 #if defined(SOCKET_ABSTRACT_NAMESPACE_SUPPORTED)
172 173
173 UnixDomainSocketWithAbstractNamespaceFactory:: 174 UnixDomainSocketWithAbstractNamespaceFactory::
174 UnixDomainSocketWithAbstractNamespaceFactory( 175 UnixDomainSocketWithAbstractNamespaceFactory(
175 const std::string& path, 176 const std::string& path,
176 const std::string& fallback_path, 177 const std::string& fallback_path,
177 const UnixDomainSocket::AuthCallback& auth_callback) 178 const UnixDomainSocket::AuthCallback& auth_callback)
178 : UnixDomainSocketFactory(path, auth_callback), 179 : UnixDomainSocketFactory(path, auth_callback),
179 fallback_path_(fallback_path) {} 180 fallback_path_(fallback_path) {}
180 181
181 UnixDomainSocketWithAbstractNamespaceFactory:: 182 UnixDomainSocketWithAbstractNamespaceFactory::
182 ~UnixDomainSocketWithAbstractNamespaceFactory() {} 183 ~UnixDomainSocketWithAbstractNamespaceFactory() {}
183 184
184 scoped_refptr<StreamListenSocket> 185 scoped_ptr<StreamListenSocket>
185 UnixDomainSocketWithAbstractNamespaceFactory::CreateAndListen( 186 UnixDomainSocketWithAbstractNamespaceFactory::CreateAndListen(
186 StreamListenSocket::Delegate* delegate) const { 187 StreamListenSocket::Delegate* delegate) const {
187 return UnixDomainSocket::CreateAndListenWithAbstractNamespace( 188 return UnixDomainSocket::CreateAndListenWithAbstractNamespace(
188 path_, fallback_path_, delegate, auth_callback_); 189 path_, fallback_path_, delegate, auth_callback_)
190 .PassAs<StreamListenSocket>();
189 } 191 }
190 192
191 #endif 193 #endif
192 194
193 } // namespace net 195 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698