1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright (c) 1999, 2001 by Sun Microsystems, Inc. 23 * All rights reserved. 24 * 25 */ 26 27 // SSrvReg.java: Message class for SLP service registration request. 28 // Author: James Kempf 29 // Created On: Thu Oct 9 14:47:48 1997 30 // Last Modified By: Jason Goldschmidt 31 // Last Modified On: Thu Apr 5 14:46:29 2001 32 // Update Count: 107 33 // 34 35 package com.sun.slp; 36 37 import java.util.*; 38 import java.io.*; 39 40 41 /** 42 * The SSrvReg class models the server side SLP service registration. The 43 * default class does SLPv2 regs, but subclasses can do other versions 44 * by redefining the initialize() and makeReply() messages. 45 * 46 * @author James Kempf 47 */ 48 49 class SSrvReg extends SrvLocMsgImpl { 50 51 ServiceURL URL = null; // the service URL. 52 String serviceType = ""; // service type. 53 Vector attrList = new Vector(); // ServiceLocationAttribute objects. 54 Hashtable URLSignature = null; // signature for URL. 55 Hashtable attrSignature = null; // the signatures for the attributes. 56 57 // Construct a SSrvReg from the input stream. 58 SSrvReg(SrvLocHeader hdr, DataInputStream dis)59 SSrvReg(SrvLocHeader hdr, DataInputStream dis) 60 throws ServiceLocationException, IOException { 61 62 super(hdr, SrvLocHeader.SrvReg); 63 64 this.initialize(dis); 65 66 } 67 68 // Initialize the object from the input stream. 69 initialize(DataInputStream dis)70 void initialize(DataInputStream dis) 71 throws ServiceLocationException, IOException { 72 73 SLPServerHeaderV2 hdr = (SLPServerHeaderV2)getHeader(); 74 StringBuffer buf = new StringBuffer(); 75 76 // Parse in the service URL 77 78 Hashtable table = new Hashtable(); 79 80 URL = 81 hdr.parseServiceURLIn(dis, 82 table, 83 ServiceLocationException.INVALID_REGISTRATION); 84 85 URLSignature = (Hashtable)table.get(URL); 86 87 // Parse in service type name. 88 89 hdr.getString(buf, dis); 90 91 // Validate and set URL type. 92 93 ServiceType t = new ServiceType(buf.toString()); 94 95 if (!(URL.getServiceType()).isServiceURL() && 96 !t.equals(URL.getServiceType())) { 97 URL.setServiceType(t); 98 99 } 100 101 // Parse in the scope list. 102 103 hdr.parseScopesIn(dis); 104 105 // Parse in the attribute list. 106 107 attrSignature = 108 hdr.parseAuthenticatedAttributeVectorIn(attrList, dis, false); 109 110 hdr.constructDescription("SrvReg", 111 " URL=``" + 112 URL + "''\n" + 113 " service type=``" + 114 serviceType + "''\n" + 115 " attribute list=``" + 116 attrList + "''\n" + 117 " URL signature=" + 118 AuthBlock.desc(URLSignature) + "\n" + 119 " attribute signature=" + 120 AuthBlock.desc(attrSignature) + "\n"); 121 } 122 123 // Return a SrvAck. We ignore the existing flag, since in V2, fresh comes 124 // in. In this case, all we need to do is clone the header. 125 makeReply(boolean existing)126 SrvLocMsg makeReply(boolean existing) { 127 128 SLPServerHeaderV2 hdr = 129 ((SLPServerHeaderV2)getHeader()).makeReplyHeader(); 130 131 // Construct description. 132 133 hdr.constructDescription("SrvAck", ""); 134 135 return hdr; 136 137 } 138 } 139