1 /*
2 (C) Copyright IBM Corp. 2007, 2009
3
4 THIS FILE IS PROVIDED UNDER THE TERMS OF THE ECLIPSE PUBLIC LICENSE
5 ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE
6 CONSTITUTES RECIPIENTS ACCEPTANCE OF THE AGREEMENT.
7
8 You can obtain a current copy of the Eclipse Public License from
9 http://www.opensource.org/licenses/eclipse-1.0.php
10
11 @author : Endre Bak, IBM, ebak@de.ibm.com
12 *
13 * Change History
14 * Flag Date Prog Description
15 *-------------------------------------------------------------------------------
16 * 1804402 2007-09-28 ebak IPv6 ready SLP
17 * 1892103 2008-02-15 ebak SLP improvements
18 * 2003590 2008-06-30 blaschke-oss Change licensing from CPL to EPL
19 * 2524131 2009-01-21 raman_arora Upgrade client to JDK 1.5 (Phase 1)
20 * 2531371 2009-02-10 raman_arora Upgrade client to JDK 1.5 (Phase 2)
21 */
22
23 package org.metricshub.wbem.sblim.slp.internal.msg;
24
25 /*-
26 * ╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲
27 * WBEM Java Client
28 * ჻჻჻჻჻჻
29 * Copyright 2023 - 2025 MetricsHub
30 * ჻჻჻჻჻჻
31 * Licensed under the Apache License, Version 2.0 (the "License");
32 * you may not use this file except in compliance with the License.
33 * You may obtain a copy of the License at
34 *
35 * http://www.apache.org/licenses/LICENSE-2.0
36 *
37 * Unless required by applicable law or agreed to in writing, software
38 * distributed under the License is distributed on an "AS IS" BASIS,
39 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
40 * See the License for the specific language governing permissions and
41 * limitations under the License.
42 * ╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱
43 */
44
45 import java.io.IOException;
46 import java.util.List;
47 import java.util.SortedSet;
48 import org.metricshub.wbem.sblim.slp.ServiceLocationException;
49 import org.metricshub.wbem.sblim.slp.ServiceURL;
50
51 /*
52 * 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
53 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Service
54 * Location header (function = AttrRqst = 6) |
55 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | length of
56 * PRList | <PRList> String \
57 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | length of
58 * URL | URL \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
59 * length of <scope-list> | <scope-list> string \
60 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | length of
61 * <tag-list> string | <tag-list> string \
62 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | length of
63 * <SLP SPI> string | <SLP SPI> string \
64 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
65 */
66
67 /**
68 * AttributeRequest message
69 *
70 */
71 public class AttributeRequest extends RequestMessage {
72 private String iURLStr;
73
74 private List<String> iTagList;
75
76 private List<String> iSPIList;
77
78 private static final int[] ALLOWED_RSPS = { ATTR_RPLY };
79
80 /**
81 * parse
82 *
83 * @param pHdr
84 * @param pInStr
85 * @return SLPMessage
86 * @throws ServiceLocationException
87 * @throws IOException
88 */
89 public static SLPMessage parse(MsgHeader pHdr, SLPInputStream pInStr) throws ServiceLocationException, IOException {
90 return new AttributeRequest(
91 pHdr,
92 pInStr.readStringSet(),
93 pInStr.readString(),
94 pInStr.readStringList(),
95 pInStr.readStringList(),
96 pInStr.readStringList()
97 );
98 }
99
100 /**
101 * Ctor.
102 *
103 * @param pPrevResponderSet
104 * - set of address strings
105 * @param pURLStr
106 * @param pScopeList
107 * - list of scope strings
108 * @param pTagList
109 * @param pSPIList
110 */
111 public AttributeRequest(
112 SortedSet<String> pPrevResponderSet,
113 String pURLStr,
114 List<String> pScopeList,
115 List<String> pTagList,
116 List<String> pSPIList
117 ) {
118 super(ATTR_RQST, pPrevResponderSet, pScopeList);
119 init(pURLStr, pTagList, pSPIList);
120 }
121
122 /**
123 * Ctor.
124 *
125 * @param pLangTag
126 * @param pPrevResponderSet
127 * - set of address strings
128 * @param pURLStr
129 * @param pScopeList
130 * - list of scope strings
131 * @param pTagList
132 * @param pSPIList
133 */
134 public AttributeRequest(
135 String pLangTag,
136 SortedSet<String> pPrevResponderSet,
137 String pURLStr,
138 List<String> pScopeList,
139 List<String> pTagList,
140 List<String> pSPIList
141 ) {
142 super(ATTR_RQST, pLangTag, pPrevResponderSet, pScopeList);
143 init(pURLStr, pTagList, pSPIList);
144 }
145
146 /**
147 * Ctor.
148 *
149 * @param pHeader
150 * @param pPrevResponderSet
151 * - set of address strings
152 * @param pURLStr
153 * @param pScopeList
154 * - list of scope strings
155 * @param pTagList
156 * @param pSPIList
157 */
158 public AttributeRequest(
159 MsgHeader pHeader,
160 SortedSet<String> pPrevResponderSet,
161 String pURLStr,
162 List<String> pScopeList,
163 List<String> pTagList,
164 List<String> pSPIList
165 ) {
166 super(pHeader, pPrevResponderSet, pScopeList);
167 init(pURLStr, pTagList, pSPIList);
168 }
169
170 /**
171 * getServiceURL
172 *
173 * @return ServiceURL
174 */
175 public ServiceURL getServiceURL() {
176 return new ServiceURL(this.iURLStr, 65535);
177 }
178
179 @Override
180 protected boolean serializeRequestBody(SLPOutputStream pOutStr) {
181 return (
182 pOutStr.write(this.iURLStr) &&
183 pOutStr.writeStringList(getScopeList()) &&
184 pOutStr.writeStringList(this.iTagList) &&
185 pOutStr.writeStringList(this.iSPIList)
186 );
187 }
188
189 @Override
190 protected int[] getAllowedResponseIDs() {
191 return ALLOWED_RSPS;
192 }
193
194 private void init(String pURLStr, List<String> pTagList, List<String> pSPIList) {
195 this.iURLStr = pURLStr;
196 this.iTagList = pTagList;
197 this.iSPIList = pSPIList;
198 }
199 }