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 java.util.TreeSet; 51 import org.metricshub.wbem.sblim.slp.ServiceLocationAttribute; 52 import org.metricshub.wbem.sblim.slp.ServiceLocationException; 53 54 /* 55 * 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 56 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Service 57 * Location header (function = DAAdvert = 8) | 58 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Error 59 * Code | DA Stateless Boot Timestamp | 60 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |DA 61 * Stateless Boot Time,, contd.| Length of URL | 62 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ \ URL \ 63 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Length of 64 * <scope-list> | <scope-list> \ 65 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Length of 66 * <attr-list> | <attr-list> \ 67 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Length of 68 * <SLP SPI List> | <SLP SPI List> String \ 69 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | # Auth 70 * Blocks | Authentication block (if any) \ 71 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ FIXME: is 72 * this URL an URL-entry or an URL String. Assuming URL String. 73 */ 74 75 /** 76 * DAAdvert message 77 * 78 */ 79 public class DAAdvert extends ReplyMessage { 80 private long iStatelessBootTime; 81 82 private String iURLStr; 83 84 private List<String> iScopeList; 85 86 private List<ServiceLocationAttribute> iAttrList; 87 88 private List<String> iSPIList; 89 90 /** 91 * parse 92 * 93 * @param pHdr 94 * @param pInStr 95 * @return SLPMessage 96 * @throws ServiceLocationException 97 * @throws IOException 98 */ 99 public static SLPMessage parse(MsgHeader pHdr, SLPInputStream pInStr) throws ServiceLocationException, IOException { 100 return new DAAdvert( 101 pHdr, 102 pInStr.read16(), 103 pInStr.read32(), 104 pInStr.readString(), 105 pInStr.readStringList(), 106 pInStr.readAttributeList(), 107 pInStr.readStringList() 108 ); 109 } 110 111 /** 112 * Ctor. 113 * 114 * @param pErrorCode 115 * @param pStatelessBootTime 116 * @param pURLStr 117 * @param pScopeList 118 * - list of scope strings 119 * @param pAttrList 120 * - list of ServiceLocationAttributes 121 * @param pSPIList 122 */ 123 public DAAdvert( 124 int pErrorCode, 125 long pStatelessBootTime, 126 String pURLStr, 127 List<String> pScopeList, 128 List<ServiceLocationAttribute> pAttrList, 129 List<String> pSPIList 130 ) { 131 super(DA_ADVERT, pErrorCode); 132 init(pStatelessBootTime, pURLStr, pScopeList, pAttrList, pSPIList); 133 } 134 135 /** 136 * Ctor. 137 * 138 * @param pLangTag 139 * @param pErrorCode 140 * @param pStatelessBootTime 141 * @param pURLStr 142 * @param pScopeList 143 * - list of scope strings 144 * @param pAttrList 145 * - list of ServiceLocationAttributes 146 * @param pSPIList 147 */ 148 public DAAdvert( 149 String pLangTag, 150 int pErrorCode, 151 long pStatelessBootTime, 152 String pURLStr, 153 List<String> pScopeList, 154 List<ServiceLocationAttribute> pAttrList, 155 List<String> pSPIList 156 ) { 157 super(DA_ADVERT, pLangTag, pErrorCode); 158 init(pStatelessBootTime, pURLStr, pScopeList, pAttrList, pSPIList); 159 } 160 161 /** 162 * Ctor. 163 * 164 * @param pHeader 165 * @param pErrorCode 166 * @param pStatelessBootTime 167 * @param pURLStr 168 * @param pScopeList 169 * - list of scope strings 170 * @param pAttrList 171 * - list of ServiceLocationAttributes 172 * @param pSPIList 173 */ 174 public DAAdvert( 175 MsgHeader pHeader, 176 int pErrorCode, 177 long pStatelessBootTime, 178 String pURLStr, 179 List<String> pScopeList, 180 List<ServiceLocationAttribute> pAttrList, 181 List<String> pSPIList 182 ) { 183 super(pHeader, pErrorCode); 184 init(pStatelessBootTime, pURLStr, pScopeList, pAttrList, pSPIList); 185 } 186 187 /** 188 * @return Iterator of DADescriptors 189 * @see ReplyMessage#getResultIterator() 190 */ 191 @Override 192 public Iterator<DADescriptor> getResultIterator() { 193 ArrayList<DADescriptor> list = new ArrayList<DADescriptor>(1); 194 list.add(new DADescriptor(this.iURLStr, new TreeSet<String>(this.iScopeList), this.iAttrList)); 195 return list.iterator(); 196 } 197 198 /** 199 * @param pOption 200 */ 201 @Override 202 protected boolean serializeBody(SLPOutputStream pOutStr, SerializeOption pOption) { 203 return ( 204 pOutStr.write16(getErrorCode()) && 205 pOutStr.write32(this.iStatelessBootTime) && 206 pOutStr.write(this.iURLStr) && 207 pOutStr.writeStringList(this.iScopeList) && 208 pOutStr.writeAttributeList(this.iAttrList) && 209 pOutStr.writeStringList(this.iSPIList) 210 ); 211 } 212 213 private void init( 214 long pStatelessBootTime, 215 String pURLStr, 216 List<String> pScopeList, 217 List<ServiceLocationAttribute> pAttrList, 218 List<String> pSPIList 219 ) { 220 this.iStatelessBootTime = pStatelessBootTime; 221 this.iURLStr = pURLStr; 222 this.iScopeList = pScopeList; 223 this.iAttrList = pAttrList; 224 this.iSPIList = pSPIList; 225 } 226 227 @Override 228 public Iterator<Exception> getExceptionIterator() { 229 // this message doesn't have exception table 230 return null; 231 } 232 }