Source code

Revision control

Copy as Markdown

Other Tools

/* 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__
#include "nsError.h"
#include "nsINetAddr.h"
#include "nsISupports.h"
#include "prio.h"
// socket handler used by nsISocketTransportService.
// methods are only called on the socket thread.
class nsASocketHandler : public nsISupports {
public:
nsASocketHandler() = default;
//
// 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{NS_OK};
//
// 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{0};
//
// 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{UINT16_MAX};
bool mIsPrivate{false};
//
// 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) {}
//
// called to determine the NetAddr. addr can only be assumed to be initialized
// when NS_OK is returned
//
virtual nsresult GetRemoteAddr(mozilla::net::NetAddr* addr) {
return NS_ERROR_NOT_IMPLEMENTED;
}
//
// returns the number of bytes sent/transmitted over the socket
//
virtual uint64_t ByteCountSent() = 0;
virtual uint64_t ByteCountReceived() = 0;
};
#endif // !nsASocketHandler_h__