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.ServiceLocationAttribute;
51  import org.metricshub.wbem.sblim.slp.ServiceLocationException;
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 = SAAdvert = 11) |
57   * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Length of
58   * URL | URL \ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
59   * Length of <scope-list> | <scope-list> \
60   * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Length of
61   * <attr-list> | <attr-list> \
62   * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | # auth
63   * blocks | authentication block (if any) \
64   * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
65   *
66   */
67  
68  /**
69   * SAAdvert message
70   *
71   */
72  public class SAAdvert extends ReplyMessage {
73  	private String iURLStr;
74  
75  	private List<String> iScopeList;
76  
77  	private List<ServiceLocationAttribute> iAttrList;
78  
79  	/**
80  	 * parse
81  	 *
82  	 * @param pHdr
83  	 * @param pInStr
84  	 * @return SLPMessage
85  	 * @throws ServiceLocationException
86  	 * @throws IOException
87  	 */
88  	public static SLPMessage parse(MsgHeader pHdr, SLPInputStream pInStr) throws ServiceLocationException, IOException {
89  		return new SAAdvert(pHdr, pInStr.readString(), pInStr.readStringList(), pInStr.readAttributeList());
90  	}
91  
92  	/**
93  	 * Ctor.
94  	 *
95  	 * @param pURLStr
96  	 * @param pScopeList
97  	 *            - list of scope strings
98  	 * @param pAttrList
99  	 *            - list of ServiceLocationAttributes
100 	 */
101 	public SAAdvert(String pURLStr, List<String> pScopeList, List<ServiceLocationAttribute> pAttrList) {
102 		super(SA_ADVERT, 0);
103 		init(pURLStr, pScopeList, pAttrList);
104 	}
105 
106 	/**
107 	 * Ctor.
108 	 *
109 	 * @param pLangTag
110 	 * @param pURLStr
111 	 * @param pScopeList
112 	 *            - list of scope strings
113 	 * @param pAttrList
114 	 *            - list of ServiceLocationAttributes
115 	 */
116 	public SAAdvert(String pLangTag, String pURLStr, List<String> pScopeList, List<ServiceLocationAttribute> pAttrList) {
117 		super(SA_ADVERT, pLangTag, 0);
118 		init(pURLStr, pScopeList, pAttrList);
119 	}
120 
121 	/**
122 	 * Ctor.
123 	 *
124 	 * @param pHeader
125 	 * @param pURLStr
126 	 * @param pScopeList
127 	 *            - list of scope strings
128 	 * @param pAttrList
129 	 *            - list of ServiceLocationAttributes
130 	 */
131 	public SAAdvert(
132 		MsgHeader pHeader,
133 		String pURLStr,
134 		List<String> pScopeList,
135 		List<ServiceLocationAttribute> pAttrList
136 	) {
137 		super(pHeader, 0);
138 		init(pURLStr, pScopeList, pAttrList);
139 	}
140 
141 	@Override
142 	public Iterator<String> getResultIterator() {
143 		ArrayList<String> list = new ArrayList<String>();
144 		list.add(this.iURLStr);
145 		return list.iterator();
146 	}
147 
148 	/**
149 	 * @param pOption
150 	 */
151 	@Override
152 	protected boolean serializeBody(SLPOutputStream pOutStr, SerializeOption pOption) {
153 		return (
154 			pOutStr.write(this.iURLStr) &&
155 			pOutStr.writeStringList(this.iScopeList) &&
156 			pOutStr.writeAttributeList(this.iAttrList)
157 		);
158 	}
159 
160 	private void init(String pURLStr, List<String> pScopeList, List<ServiceLocationAttribute> pAttrList) {
161 		this.iURLStr = pURLStr;
162 		this.iScopeList = pScopeList;
163 		this.iAttrList = pAttrList;
164 	}
165 
166 	@Override
167 	public Iterator<Exception> getExceptionIterator() {
168 		// this message doesn't have exception table
169 		return null;
170 	}
171 }