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-12  ebak         SLP improvements
18   * 1949918    2008-04-08  raman_arora  Malformed service URL crashes SLP discovery
19   * 2003590    2008-06-30  blaschke-oss Change licensing from CPL to EPL
20   * 2524131    2009-01-21  raman_arora  Upgrade client to JDK 1.5 (Phase 1)
21   * 2531371    2009-02-10  raman_arora  Upgrade client to JDK 1.5 (Phase 2) 
22   */
23  
24  package org.metricshub.wbem.sblim.slp.internal.msg;
25  
26  /*-
27   * ╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲
28   * WBEM Java Client
29   * ჻჻჻჻჻჻
30   * Copyright 2023 - 2025 MetricsHub
31   * ჻჻჻჻჻჻
32   * Licensed under the Apache License, Version 2.0 (the "License");
33   * you may not use this file except in compliance with the License.
34   * You may obtain a copy of the License at
35   *
36   *      http://www.apache.org/licenses/LICENSE-2.0
37   *
38   * Unless required by applicable law or agreed to in writing, software
39   * distributed under the License is distributed on an "AS IS" BASIS,
40   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
41   * See the License for the specific language governing permissions and
42   * limitations under the License.
43   * ╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱
44   */
45  
46  import java.io.IOException;
47  import java.util.ArrayList;
48  import java.util.Iterator;
49  import java.util.List;
50  import org.metricshub.wbem.sblim.slp.ServiceLocationException;
51  import org.metricshub.wbem.sblim.slp.ServiceURL;
52  
53  /*
54   * 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
55   * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Service
56   * Location header (function = SrvRply = 2) |
57   * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Error
58   * Code | URL Entry count |
59   * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | <URL
60   * Entry 1> ... <URL Entry N> \
61   * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
62   */
63  /**
64   * ServiceReply message
65   *
66   */
67  public class ServiceReply extends ReplyMessage {
68  	private List<ServiceURL> iURLEntries;
69  
70  	private List<Exception> iURLExceptions;
71  
72  	/**
73  	 * parse
74  	 *
75  	 * @param pHdr
76  	 * @param pInStr
77  	 * @return SLPMessage
78  	 * @throws ServiceLocationException
79  	 * @throws IOException
80  	 */
81  	public static SLPMessage parse(MsgHeader pHdr, SLPInputStream pInStr) throws ServiceLocationException, IOException {
82  		int errorCode = pInStr.read16();
83  		ArrayList<Exception> urlExceptions = new ArrayList<Exception>();
84  		List<ServiceURL> urlEntries = pInStr.readUrlList(urlExceptions);
85  		return new ServiceReply(pHdr, errorCode, urlEntries, urlExceptions);
86  	}
87  
88  	/**
89  	 * Ctor.
90  	 *
91  	 * @param pErrorCode
92  	 * @param pURLEntries
93  	 *            - list of ServiceURLs
94  	 */
95  	public ServiceReply(int pErrorCode, List<ServiceURL> pURLEntries) {
96  		super(SRV_RPLY, pErrorCode);
97  		this.iURLEntries = pURLEntries;
98  	}
99  
100 	/**
101 	 * Ctor.
102 	 *
103 	 * @param pLangTag
104 	 * @param pErrorCode
105 	 * @param pURLEntries
106 	 *            - list of ServiceURLs
107 	 * @param pURLExceptions
108 	 *            - list of URL Exceptions
109 	 */
110 	public ServiceReply(String pLangTag, int pErrorCode, List<ServiceURL> pURLEntries, List<Exception> pURLExceptions) {
111 		super(SRV_RPLY, pLangTag, pErrorCode);
112 		this.iURLEntries = pURLEntries;
113 		this.iURLExceptions = pURLExceptions;
114 	}
115 
116 	/**
117 	 * Ctor.
118 	 *
119 	 * @param pHeader
120 	 * @param pErrorCode
121 	 * @param pURLEntries
122 	 *            - list of ServiceURLs
123 	 * @param pURLExceptions
124 	 *            - list of URL Exceptions
125 	 */
126 	public ServiceReply(MsgHeader pHeader, int pErrorCode, List<ServiceURL> pURLEntries, List<Exception> pURLExceptions) {
127 		super(pHeader, pErrorCode);
128 		this.iURLEntries = pURLEntries;
129 		this.iURLExceptions = pURLExceptions;
130 	}
131 
132 	/**
133 	 * getResultIterator
134 	 *
135 	 * @return iterator of URL Exception list
136 	 */
137 	@Override
138 	public Iterator<ServiceURL> getResultIterator() {
139 		return this.iURLEntries == null ? null : this.iURLEntries.iterator();
140 	}
141 
142 	/**
143 	 * getExceptionIterator
144 	 *
145 	 * @return iterator of URL Exception list
146 	 */
147 	@Override
148 	public Iterator<Exception> getExceptionIterator() {
149 		return this.iURLExceptions == null ? null : this.iURLExceptions.iterator();
150 	}
151 
152 	/**
153 	 * getURLEntries
154 	 *
155 	 * @return list of ServiceURLs
156 	 */
157 	public List<ServiceURL> getURLEntries() {
158 		return this.iURLEntries;
159 	}
160 
161 	/**
162 	 * getURLExceptions
163 	 *
164 	 * @return list of URL Exceptions
165 	 */
166 	public List<Exception> getURLExceptions() {
167 		return this.iURLExceptions;
168 	}
169 
170 	/**
171 	 * @param pOption
172 	 */
173 	@Override
174 	protected boolean serializeBody(SLPOutputStream pOutStr, SerializeOption pOption) {
175 		return pOutStr.write16(getErrorCode()) && pOutStr.writeURLList(this.iURLEntries);
176 	}
177 }