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 by Sun Microsystems, Inc.
23  * All rights reserved.
24  *
25  */
26 
27 //  CSAAdvert.java:    Message class for SLP CSAAdvert message
28 //  Author:           James Kempf
29 //  Created On:       Fri Oct 10 10:48:05 1997
30 //  Last Modified By: James Kempf
31 //  Last Modified On: Tue Oct 27 10:57:41 1998
32 //  Update Count:     95
33 //
34 
35 package com.sun.slp;
36 
37 import java.util.*;
38 import java.io.*;
39 
40 
41 /**
42  * The CSAAdvert class models the SLP SAAdvert message, client side.
43  *
44  * @author James Kempf
45  */
46 
47 
48 class CSAAdvert extends SrvLocMsgImpl {
49 
50     ServiceURL URL = null;	// The DA's service URL
51     Hashtable authBlock = null;	// Scope auth blocks.
52     Vector attrs = new Vector(); // The attributes.
53 
54     // Construct a CSAAdvert from the input stream.
55 
CSAAdvert(SLPHeaderV2 hdr, DataInputStream dis)56     CSAAdvert(SLPHeaderV2 hdr, DataInputStream dis)
57 	throws ServiceLocationException, IOException {
58 	super(hdr, SrvLocHeader.SAAdvert);
59 
60 	// Parse in SA's service URL.
61 
62 	StringBuffer buf = new StringBuffer();
63 
64 	byte[] urlBytes = hdr.getString(buf, dis);
65 
66 	try {
67 
68 	    URL = new ServiceURL(buf.toString(), ServiceURL.LIFETIME_NONE);
69 
70 	} catch (IllegalArgumentException ex) {
71 
72 	    throw
73 		new ServiceLocationException(
74 				ServiceLocationException.PARSE_ERROR,
75 				"malformed_url",
76 				new Object[] {ex.getMessage()});
77 
78 	}
79 
80 	// Validate the service URL.
81 
82 	ServiceType serviceType = URL.getServiceType();
83 
84 	if (!serviceType.equals(Defaults.SA_SERVICE_TYPE)) {
85 	    throw
86 		new ServiceLocationException(
87 				ServiceLocationException.PARSE_ERROR,
88 				"not_right_url",
89 				new Object[] {URL, "SA"});
90 
91 	}
92 
93 	// Parse in the scope list.
94 
95 	byte[] scopeBytes = hdr.getString(buf, dis);
96 
97 	hdr.scopes =
98 	    hdr.parseCommaSeparatedListIn(buf.toString(), true);
99 
100 	// Unescape scopes.
101 
102 	hdr.unescapeScopeStrings(hdr.scopes);
103 
104 	// Validate scope list.
105 
106 	DATable.validateScopes(hdr.scopes, hdr.locale);
107 
108 	// Parse in attributes.
109 
110 	byte attrBytes[] = hdr.parseAttributeVectorIn(attrs, dis, false);
111 
112 	// Construct bytes for auth.
113 
114 	Object[] message = new Object[6];
115 
116 	// None of the strings have leading length fields, so add them here
117 	ByteArrayOutputStream abaos = new ByteArrayOutputStream();
118 	hdr.putInteger(urlBytes.length, abaos);
119 	message[0] = abaos.toByteArray();
120 	message[1] = urlBytes;
121 
122 	abaos = new ByteArrayOutputStream();
123 	hdr.putInteger(attrBytes.length, abaos);
124 	message[2] = abaos.toByteArray();
125 	message[3] = attrBytes;
126 
127 	abaos = new ByteArrayOutputStream();
128 	hdr.putInteger(scopeBytes.length, abaos);
129 	message[4] = abaos.toByteArray();
130 	message[5] = scopeBytes;
131 
132 	// Parse in an auth block if there.
133 
134 	authBlock = hdr.parseSignatureIn(message, dis);
135 
136 	// Set number of replies.
137 
138 	hdr.iNumReplies = 1;
139 
140     }
141 }
142