2012-05-21 04:12:37 -07:00
|
|
|
/* 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/. */
|
2008-02-26 12:39:50 -08:00
|
|
|
|
|
|
|
#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)
|
2012-09-27 23:57:33 -07:00
|
|
|
, mPollTimeout(UINT16_MAX)
|
2012-12-07 14:50:43 -08:00
|
|
|
, mIsPrivate(false)
|
2008-02-26 12:39:50 -08:00
|
|
|
{}
|
|
|
|
|
|
|
|
//
|
|
|
|
// 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.
|
|
|
|
//
|
2012-08-22 08:56:38 -07:00
|
|
|
uint16_t mPollFlags;
|
2008-02-26 12:39:50 -08:00
|
|
|
|
|
|
|
//
|
|
|
|
// 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.
|
|
|
|
//
|
2012-09-27 23:57:33 -07:00
|
|
|
// the default value for this member is UINT16_MAX, which disables the
|
|
|
|
// timeout error checking. (i.e., a timeout value of UINT16_MAX is
|
2008-02-26 12:39:50 -08:00
|
|
|
// never reached.)
|
|
|
|
//
|
2012-08-22 08:56:38 -07:00
|
|
|
uint16_t mPollTimeout;
|
2008-02-26 12:39:50 -08:00
|
|
|
|
2012-12-07 14:50:43 -08:00
|
|
|
bool mIsPrivate;
|
|
|
|
|
2008-02-26 12:39:50 -08:00
|
|
|
//
|
|
|
|
// called to service a socket
|
|
|
|
//
|
|
|
|
// params:
|
|
|
|
// socketRef - socket identifier
|
|
|
|
// fd - socket file descriptor
|
|
|
|
// outFlags - value of PR_PollDesc::out_flags after PR_Poll returns
|
2010-05-13 05:19:50 -07:00
|
|
|
// or -1 if a timeout occurred
|
2008-02-26 12:39:50 -08:00
|
|
|
//
|
2012-08-22 08:56:38 -07:00
|
|
|
virtual void OnSocketReady(PRFileDesc *fd, int16_t outFlags) = 0;
|
2008-02-26 12:39:50 -08:00
|
|
|
|
|
|
|
//
|
|
|
|
// 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;
|
2012-09-17 16:45:10 -07:00
|
|
|
|
|
|
|
//
|
|
|
|
// 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;
|
2012-12-10 06:13:55 -08:00
|
|
|
|
2013-03-26 18:22:40 -07:00
|
|
|
//
|
|
|
|
// 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;
|
|
|
|
}
|
2012-12-10 06:13:55 -08:00
|
|
|
|
2014-02-06 11:51:38 -08:00
|
|
|
//
|
|
|
|
// called when global pref for keepalive has changed.
|
|
|
|
//
|
|
|
|
virtual void OnKeepaliveEnabledPrefChange(bool aEnabled) { }
|
|
|
|
|
2012-12-10 06:13:55 -08:00
|
|
|
//
|
|
|
|
// returns the number of bytes sent/transmitted over the socket
|
|
|
|
//
|
|
|
|
virtual uint64_t ByteCountSent() = 0;
|
|
|
|
virtual uint64_t ByteCountReceived() = 0;
|
2008-02-26 12:39:50 -08:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif // !nsASocketHandler_h__
|