1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* This Source Code Form is subject to the terms of the Mozilla Public 3 * License, v. 2.0. If a copy of the MPL was not distributed with this 4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 5 6 #ifndef mozilla_netwerk_dns_mdns_libmdns_MDNSResponderReply_h 7 #define mozilla_netwerk_dns_mdns_libmdns_MDNSResponderReply_h 8 9 #include "dns_sd.h" 10 #include "MDNSResponderOperator.h" 11 #include "mozilla/UniquePtr.h" 12 #include "mozilla/net/DNS.h" 13 #include "mozilla/RefPtr.h" 14 #include "nsThreadUtils.h" 15 16 namespace mozilla { 17 namespace net { 18 19 class BrowseReplyRunnable final : public Runnable { 20 public: 21 BrowseReplyRunnable(DNSServiceRef aSdRef, DNSServiceFlags aFlags, 22 uint32_t aInterfaceIndex, DNSServiceErrorType aErrorCode, 23 const nsACString& aServiceName, 24 const nsACString& aRegType, 25 const nsACString& aReplyDomain, BrowseOperator* aContext); 26 27 NS_IMETHOD Run() override; 28 29 static void Reply(DNSServiceRef aSdRef, DNSServiceFlags aFlags, 30 uint32_t aInterfaceIndex, DNSServiceErrorType aErrorCode, 31 const char* aServiceName, const char* aRegType, 32 const char* aReplyDomain, void* aContext); 33 34 private: 35 DNSServiceRef mSdRef; 36 DNSServiceFlags mFlags; 37 uint32_t mInterfaceIndex; 38 DNSServiceErrorType mErrorCode; 39 nsCString mServiceName; 40 nsCString mRegType; 41 nsCString mReplyDomain; 42 RefPtr<BrowseOperator> mContext; 43 }; 44 45 class RegisterReplyRunnable final : public Runnable { 46 public: 47 RegisterReplyRunnable(DNSServiceRef aSdRef, DNSServiceFlags aFlags, 48 DNSServiceErrorType aErrorCode, const nsACString& aName, 49 const nsACString& aRegType, const nsACString& aDomain, 50 RegisterOperator* aContext); 51 52 NS_IMETHOD Run() override; 53 54 static void Reply(DNSServiceRef aSdRef, DNSServiceFlags aFlags, 55 DNSServiceErrorType aErrorCode, const char* aName, 56 const char* aRegType, const char* aDomain, void* aContext); 57 58 private: 59 DNSServiceRef mSdRef; 60 DNSServiceFlags mFlags; 61 DNSServiceErrorType mErrorCode; 62 nsCString mName; 63 nsCString mRegType; 64 nsCString mDomain; 65 RefPtr<RegisterOperator> mContext; 66 }; 67 68 class ResolveReplyRunnable final : public Runnable { 69 public: 70 ResolveReplyRunnable(DNSServiceRef aSdRef, DNSServiceFlags aFlags, 71 uint32_t aInterfaceIndex, DNSServiceErrorType aErrorCode, 72 const nsACString& aFullName, 73 const nsACString& aHostTarget, uint16_t aPort, 74 uint16_t aTxtLen, const unsigned char* aTxtRecord, 75 ResolveOperator* aContext); 76 ~ResolveReplyRunnable() = default; 77 78 NS_IMETHOD Run() override; 79 80 static void Reply(DNSServiceRef aSdRef, DNSServiceFlags aFlags, 81 uint32_t aInterfaceIndex, DNSServiceErrorType aErrorCode, 82 const char* aFullName, const char* aHostTarget, 83 uint16_t aPort, uint16_t aTxtLen, 84 const unsigned char* aTxtRecord, void* aContext); 85 86 private: 87 DNSServiceRef mSdRef; 88 DNSServiceFlags mFlags; 89 uint32_t mInterfaceIndex; 90 DNSServiceErrorType mErrorCode; 91 nsCString mFullname; 92 nsCString mHosttarget; 93 uint16_t mPort; 94 uint16_t mTxtLen; 95 UniquePtr<unsigned char> mTxtRecord; 96 RefPtr<ResolveOperator> mContext; 97 }; 98 99 class GetAddrInfoReplyRunnable final : public Runnable { 100 public: 101 GetAddrInfoReplyRunnable(DNSServiceRef aSdRef, DNSServiceFlags aFlags, 102 uint32_t aInterfaceIndex, 103 DNSServiceErrorType aErrorCode, 104 const nsACString& aHostName, 105 const mozilla::net::NetAddr& aAddress, uint32_t aTTL, 106 GetAddrInfoOperator* aContext); 107 ~GetAddrInfoReplyRunnable() = default; 108 109 NS_IMETHOD Run() override; 110 111 static void Reply(DNSServiceRef aSdRef, DNSServiceFlags aFlags, 112 uint32_t aInterfaceIndex, DNSServiceErrorType aErrorCode, 113 const char* aHostName, const struct sockaddr* aAddress, 114 uint32_t aTTL, void* aContext); 115 116 private: 117 DNSServiceRef mSdRef; 118 DNSServiceFlags mFlags; 119 uint32_t mInterfaceIndex; 120 DNSServiceErrorType mErrorCode; 121 nsCString mHostName; 122 mozilla::net::NetAddr mAddress; 123 uint32_t mTTL; 124 RefPtr<GetAddrInfoOperator> mContext; 125 }; 126 127 } // namespace net 128 } // namespace mozilla 129 130 #endif // mozilla_netwerk_dns_mdns_libmdns_MDNSResponderReply_h 131