void otUdpProxyReceive(otInstance * aInstance, otMessage * aMessage, uint16_t aPeerPort, const otIp6Address *aPeerAddr, uint16_t aSockPort) { Ip6::MessageInfo messageInfo; Instance & instance = *static_cast<Instance *>(aInstance); Ip6::Ip6 & ip6 = instance.Get<Ip6::Ip6>(); assert(aMessage != NULL && aPeerAddr != NULL); messageInfo.SetSockAddr(instance.GetThreadNetif().GetMle().GetMeshLocal16()); messageInfo.SetSockPort(aSockPort); messageInfo.SetPeerAddr(*static_cast<const ot::Ip6::Address *>(aPeerAddr)); messageInfo.SetPeerPort(aPeerPort); messageInfo.SetInterfaceId(OT_NETIF_INTERFACE_ID_HOST); ip6.GetUdp().HandlePayload(*static_cast<ot::Message *>(aMessage), messageInfo); static_cast<ot::Message *>(aMessage)->Free(); }