DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (c3870db9602b)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef nsASocketHandler_h__
#define nsASocketHandler_h__

// socket handler used by nsISocketTransportService.
// methods are only called on the socket thread.

class nsASocketHandler : public nsISupports {
 public:
  nsASocketHandler()
      : mCondition(NS_OK),
        mPollFlags(0),
        mPollTimeout(UINT16_MAX),
        mIsPrivate(false) {}

  //
  // this condition variable will be checked to determine if the socket
  // handler should be detached.  it must only be accessed on the socket
  // thread.
  //
  nsresult mCondition;

  //
  // these flags can only be modified on the socket transport thread.
  // the socket transport service will check these flags before calling
  // PR_Poll.
  //
  uint16_t mPollFlags;

  //
  // this value specifies the maximum amount of time in seconds that may be
  // spent waiting for activity on this socket.  if this timeout is reached,
  // then OnSocketReady will be called with outFlags = -1.
  //
  // the default value for this member is UINT16_MAX, which disables the
  // timeout error checking.  (i.e., a timeout value of UINT16_MAX is
  // never reached.)
  //
  uint16_t mPollTimeout;

  bool mIsPrivate;

  //
  // called to service a socket
  //
  // params:
  //   socketRef - socket identifier
  //   fd        - socket file descriptor
  //   outFlags  - value of PR_PollDesc::out_flags after PR_Poll returns
  //               or -1 if a timeout occurred
  //
  virtual void OnSocketReady(PRFileDesc* fd, int16_t outFlags) = 0;

  //
  // called when a socket is no longer under the control of the socket
  // transport service.  the socket handler may close the socket at this
  // point.  after this call returns, the handler will no longer be owned
  // by the socket transport service.
  //
  virtual void OnSocketDetached(PRFileDesc* fd) = 0;

  //
  // called to determine if the socket is for a local peer.
  // when used for server sockets, indicates if it only accepts local
  // connections.
  //
  virtual void IsLocal(bool* aIsLocal) = 0;

  //
  // called to determine if this socket should not be terminated when Gecko
  // is turned offline. This is mostly useful for the debugging server
  // socket.
  //
  virtual void KeepWhenOffline(bool* aKeepWhenOffline) {
    *aKeepWhenOffline = false;
  }

  //
  // called when global pref for keepalive has changed.
  //
  virtual void OnKeepaliveEnabledPrefChange(bool aEnabled) {}

  //
  // returns the number of bytes sent/transmitted over the socket
  //
  virtual uint64_t ByteCountSent() = 0;
  virtual uint64_t ByteCountReceived() = 0;
};

#endif  // !nsASocketHandler_h__