Line data Source code
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 : #include "nsDNSServiceInfo.h"
7 : #include "nsHashPropertyBag.h"
8 : #include "nsIProperty.h"
9 : #include "nsISimpleEnumerator.h"
10 : #include "nsISupportsImpl.h"
11 : #include "mozilla/Unused.h"
12 :
13 : namespace mozilla {
14 : namespace net {
15 :
16 0 : NS_IMPL_ISUPPORTS(nsDNSServiceInfo, nsIDNSServiceInfo)
17 :
18 0 : nsDNSServiceInfo::nsDNSServiceInfo(nsIDNSServiceInfo* aServiceInfo)
19 : {
20 0 : if (NS_WARN_IF(!aServiceInfo)) {
21 0 : return;
22 : }
23 :
24 0 : nsAutoCString str;
25 : uint16_t value;
26 :
27 0 : if (NS_SUCCEEDED(aServiceInfo->GetHost(str))) {
28 0 : Unused << NS_WARN_IF(NS_FAILED(SetHost(str)));
29 : }
30 0 : if (NS_SUCCEEDED(aServiceInfo->GetAddress(str))) {
31 0 : Unused << NS_WARN_IF(NS_FAILED(SetAddress(str)));
32 : }
33 0 : if (NS_SUCCEEDED(aServiceInfo->GetPort(&value))) {
34 0 : Unused << NS_WARN_IF(NS_FAILED(SetPort(value)));
35 : }
36 0 : if (NS_SUCCEEDED(aServiceInfo->GetServiceName(str))) {
37 0 : Unused << NS_WARN_IF(NS_FAILED(SetServiceName(str)));
38 : }
39 0 : if (NS_SUCCEEDED(aServiceInfo->GetServiceType(str))) {
40 0 : Unused << NS_WARN_IF(NS_FAILED(SetServiceType(str)));
41 : }
42 0 : if (NS_SUCCEEDED(aServiceInfo->GetDomainName(str))) {
43 0 : Unused << NS_WARN_IF(NS_FAILED(SetDomainName(str)));
44 : }
45 :
46 0 : nsCOMPtr<nsIPropertyBag2> attributes; // deep copy
47 0 : if (NS_SUCCEEDED(aServiceInfo->GetAttributes(getter_AddRefs(attributes)))) {
48 0 : nsCOMPtr<nsISimpleEnumerator> enumerator;
49 0 : if (NS_WARN_IF(NS_FAILED(attributes->GetEnumerator(getter_AddRefs(enumerator))))) {
50 0 : return;
51 : }
52 :
53 0 : nsCOMPtr<nsIWritablePropertyBag2> newAttributes = new nsHashPropertyBag();
54 :
55 : bool hasMoreElements;
56 0 : while (NS_SUCCEEDED(enumerator->HasMoreElements(&hasMoreElements)) &&
57 : hasMoreElements) {
58 0 : nsCOMPtr<nsISupports> element;
59 : Unused <<
60 0 : NS_WARN_IF(NS_FAILED(enumerator->GetNext(getter_AddRefs(element))));
61 0 : nsCOMPtr<nsIProperty> property = do_QueryInterface(element);
62 0 : MOZ_ASSERT(property);
63 :
64 0 : nsAutoString name;
65 0 : nsCOMPtr<nsIVariant> value;
66 0 : Unused << NS_WARN_IF(NS_FAILED(property->GetName(name)));
67 0 : Unused << NS_WARN_IF(NS_FAILED(property->GetValue(getter_AddRefs(value))));
68 0 : nsAutoCString valueStr;
69 0 : Unused << NS_WARN_IF(NS_FAILED(value->GetAsACString(valueStr)));
70 :
71 0 : Unused << NS_WARN_IF(NS_FAILED(newAttributes->SetPropertyAsACString(name, valueStr)));
72 : }
73 :
74 0 : Unused << NS_WARN_IF(NS_FAILED(SetAttributes(newAttributes)));
75 : }
76 : }
77 :
78 : NS_IMETHODIMP
79 0 : nsDNSServiceInfo::GetHost(nsACString& aHost)
80 : {
81 0 : if (!mIsHostSet) {
82 0 : return NS_ERROR_NOT_INITIALIZED;
83 : }
84 0 : aHost = mHost;
85 0 : return NS_OK;
86 : }
87 :
88 : NS_IMETHODIMP
89 0 : nsDNSServiceInfo::SetHost(const nsACString& aHost)
90 : {
91 0 : mHost = aHost;
92 0 : mIsHostSet = true;
93 0 : return NS_OK;
94 : }
95 :
96 : NS_IMETHODIMP
97 0 : nsDNSServiceInfo::GetAddress(nsACString& aAddress)
98 : {
99 0 : if (!mIsAddressSet) {
100 0 : return NS_ERROR_NOT_INITIALIZED;
101 : }
102 0 : aAddress = mAddress;
103 0 : return NS_OK;
104 : }
105 :
106 : NS_IMETHODIMP
107 0 : nsDNSServiceInfo::SetAddress(const nsACString& aAddress)
108 : {
109 0 : mAddress = aAddress;
110 0 : mIsAddressSet = true;
111 0 : return NS_OK;
112 : }
113 :
114 : NS_IMETHODIMP
115 0 : nsDNSServiceInfo::GetPort(uint16_t* aPort)
116 : {
117 0 : if (NS_WARN_IF(!aPort)) {
118 0 : return NS_ERROR_INVALID_ARG;
119 : }
120 0 : if (!mIsPortSet) {
121 0 : return NS_ERROR_NOT_INITIALIZED;
122 : }
123 0 : *aPort = mPort;
124 0 : return NS_OK;
125 : }
126 :
127 : NS_IMETHODIMP
128 0 : nsDNSServiceInfo::SetPort(uint16_t aPort)
129 : {
130 0 : mPort = aPort;
131 0 : mIsPortSet = true;
132 0 : return NS_OK;
133 : }
134 :
135 : NS_IMETHODIMP
136 0 : nsDNSServiceInfo::GetServiceName(nsACString& aServiceName)
137 : {
138 0 : if (!mIsServiceNameSet) {
139 0 : return NS_ERROR_NOT_INITIALIZED;
140 : }
141 0 : aServiceName = mServiceName;
142 0 : return NS_OK;
143 : }
144 :
145 : NS_IMETHODIMP
146 0 : nsDNSServiceInfo::SetServiceName(const nsACString& aServiceName)
147 : {
148 0 : mServiceName = aServiceName;
149 0 : mIsServiceNameSet = true;
150 0 : return NS_OK;
151 : }
152 :
153 : NS_IMETHODIMP
154 0 : nsDNSServiceInfo::GetServiceType(nsACString& aServiceType)
155 : {
156 0 : if (!mIsServiceTypeSet) {
157 0 : return NS_ERROR_NOT_INITIALIZED;
158 : }
159 0 : aServiceType = mServiceType;
160 0 : return NS_OK;
161 : }
162 :
163 : NS_IMETHODIMP
164 0 : nsDNSServiceInfo::SetServiceType(const nsACString& aServiceType)
165 : {
166 0 : mServiceType = aServiceType;
167 0 : mIsServiceTypeSet = true;
168 0 : return NS_OK;
169 : }
170 :
171 : NS_IMETHODIMP
172 0 : nsDNSServiceInfo::GetDomainName(nsACString& aDomainName)
173 : {
174 0 : if (!mIsDomainNameSet) {
175 0 : return NS_ERROR_NOT_INITIALIZED;
176 : }
177 0 : aDomainName = mDomainName;
178 0 : return NS_OK;
179 : }
180 :
181 : NS_IMETHODIMP
182 0 : nsDNSServiceInfo::SetDomainName(const nsACString& aDomainName)
183 : {
184 0 : mDomainName = aDomainName;
185 0 : mIsDomainNameSet = true;
186 0 : return NS_OK;
187 : }
188 :
189 : NS_IMETHODIMP
190 0 : nsDNSServiceInfo::GetAttributes(nsIPropertyBag2** aAttributes)
191 : {
192 0 : if (!mIsAttributesSet) {
193 0 : return NS_ERROR_NOT_INITIALIZED;
194 : }
195 0 : nsCOMPtr<nsIPropertyBag2> attributes(mAttributes);
196 0 : attributes.forget(aAttributes);
197 0 : return NS_OK;
198 : }
199 :
200 : NS_IMETHODIMP
201 0 : nsDNSServiceInfo::SetAttributes(nsIPropertyBag2* aAttributes)
202 : {
203 0 : mAttributes = aAttributes;
204 0 : mIsAttributesSet = aAttributes ? true : false;
205 0 : return NS_OK;
206 : }
207 :
208 : } // namespace net
209 : } // namespace mozilla
|