usr/src/lib/libslp/javalib/com/sun/slp/SLPServerHeaderV2.java
author Mark J. Nelson <Mark.J.Nelson@Sun.COM>
Wed, 06 Aug 2008 16:29:39 -0600
changeset 7298 b69e27387f74
parent 0 68f95e015346
permissions -rw-r--r--
6733918 Teamware has retired, please welcome your new manager, Mercurial 4758439 some files use "current date" sccs keywords 6560843 asm sources should not rely on .file "%M%" for naming STT_FILE symbols 6560958 Solaris:: perl modules should not use SCCS keywords in version information 6729074 webrev doesn't deal well with remote ssh hg parents
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
7298
b69e27387f74 6733918 Teamware has retired, please welcome your new manager, Mercurial
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 0
diff changeset
     5
 * Common Development and Distribution License (the "License").
b69e27387f74 6733918 Teamware has retired, please welcome your new manager, Mercurial
Mark J. Nelson <Mark.J.Nelson@Sun.COM>
parents: 0
diff changeset
     6
 * You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    22
 * Copyright 2001-2002 Sun Microsystems, Inc.  All rights reserved.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
//  SLPServerHeaderV2.java: SLPv2 Header Class for Server Side
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
//  Author:           James Kempf
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
//  Created On:       Wed Sep 16 08:44:31 1998
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
//  Last Modified By: James Kempf
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
//  Last Modified On: Mon Jan  4 15:26:33 1999
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
//  Update Count:     30
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
//
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
package com.sun.slp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
import java.util.*;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
import java.net.*;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
import java.io.*;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
import java.security.*;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
/**
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
 * The SLPServerHeaderV2 class serves as the header class for all server side
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
 * SLPv2 messages.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
 * @author James Kempf
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
class SLPServerHeaderV2 extends SLPHeaderV2  implements Cloneable {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
    // Function code for message reply.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
    int replyFunctionCode = SrvLocHeader.SrvAck;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
    // For SrvLocHeader.newInstance().
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
    SLPServerHeaderV2() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
	super();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
    // Construct a header for output. Used by the client side code to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    64
    //  construct an initial request and the server side code to construct
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    65
    //  a reply.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
    SLPServerHeaderV2(int functionCode, boolean fresh, Locale locale)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
	throws ServiceLocationException {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
	super(functionCode, fresh, locale);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
    // Assign reply code based on function code type, then use superclass
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
    //  method to parse header.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
    void parseHeader(int functionCode, DataInputStream dis)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
	throws ServiceLocationException, IOException {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
	// We ignore the error case here.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
	switch (functionCode) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    82
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
	case SrvLocHeader.SrvReq:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
	    replyFunctionCode = SrvLocHeader.SrvRply;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
	    break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
	case SrvLocHeader.AttrRqst:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
	    replyFunctionCode = SrvLocHeader.AttrRply;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
	    break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
	case SrvLocHeader.SrvTypeRqst:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
	    replyFunctionCode = SrvLocHeader.SrvTypeRply;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
	    break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
	case SrvLocHeader.SrvReg: case SrvLocHeader.SrvDereg:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
	    replyFunctionCode = SrvLocHeader.SrvAck;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
	    break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
	    // If we get an error during creating of the DAAdvert to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
	    //  reply, we need to continue and reply with DAAdvert.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
	    //  This is only true for a unicast DAAdvert, though.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
	case SrvLocHeader.DAAdvert:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
	    replyFunctionCode = SrvLocHeader.DAAdvert;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
	    break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
	    // We ignore the header error code for SAAdvert because
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
	    //  it is always multicast.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
	// We are now set up to handle any errors that may come flying out
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
	//  of here.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
	super.parseHeader(functionCode, dis);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
    // Replace the superclass method with a method that parses the server
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
    //  side.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
    SrvLocMsg parseMsg(DataInputStream dis)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
	throws ServiceLocationException,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
	       IOException,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
	       IllegalArgumentException {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
	SrvLocMsg msg = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
	// DAAdvert needs to get it's error code parsed here because
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
	//  error codes are always handled in parseMsg() and it is
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
	//  the only server side message that has one.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
	if (functionCode == SrvLocHeader.DAAdvert) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
	    errCode = (short)getInt(dis);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
	// Switch and convert according to function code.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
	switch (functionCode) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
	case SrvLocHeader.SrvReg:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
	    msg = new SSrvReg(this, dis);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
	    break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
	case SrvLocHeader.SrvDereg:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
	    msg = new SSrvDereg(this, dis);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
	    break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
	case SrvLocHeader.SrvReq:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
	    msg = new SSrvMsg(this, dis);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
	    break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
	case SrvLocHeader.AttrRqst:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
	    msg = new SAttrMsg(this, dis);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
	    break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
	case SrvLocHeader.SrvAck:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
	    // We function as our own message.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
	    msg = this;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
	    iNumReplies = 1;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
	    break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
	case SrvLocHeader.SrvTypeRqst:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
	    msg = new SSrvTypeMsg(this, dis);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
	    break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
	case SrvLocHeader.DAAdvert:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
	    msg = new CDAAdvert(this, dis);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
	    break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
	case SrvLocHeader.SAAdvert:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
	    msg = new CSAAdvert(this, dis);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
	    break;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
	default:
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
	    throw
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
		new ServiceLocationException(
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
				ServiceLocationException.PARSE_ERROR,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
				"function_code_error",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
				new Object[] {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
		    new Integer(functionCode)});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
	// Check for size overflow.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
	if (nbytes > length) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
	    throw
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
		new ServiceLocationException(
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
				ServiceLocationException.PARSE_ERROR,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
				"length_overflow",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
				new Object[] {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
		    new Integer(nbytes), new Integer(length)});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
	return msg;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
    // Create an error reply using the reply code. Calculate the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
    //  error code using the exception.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
    SrvLocMsg makeErrorReply(Exception ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
	SrvLocHeader hdr = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
	// Clone the header to make sure that everything else is the same.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
	//  We don't want to use the same header because it may be tested
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
	//  elsewhere.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
	    hdr = (SrvLocHeader)this.clone();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
	} catch (CloneNotSupportedException exx) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
	    // We support it, so no-op.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
	// Re-initialize flags but not multicast, since we need to filter on it
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
	hdr.fresh = false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
	hdr.overflow = false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
	hdr.functionCode = replyFunctionCode;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
	// We should *not* be getting a null exception down this path!
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
	Assert.slpassert(ex != null,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
		      "null_parameter",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
		      new Object[] {ex});
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
	if (ex instanceof ServiceLocationException) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
	    hdr.errCode = ((ServiceLocationException)ex).getErrorCode();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
	    if (!ServiceLocationException.validWireErrorCode(hdr.errCode)) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
		hdr.errCode = ServiceLocationException.INTERNAL_ERROR;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
	    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
	} else if (ex instanceof IllegalArgumentException ||
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   246
		   ex instanceof IOException) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   247
	    hdr.errCode = ServiceLocationException.PARSE_ERROR;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   248
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
	} else {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
	    hdr.errCode = ServiceLocationException.INTERNAL_ERROR;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
	// Construct header description.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   256
	constructDescription("SrvLocMsg", "");
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   257
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   258
	return hdr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   259
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   260
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
    // Return a reply header with flags properly set.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
    SLPServerHeaderV2 makeReplyHeader() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
	SLPServerHeaderV2 hdr = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
	try {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
	    hdr = (SLPServerHeaderV2)this.clone();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
	} catch (CloneNotSupportedException ex) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
	    // No-op, since we support it.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   276
	hdr.functionCode = replyFunctionCode;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   277
	hdr.length = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   278
	hdr.previousResponders = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   279
	hdr.scopes = null;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   280
	hdr.overflow = false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   281
	hdr.fresh = false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   282
	hdr.mcast = false;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   283
	hdr.nbytes = 0;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   284
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
	return hdr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
    // Return display string.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   290
    public String toString() {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   291
	return
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
	    getMsgType() + ":version=``" + version + "''\n" +
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
	    "       functionCode=``" + functionCode + "''\n" +
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
	    "       length=``" + length + "''" + "''\n" +
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
	    "       overflow=``" + overflow + "''\n" +
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
	    "       mcast = ``" + mcast + "''\n" +
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
	    "       fresh=``" + fresh + "''\n" +
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
	    "       locale = ``" + locale + "''\n" +
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
	    "       xid=``0x" + Integer.toHexString(xid) + "''\n" +
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
	    "       errCode=``" + errCode + "''\n" +
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
	    "       previousResponders=``" + previousResponders + "''\n" +
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
	    "       scopes=``" + scopes + "''\n" +
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   303
	    getMsgDescription();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   304
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   305
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   306
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   307
    // Parsing Utilities.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   308
    //
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
    // Parse in the scope list.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
    void parseScopesIn(DataInputStream dis)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
	throws ServiceLocationException, IOException {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
	StringBuffer buf = new StringBuffer();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
	getString(buf, dis);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
	scopes = parseCommaSeparatedListIn(buf.toString(), true);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
	// Unescape scope strings.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
	unescapeScopeStrings(scopes);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
	// Validate.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
	DATable.validateScopes(scopes, locale);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
    void parsePreviousRespondersIn(DataInputStream dis)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
	throws ServiceLocationException, IOException {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
	StringBuffer buf = new StringBuffer();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
	getString(buf, dis);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
	previousResponders =
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
	    parseCommaSeparatedListIn(buf.toString(), true);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
    // Return an SLPv2 DAAdvert.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
    SDAAdvert
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
	getDAAdvert(short xid,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
		    long timestamp,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
		    ServiceURL url,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
		    Vector scopes,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   350
		    Vector attrs)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
	throws ServiceLocationException {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
	// If scopes vector is null, then return all scopes for this
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
	//  DA.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
	if (scopes.size() <= 0) {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
	    scopes = SLPConfig.getSLPConfig().getSAConfiguredScopes();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
	}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   360
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   361
	return new SDAAdvert(this, xid, timestamp, url, scopes, attrs);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
    }
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   364
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   365
}