View Javadoc
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.ServiceType;
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 = SrvRqst = 1) |
55   * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | length of
56   * <PRList> | <PRList> String \
57   * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | length of
58   * <service-type> | <service-type> String \
59   * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | length of
60   * <scope-list> | <scope-list> String \
61   * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | length of
62   * predicate string | Service Request <predicate> \
63   * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | length of
64   * <SLP SPI> string | <SLP SPI> String \
65   * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
66   */
67  
68  /*
69   * The <SLP SPI> string indicates a SLP SPI that the requester has been
70   * configured with. If this string is omitted, the responder does not include
71   * any Authentication Blocks in its reply. If it is included, the responder MUST
72   * return a reply which has an associated authentication block with the SLP SPI
73   * in the SrvRqst. If no replies may be returned because the SLP SPI is not
74   * supported, the responder returns an AUTHENTICATION_UNKNOWN error.
75   */
76  
77  /**
78   * ServiceRequest message
79   *
80   */
81  public class ServiceRequest extends RequestMessage {
82  	private ServiceType iServiceType;
83  
84  	private String iPredicate, iSlpSpi;
85  
86  	private static final int[] ALLOWED_RSPS = { SRV_RPLY, DA_ADVERT, SA_ADVERT };
87  
88  	/**
89  	 * parse
90  	 *
91  	 * @param pHdr
92  	 * @param pInStr
93  	 * @return SLPMessage
94  	 * @throws ServiceLocationException
95  	 * @throws IOException
96  	 */
97  	public static SLPMessage parse(MsgHeader pHdr, SLPInputStream pInStr) throws ServiceLocationException, IOException {
98  		return new ServiceRequest(
99  			pHdr,
100 			pInStr.readStringSet(), // prevResponders
101 			pInStr.readServiceType(), // serviceType
102 			pInStr.readStringList(), // scopeList
103 			pInStr.readString(), // predicate
104 			pInStr.readString() // SlpSpi
105 		);
106 	}
107 
108 	/**
109 	 * Ctor.
110 	 *
111 	 * @param pLangTag
112 	 * @param pPrevResponderSet
113 	 *            - set of address strings
114 	 * @param pServiceType
115 	 * @param pScopeList
116 	 *            - list of scope strings
117 	 * @param pPredicate
118 	 * @param pSlpSpi
119 	 */
120 	public ServiceRequest(
121 		String pLangTag,
122 		SortedSet<String> pPrevResponderSet,
123 		ServiceType pServiceType,
124 		List<String> pScopeList,
125 		String pPredicate,
126 		String pSlpSpi
127 	) {
128 		super(SRV_RQST, pLangTag, pPrevResponderSet, pScopeList);
129 		init(pServiceType, pPredicate, pSlpSpi);
130 	}
131 
132 	/**
133 	 * Ctor.
134 	 *
135 	 * @param pPrevResponderSet
136 	 *            - set of address strings
137 	 * @param pServiceType
138 	 * @param pScopeList
139 	 *            - list of scope strings
140 	 * @param pPredicate
141 	 * @param pSlpSpi
142 	 */
143 	public ServiceRequest(
144 		SortedSet<String> pPrevResponderSet,
145 		ServiceType pServiceType,
146 		List<String> pScopeList,
147 		String pPredicate,
148 		String pSlpSpi
149 	) {
150 		super(SRV_RQST, pPrevResponderSet, pScopeList);
151 		init(pServiceType, pPredicate, pSlpSpi);
152 	}
153 
154 	/**
155 	 * @param pHeader
156 	 * @param pPrevResponderSet
157 	 *            - set of address strings
158 	 * @param pServiceType
159 	 * @param pScopeList
160 	 *            - list of scope strings
161 	 * @param pPredicate
162 	 *            - LDAPv3 search filter
163 	 * @param pSlpSpi
164 	 */
165 	public ServiceRequest(
166 		MsgHeader pHeader,
167 		SortedSet<String> pPrevResponderSet,
168 		ServiceType pServiceType,
169 		List<String> pScopeList,
170 		String pPredicate,
171 		String pSlpSpi
172 	) {
173 		super(pHeader, pPrevResponderSet, pScopeList);
174 		init(pServiceType, pPredicate, pSlpSpi);
175 	}
176 
177 	/**
178 	 * getServiceType
179 	 *
180 	 * @return ServiceType
181 	 */
182 	public ServiceType getServiceType() {
183 		return this.iServiceType;
184 	}
185 
186 	@Override
187 	protected boolean serializeRequestBody(SLPOutputStream pOutStr) {
188 		return (
189 			pOutStr.write(this.iServiceType) &&
190 			pOutStr.writeStringList(getScopeList()) &&
191 			pOutStr.write(this.iPredicate) &&
192 			pOutStr.write(this.iSlpSpi)
193 		);
194 	}
195 
196 	@Override
197 	protected int[] getAllowedResponseIDs() {
198 		return ALLOWED_RSPS;
199 	}
200 
201 	private void init(ServiceType pServiceType, String pPredicate, String pSlpSpi) {
202 		this.iServiceType = pServiceType;
203 		this.iPredicate = pPredicate;
204 		this.iSlpSpi = pSlpSpi;
205 	}
206 }