diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-26 17:45:49 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-26 17:45:49 +0000 |
commit | c2c28ac4560a58a4ff7e86d00e55e55e9df0a15d (patch) | |
tree | 1da78d566b4a17c3c0b65995e4dffaee62686521 /remoting/jingle_glue/xmpp_socket_adapter.h | |
parent | 6a1a59a1fe996029e2dda0dc8592257f9fa0408b (diff) | |
download | chromium_src-c2c28ac4560a58a4ff7e86d00e55e55e9df0a15d.zip chromium_src-c2c28ac4560a58a4ff7e86d00e55e55e9df0a15d.tar.gz chromium_src-c2c28ac4560a58a4ff7e86d00e55e55e9df0a15d.tar.bz2 |
Revert 148418 - Always use chromium threads for IO in remoting host
BUG=137140
Review URL: https://chromiumcodereview.appspot.com/10808094
TBR=sergeyu@chromium.org
Review URL: https://chromiumcodereview.appspot.com/10829040
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148578 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/jingle_glue/xmpp_socket_adapter.h')
-rw-r--r-- | remoting/jingle_glue/xmpp_socket_adapter.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/remoting/jingle_glue/xmpp_socket_adapter.h b/remoting/jingle_glue/xmpp_socket_adapter.h new file mode 100644 index 0000000..8ee58d4 --- /dev/null +++ b/remoting/jingle_glue/xmpp_socket_adapter.h @@ -0,0 +1,89 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef REMOTING_JINGLE_GLUE_XMPP_SOCKET_ADAPTER_H_ +#define REMOTING_JINGLE_GLUE_XMPP_SOCKET_ADAPTER_H_ + +#include <string> + +#include "base/basictypes.h" +#include "base/compiler_specific.h" +#include "third_party/libjingle/source/talk/base/asyncsocket.h" +#include "third_party/libjingle/source/talk/xmpp/asyncsocket.h" +#include "third_party/libjingle/source/talk/xmpp/xmppclientsettings.h" +#include "third_party/libjingle/source/talk/xmpp/xmppengine.h" + +#ifndef _WIN32 +// Additional errors used by us from Win32 headers. +#define SEC_E_CERT_EXPIRED static_cast<int>(0x80090328L) +#define WSA_NOT_ENOUGH_MEMORY ENOMEM +#endif + +namespace remoting { + +class XmppSocketAdapter : public buzz::AsyncSocket, + public sigslot::has_slots<> { + public: + XmppSocketAdapter(const buzz::XmppClientSettings& xcs, + bool allow_unverified_certs); + virtual ~XmppSocketAdapter(); + + virtual State state() OVERRIDE; + virtual Error error() OVERRIDE; + virtual int GetError() OVERRIDE; + + void set_firewall(bool firewall) { firewall_ = firewall; } + + virtual bool Connect(const talk_base::SocketAddress& addr) OVERRIDE; + virtual bool Read(char* data, size_t len, size_t* len_read) OVERRIDE; + virtual bool Write(const char* data, size_t len) OVERRIDE; + virtual bool Close() OVERRIDE; + +#if defined(FEATURE_ENABLE_SSL) + virtual bool StartTls(const std::string& domainname) OVERRIDE; + bool IsOpen() const { return state_ == STATE_OPEN + || state_ == STATE_TLS_OPEN; } +#else + bool IsOpen() const { return state_ == STATE_OPEN; } +#endif + + sigslot::signal0<> SignalAuthenticationError; + + private: + // Return false if the socket is closed. + bool HandleReadable(); + bool HandleWritable(); + + State state_; + Error error_; + int wsa_error_; + + talk_base::AsyncSocket* socket_; + cricket::ProtocolType protocol_; + talk_base::ProxyInfo proxy_; + bool firewall_; + char* write_buffer_; + size_t write_buffer_length_; + size_t write_buffer_capacity_; + bool allow_unverified_certs_; + + bool FreeState(); + void NotifyClose(); + + void OnReadEvent(talk_base::AsyncSocket* socket); + void OnWriteEvent(talk_base::AsyncSocket* socket); + void OnConnectEvent(talk_base::AsyncSocket* socket); + void OnCloseEvent(talk_base::AsyncSocket* socket, int error); + + void QueueWriteData(const char* data, size_t len); + void FlushWriteQueue(Error* error, int* wsa_error); + + void SetError(Error error); + void SetWSAError(int error); + DISALLOW_COPY_AND_ASSIGN(XmppSocketAdapter); +}; + +} // namespace remoting + +#endif // REMOTING_JINGLE_GLUE_XMPP_SOCKET_ADAPTER_H_ |