gecko-dev/media/mtransport/ipc/StunAddrsRequestParent.cpp

76 строки
1.9 KiB
C++

/* 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/. */
#include "StunAddrsRequestParent.h"
#include "../runnable_utils.h"
#include "nsNetUtil.h"
#include "mtransport/nricectx.h"
#include "mtransport/nricemediastream.h" // needed only for including nricectx.h
#include "mtransport/nricestunaddr.h"
using namespace mozilla::ipc;
namespace mozilla {
namespace net {
StunAddrsRequestParent::StunAddrsRequestParent()
{
NS_GetMainThread(getter_AddRefs(mMainThread));
nsresult res;
mSTSThread = do_GetService(NS_SOCKETTRANSPORTSERVICE_CONTRACTID, &res);
MOZ_ASSERT(mSTSThread);
}
mozilla::ipc::IPCResult
StunAddrsRequestParent::RecvGetStunAddrs()
{
ASSERT_ON_THREAD(mMainThread);
RUN_ON_THREAD(mSTSThread,
WrapRunnable(this, &StunAddrsRequestParent::GetStunAddrs_s),
NS_DISPATCH_NORMAL);
return IPC_OK();
}
void
StunAddrsRequestParent::ActorDestroy(ActorDestroyReason why)
{
// nothing to do here
}
void
StunAddrsRequestParent::GetStunAddrs_s()
{
ASSERT_ON_THREAD(mSTSThread);
// get the stun addresses while on STS thread
NrIceStunAddrArray addrs = NrIceCtx::GetStunAddrs();
// in order to return the result over IPC, we need to be on main thread
RUN_ON_THREAD(mMainThread,
WrapRunnable(this,
&StunAddrsRequestParent::SendStunAddrs_m,
std::move(addrs)),
NS_DISPATCH_NORMAL);
}
void
StunAddrsRequestParent::SendStunAddrs_m(const NrIceStunAddrArray& addrs)
{
ASSERT_ON_THREAD(mMainThread);
// send the new addresses back to the child
Unused << SendOnStunAddrsAvailable(addrs);
}
NS_IMPL_ADDREF(StunAddrsRequestParent)
NS_IMPL_RELEASE(StunAddrsRequestParent)
} // namespace net
} // namespace mozilla