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