Bug 1784098 - move nsITLSServerConnectionInfo from nsISocketTransport.securityInfo to securityCallbacks r=necko-reviewers,kershaw

In preparation for making nsISocketTransport.securityInfo a concrete type
(nsITransportSecurityInfo), nsITLSServerConnectionInfo needs to be moved off of
securityInfo. securityCallbacks seems like a reasonable place.

Differential Revision: https://phabricator.services.mozilla.com/D154256
This commit is contained in:
Dana Keeler 2022-08-23 03:37:17 +00:00
parent c55c1c4959
commit e7fe86c6a0
14 changed files with 40 additions and 21 deletions

View File

@ -77,7 +77,7 @@ function startServer(cert) {
let listener = {
onSocketAccepted(socket, transport) {
let connectionInfo = transport.securityInfo.QueryInterface(
let connectionInfo = transport.securityCallbacks.getInterface(
Ci.nsITLSServerConnectionInfo
);
connectionInfo.setSecurityObserver(listener);

View File

@ -73,7 +73,7 @@ function startServer(cert) {
let listener = {
onSocketAccepted(socket, transport) {
let connectionInfo = transport.securityInfo.QueryInterface(
let connectionInfo = transport.securityCallbacks.getInterface(
Ci.nsITLSServerConnectionInfo
);
connectionInfo.setSecurityObserver(listener);

View File

@ -59,7 +59,7 @@ function startServer(cert) {
let listener = {
onSocketAccepted(socket, transport) {
info("Accepted TLS client connection");
let connectionInfo = transport.securityInfo.QueryInterface(
let connectionInfo = transport.securityCallbacks.getInterface(
Ci.nsITLSServerConnectionInfo
);
connectionInfo.setSecurityObserver(listener);

View File

@ -64,9 +64,9 @@ void TLSServerSocket::CreateClientTransport(PRFileDesc* aClientFD,
RefPtr<TLSServerConnectionInfo> info = new TLSServerConnectionInfo();
info->mServerSocket = this;
info->mTransport = trans;
nsCOMPtr<nsISupports> infoSupports =
NS_ISUPPORTS_CAST(nsITLSServerConnectionInfo*, info);
rv = trans->InitWithConnectedSocket(aClientFD, &aClientAddr, infoSupports);
nsCOMPtr<nsIInterfaceRequestor> infoInterfaceRequestor(info);
rv = trans->InitWithConnectedSocket(aClientFD, &aClientAddr,
infoInterfaceRequestor);
if (NS_WARN_IF(NS_FAILED(rv))) {
mCondition = rv;
return;
@ -262,7 +262,7 @@ TLSServerSecurityObserverProxy::OnHandshakeDoneRunnable::Run() {
} // namespace
NS_IMPL_ISUPPORTS(TLSServerConnectionInfo, nsITLSServerConnectionInfo,
nsITLSClientStatus)
nsITLSClientStatus, nsIInterfaceRequestor)
TLSServerConnectionInfo::~TLSServerConnectionInfo() {
RefPtr<nsITLSServerSecurityObserver> observer;
@ -359,6 +359,20 @@ TLSServerConnectionInfo::GetMacLength(uint32_t* aMacLength) {
return NS_OK;
}
NS_IMETHODIMP
TLSServerConnectionInfo::GetInterface(const nsIID& aIID, void** aResult) {
NS_ENSURE_ARG_POINTER(aResult);
*aResult = nullptr;
if (aIID.Equals(NS_GET_IID(nsITLSServerConnectionInfo))) {
*aResult = static_cast<nsITLSServerConnectionInfo*>(this);
NS_ADDREF_THIS();
return NS_OK;
}
return NS_NOINTERFACE;
}
// static
void TLSServerConnectionInfo::HandshakeCallback(PRFileDesc* aFD, void* aArg) {
RefPtr<TLSServerConnectionInfo> info =

View File

@ -39,13 +39,15 @@ class TLSServerSocket final : public nsServerSocket, public nsITLSServerSocket {
};
class TLSServerConnectionInfo : public nsITLSServerConnectionInfo,
public nsITLSClientStatus {
public nsITLSClientStatus,
public nsIInterfaceRequestor {
friend class TLSServerSocket;
public:
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSITLSSERVERCONNECTIONINFO
NS_DECL_NSITLSCLIENTSTATUS
NS_DECL_NSIINTERFACEREQUESTOR
TLSServerConnectionInfo() = default;

View File

@ -871,10 +871,12 @@ nsresult nsSocketTransport::InitWithConnectedSocket(PRFileDesc* fd,
return PostEvent(MSG_RETRY_INIT_SOCKET);
}
nsresult nsSocketTransport::InitWithConnectedSocket(PRFileDesc* aFD,
const NetAddr* aAddr,
nsISupports* aSecInfo) {
mSecInfo = aSecInfo;
nsresult nsSocketTransport::InitWithConnectedSocket(
PRFileDesc* aFD, const NetAddr* aAddr, nsIInterfaceRequestor* aCallbacks) {
{
MutexAutoLock lock(mLock);
mCallbacks = aCallbacks;
}
return InitWithConnectedSocket(aFD, aAddr);
}

View File

@ -134,9 +134,10 @@ class nsSocketTransport final : public nsASocketHandler,
nsresult InitWithConnectedSocket(PRFileDesc* socketFD, const NetAddr* addr);
// this method instructs the socket transport to use an already connected
// socket with the given address, and additionally supplies security info.
// socket with the given address, and additionally supplies the security
// callbacks interface requestor.
nsresult InitWithConnectedSocket(PRFileDesc* aFD, const NetAddr* aAddr,
nsISupports* aSecInfo);
nsIInterfaceRequestor* aCallbacks);
#ifdef XP_UNIX
// This method instructs the socket transport to open a socket

View File

@ -112,7 +112,7 @@ class ServerSocketListener {
onSocketAccepted(socket, transport) {
info("accepted TLS client connection");
let connectionInfo = transport.securityInfo.QueryInterface(
let connectionInfo = transport.securityCallbacks.getInterface(
Ci.nsITLSServerConnectionInfo
);
let input = transport.openInputStream(0, 0, 0);

View File

@ -105,7 +105,7 @@ class ServerSocketListener {
onSocketAccepted(socket, transport) {
info("accepted TLS client connection");
let connectionInfo = transport.securityInfo.QueryInterface(
let connectionInfo = transport.securityCallbacks.getInterface(
Ci.nsITLSServerConnectionInfo
);
let input = transport.openInputStream(0, 0, 0);

View File

@ -107,7 +107,7 @@ class ServerSocketListener {
onSocketAccepted(socket, transport) {
info("accepted TLS client connection");
let connectionInfo = transport.securityInfo.QueryInterface(
let connectionInfo = transport.securityCallbacks.getInterface(
Ci.nsITLSServerConnectionInfo
);
let input = transport.openInputStream(0, 0, 0);

View File

@ -125,7 +125,7 @@ function startServer(
onSocketAccepted(socket, transport) {
info("accepted TLS client connection");
let connectionInfo = transport.securityInfo.QueryInterface(
let connectionInfo = transport.securityCallbacks.getInterface(
Ci.nsITLSServerConnectionInfo
);
let input = transport.openInputStream(0, 0, 0);

View File

@ -55,7 +55,7 @@ function startServer(
let listener = {
onSocketAccepted(socket, transport) {
info("Accept TLS client connection");
let connectionInfo = transport.securityInfo.QueryInterface(
let connectionInfo = transport.securityCallbacks.getInterface(
Ci.nsITLSServerConnectionInfo
);
connectionInfo.setSecurityObserver(listener);

View File

@ -30,7 +30,7 @@ function startServer(cert) {
let listener = {
onSocketAccepted(socket, transport) {
info("Accept TLS client connection");
let connectionInfo = transport.securityInfo.QueryInterface(
let connectionInfo = transport.securityCallbacks.getInterface(
Ci.nsITLSServerConnectionInfo
);
connectionInfo.setSecurityObserver(listener);

View File

@ -123,7 +123,7 @@ class ServerSocketListener {
onSocketAccepted(socket, transport) {
info("accepted TLS client connection");
let connectionInfo = transport.securityInfo.QueryInterface(
let connectionInfo = transport.securityCallbacks.getInterface(
Ci.nsITLSServerConnectionInfo
);
let input = transport.openInputStream(0, 0, 0);