diff options
author | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-02 17:28:10 +0000 |
---|---|---|
committer | sergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-02 17:28:10 +0000 |
commit | 26d912d33fc645ff2499e3537adad66d46e76b33 (patch) | |
tree | 809d8c79564ba2d697b608347cabcf24a8e8857b /webkit | |
parent | c0022e306a82f29b471bc5d0e7700030de3f9cc5 (diff) | |
download | chromium_src-26d912d33fc645ff2499e3537adad66d46e76b33.zip chromium_src-26d912d33fc645ff2499e3537adad66d46e76b33.tar.gz chromium_src-26d912d33fc645ff2499e3537adad66d46e76b33.tar.bz2 |
Implement PseudoTCP support in P2P Transport Pepper API.
BUG=None
TEST=Unittests
Review URL: http://codereview.chromium.org/6893101
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@83736 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/glue/p2p_transport.h | 11 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppb_transport_impl.cc | 33 | ||||
-rw-r--r-- | webkit/plugins/ppapi/ppb_transport_impl.h | 3 |
3 files changed, 42 insertions, 5 deletions
diff --git a/webkit/glue/p2p_transport.h b/webkit/glue/p2p_transport.h index e80ffb5..2c3200f 100644 --- a/webkit/glue/p2p_transport.h +++ b/webkit/glue/p2p_transport.h @@ -22,6 +22,11 @@ class P2PTransport { STATE_READABLE = 2, }; + enum Protocol { + PROTOCOL_UDP = 0, + PROTOCOL_TCP = 1, + }; + class EventHandler { public: virtual ~EventHandler() {} @@ -31,6 +36,11 @@ class P2PTransport { // Called when readable of writable state of the stream changes. virtual void OnStateChange(State state) = 0; + + // Called when an error occures (e.g. TCP handshake + // failed). P2PTransport object is not usable after that and + // should be destroyed. + virtual void OnError(int error) = 0; }; virtual ~P2PTransport() {} @@ -38,6 +48,7 @@ class P2PTransport { // Initialize transport using specified configuration. Returns true // if initialization succeeded. virtual bool Init(const std::string& name, + Protocol protocol, const std::string& config, EventHandler* event_handler) = 0; diff --git a/webkit/plugins/ppapi/ppb_transport_impl.cc b/webkit/plugins/ppapi/ppb_transport_impl.cc index 3f48721..a37f299 100644 --- a/webkit/plugins/ppapi/ppb_transport_impl.cc +++ b/webkit/plugins/ppapi/ppb_transport_impl.cc @@ -5,6 +5,7 @@ #include "webkit/plugins/ppapi/ppb_transport_impl.h" #include "base/message_loop.h" +#include "base/string_util.h" #include "net/base/io_buffer.h" #include "net/base/net_errors.h" #include "net/socket/socket.h" @@ -16,11 +17,16 @@ #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" #include "webkit/plugins/ppapi/var.h" +using webkit_glue::P2PTransport; + namespace webkit { namespace ppapi { namespace { +const char kUdpProtocolName[] = "udp"; +const char kTcpProtocolName[] = "tcp"; + PP_Resource CreateTransport(PP_Instance instance_id, const char* name, const char* proto) { PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); @@ -137,7 +143,16 @@ PPB_Transport_Impl* PPB_Transport_Impl::AsPPB_Transport_Impl() { bool PPB_Transport_Impl::Init(const char* name, const char* proto) { name_ = name; - proto_ = proto; + + if (base::strcasecmp(proto, kUdpProtocolName) == 0) { + use_tcp_ = false; + } else if (base::strcasecmp(proto, kTcpProtocolName) == 0) { + use_tcp_ = true; + } else { + LOG(WARNING) << "Unknown protocol: " << proto; + return false; + } + p2p_transport_.reset(instance()->delegate()->CreateP2PTransport()); return p2p_transport_.get() != NULL; } @@ -153,13 +168,14 @@ int32_t PPB_Transport_Impl::Connect(PP_CompletionCallback callback) { if (!p2p_transport_.get()) return PP_ERROR_FAILED; - // TODO(sergeyu): Use |proto_| here. - // Connect() has already been called. if (started_) return PP_ERROR_INPROGRESS; - if (!p2p_transport_->Init(name_, "", this)) + P2PTransport::Protocol protocol = use_tcp_ ? + P2PTransport::PROTOCOL_TCP : P2PTransport::PROTOCOL_UDP; + + if (!p2p_transport_->Init(name_, protocol, "", this)) return PP_ERROR_FAILED; started_ = true; @@ -285,6 +301,15 @@ void PPB_Transport_Impl::OnStateChange(webkit_glue::P2PTransport::State state) { } } +void PPB_Transport_Impl::OnError(int error) { + writable_ = false; + if (connect_callback_.get() && !connect_callback_->completed()) { + scoped_refptr<TrackedCompletionCallback> callback; + callback.swap(connect_callback_); + callback->Run(PP_ERROR_FAILED); + } +} + void PPB_Transport_Impl::OnRead(int result) { DCHECK(recv_callback_.get() && !recv_callback_->completed()); diff --git a/webkit/plugins/ppapi/ppb_transport_impl.h b/webkit/plugins/ppapi/ppb_transport_impl.h index c368b07..ca4818f 100644 --- a/webkit/plugins/ppapi/ppb_transport_impl.h +++ b/webkit/plugins/ppapi/ppb_transport_impl.h @@ -43,13 +43,14 @@ class PPB_Transport_Impl : public Resource, // webkit_glue::P2PTransport::EventHandler implementation. virtual void OnCandidateReady(const std::string& address) OVERRIDE; virtual void OnStateChange(webkit_glue::P2PTransport::State state) OVERRIDE; + virtual void OnError(int error) OVERRIDE; private: void OnRead(int result); void OnWritten(int result); std::string name_; - std::string proto_; + bool use_tcp_; bool started_; scoped_ptr<webkit_glue::P2PTransport> p2p_transport_; bool writable_; |