15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef PPAPI_CPP_WEBSOCKET_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPAPI_CPP_WEBSOCKET_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/ppb_websocket.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/resource.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/// @file
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/// This file defines the WebSocket interface providing bi-directional,
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/// full-duplex, communications over a single TCP socket.
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Windows headers will redefine SendMessage.
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef SendMessage
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#undef SendMessage
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace pp {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CompletionCallback;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InstanceHandle;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Var;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/// The <code>WebSocket</code> class providing bi-directional,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/// full-duplex, communications over a single TCP socket.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebSocket : public Resource {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Constructs a WebSocket object.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @param[in] instance The instance with which this resource will be
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// associated.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit WebSocket(const InstanceHandle& instance);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Destructs a WebSocket object.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~WebSocket();
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Connect() connects to the specified WebSocket server. You can call this
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// function once for an object.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @param[in] url A <code>Var</code> of string type representing a WebSocket
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// server URL.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @param[in] protocols A pointer to an array of <code>Var</code> of string
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// type specifying sub-protocols. Each <code>Var</code> represents one
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// sub-protocol. This argument can be null only if
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>protocol_count</code> is 0.
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @param[in] protocol_count The number of sub-protocols in
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>protocols</code>.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @param[in] callback A <code>CompletionCallback</code> called
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// when a connection is established or an error occurs in establishing
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// connection.
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @return An int32_t containing an error code from
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>pp_errors.h</code>.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Returns <code>PP_ERROR_BADARGUMENT</code> if specified <code>url</code>,
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// or <code>protocols</code> contains invalid string as defined in
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// the WebSocket API specification. <code>PP_ERROR_BADARGUMENT</code>
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// corresponds to a SyntaxError in the WebSocket API specification.
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Returns <code>PP_ERROR_NOACCESS</code> if the protocol specified in the
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>url</code> is not a secure protocol, but the origin of the caller
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// has a secure scheme. Also returns <code>PP_ERROR_NOACCESS</code> if the
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// port specified in the <code>url</code> is a port that the user agent is
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// configured to block access to because it is a well-known port like SMTP.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>PP_ERROR_NOACCESS</code> corresponds to a SecurityError of the
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// specification.
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Returns <code>PP_ERROR_INPROGRESS</code> if this is not the first call to
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Connect().
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t Connect(const Var& url, const Var protocols[],
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  uint32_t protocol_count, const CompletionCallback& callback);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Close() closes the specified WebSocket connection by specifying
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>code</code> and <code>reason</code>.
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @param[in] code The WebSocket close code. This is ignored if it is 0.
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>PP_WEBSOCKETSTATUSCODE_NORMAL_CLOSURE</code> must be used for the
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// usual case. To indicate some specific error cases, codes in the range
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>PP_WEBSOCKETSTATUSCODE_USER_REGISTERED_MIN</code> to
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>PP_WEBSOCKETSTATUSCODE_USER_REGISTERED_MAX</code>, and in the range
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>PP_WEBSOCKETSTATUSCODE_USER_PRIVATE_MIN</code> to
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>PP_WEBSOCKETSTATUSCODE_USER_PRIVATE_MAX</code> are available.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @param[in] reason A <code>Var</code> of string type representing the
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// close reason. This is ignored if it is an undefined type.
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @param[in] callback A <code>CompletionCallback</code> called when the
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// connection is closed or an error occurs in closing the connection.
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @return An int32_t containing an error code from
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>pp_errors.h</code>.
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Returns <code>PP_ERROR_BADARGUMENT</code> if <code>reason</code> contains
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// an invalid character as a UTF-8 string, or is longer than 123 bytes.
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>PP_ERROR_BADARGUMENT</code> corresponds to a JavaScript
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// SyntaxError in the WebSocket API specification.
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Returns <code>PP_ERROR_NOACCESS</code> if the code is not an integer
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// equal to 1000 or in the range 3000 to 4999.
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>PP_ERROR_NOACCESS</code> corresponds to an InvalidAccessError in
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// the WebSocket API specification. Returns <code>PP_ERROR_INPROGRESS</code>
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// if a previous call to Close() is not finished.
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t Close(uint16_t code, const Var& reason,
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                const CompletionCallback& callback);
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// ReceiveMessage() receives a message from the WebSocket server.
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// This interface only returns a single message. That is, this interface
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// must be called at least N times to receive N messages, no matter the size
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// of each message.
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @param[out] message The received message is copied to provided
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>message</code>. The <code>message</code> must remain valid until
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// ReceiveMessage() completes. Its received <code>Var</code> will be of
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// string or ArrayBuffer type.
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @param[in] callback A <code>CompletionCallback</code> called when
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// ReceiveMessage() completes. This callback is ignored if ReceiveMessage()
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// completes synchronously and returns <code>PP_OK</code>.
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @return An int32_t containing an error code from
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>pp_errors.h</code>.
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// If an error is detected or connection is closed, ReceiveMessage() returns
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>PP_ERROR_FAILED</code> after all buffered messages are received.
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Until buffered message become empty, ReceiveMessage() continues to return
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>PP_OK</code> as if connection is still established without errors.
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t ReceiveMessage(Var* message,
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const CompletionCallback& callback);
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// SendMessage() sends a message to the WebSocket server.
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @param[in] message A message to send. The message is copied to an internal
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// buffer, so the caller can free <code>message</code> safely after returning
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// from the function. This <code>Var</code> must be of string or
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// ArrayBuffer types.
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @return An int32_t containing an error code from
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>pp_errors.h</code>.
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Returns <code>PP_ERROR_FAILED</code> if the ReadyState is
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>PP_WEBSOCKETREADYSTATE_CONNECTING</code>.
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>PP_ERROR_FAILED</code> corresponds to a JavaScript
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// InvalidStateError in the WebSocket API specification.
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Returns <code>PP_ERROR_BADARGUMENT</code> if the provided
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>message</code> contains an invalid character as a
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// UTF-8 string. <code>PP_ERROR_BADARGUMENT</code> corresponds to a
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// JavaScript SyntaxError in the WebSocket API specification.
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Otherwise, returns <code>PP_OK</code>, but it doesn't necessarily mean
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// that the server received the message.
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t SendMessage(const Var& message);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// GetBufferedAmount() returns the number of bytes of text and binary
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// messages that have been queued for the WebSocket connection to send, but
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// have not been transmitted to the network yet.
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @return Returns the number of bytes.
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint64_t GetBufferedAmount();
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// GetCloseCode() returns the connection close code for the WebSocket
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// connection.
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @return Returns 0 if called before the close code is set.
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint16_t GetCloseCode();
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// GetCloseReason() returns the connection close reason for the WebSocket
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// connection.
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @return Returns a <code>Var</code> of string type. If called before the
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// close reason is set, the return value contains an empty string. Returns a
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// <code>PP_VARTYPE_UNDEFINED</code> if called on an invalid resource.
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Var GetCloseReason();
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// GetCloseWasClean() returns if the connection was closed cleanly for the
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// specified WebSocket connection.
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @return Returns <code>false</code> if called before the connection is
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// closed, called on an invalid resource, or closed for abnormal reasons.
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// Otherwise, returns <code>true</code> if the connection was closed
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// cleanly.
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool GetCloseWasClean();
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// GetExtensions() returns the extensions selected by the server for the
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// specified WebSocket connection.
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @return Returns a <code>Var</code> of string type. If called before the
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// connection is established, the <code>Var</code>'s data is an empty
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// string. Returns a <code>PP_VARTYPE_UNDEFINED</code> if called on an
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// invalid resource. Currently the <code>Var</code>'s data for valid
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// resources are always an empty string.
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Var GetExtensions();
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// GetProtocol() returns the sub-protocol chosen by the server for the
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// specified WebSocket connection.
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @return Returns a <code>Var</code> of string type. If called before the
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// connection is established, the <code>Var</code> contains the empty
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// string. Returns a code>PP_VARTYPE_UNDEFINED</code> if called on an
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// invalid resource.
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Var GetProtocol();
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// GetReadyState() returns the ready state of the specified WebSocket
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// connection.
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @return Returns <code>PP_WEBSOCKETREADYSTATE_INVALID</code> if called
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// before Connect() is called, or if this function is called on an
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// invalid resource.
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_WebSocketReadyState GetReadyState();
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// GetURL() returns the URL associated with specified WebSocket connection.
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ///
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// @return Returns a <code>Var</code> of string type. If called before the
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// connection is established, the <code>Var</code> contains the empty
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// string. Returns a <code>PP_VARTYPE_UNDEFINED</code> if this function
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  /// is called on an invalid resource.
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Var GetURL();
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace pp
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // PPAPI_CPP_WEBSOCKET_H_
219