1/* 2 * Copyright (c) 2010 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 3. Neither the name of Apple Inc. ("Apple") nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 20 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 * 30 * Portions of this software have been released under the following terms: 31 * 32 * (c) Copyright 1989-1993 OPEN SOFTWARE FOUNDATION, INC. 33 * (c) Copyright 1989-1993 HEWLETT-PACKARD COMPANY 34 * (c) Copyright 1989-1993 DIGITAL EQUIPMENT CORPORATION 35 * 36 * To anyone who acknowledges that this file is provided "AS IS" 37 * without any express or implied warranty: 38 * permission to use, copy, modify, and distribute this file for any 39 * purpose is hereby granted without fee, provided that the above 40 * copyright notices and this notice appears in all source code copies, 41 * and that none of the names of Open Software Foundation, Inc., Hewlett- 42 * Packard Company or Digital Equipment Corporation be used 43 * in advertising or publicity pertaining to distribution of the software 44 * without specific, written prior permission. Neither Open Software 45 * Foundation, Inc., Hewlett-Packard Company nor Digital 46 * Equipment Corporation makes any representations about the suitability 47 * of this software for any purpose. 48 * 49 * Copyright (c) 2007, Novell, Inc. All rights reserved. 50 * Redistribution and use in source and binary forms, with or without 51 * modification, are permitted provided that the following conditions 52 * are met: 53 * 54 * 1. Redistributions of source code must retain the above copyright 55 * notice, this list of conditions and the following disclaimer. 56 * 2. Redistributions in binary form must reproduce the above copyright 57 * notice, this list of conditions and the following disclaimer in the 58 * documentation and/or other materials provided with the distribution. 59 * 3. Neither the name of Novell Inc. nor the names of its contributors 60 * may be used to endorse or promote products derived from this 61 * this software without specific prior written permission. 62 * 63 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 64 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 65 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 66 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY 67 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 68 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 69 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 70 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 71 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 72 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 73 * 74 * @APPLE_LICENSE_HEADER_END@ 75 */ 76 77/* 78** 79** NAME 80** 81** cnid.c 82** 83** FACILITY: 84** 85** Remote Procedure Call (RPC) 86** 87** ABSTRACT: 88** 89** The Local Identifier Service. 90** 91** 92*/ 93 94#include <commonp.h> /* Common declarations for all RPC runtime */ 95#include <com.h> /* Common communications services */ 96#include <comprot.h> /* Common protocol services */ 97#include <cnp.h> /* NCA Connection private declarations */ 98#include <cnid.h> 99 100/* 101 * INTERNAL variables. 102 */ 103 104INTERNAL unsigned16 seqnum; 105 106/***********************************************************************/ 107 108 109/* 110**++ 111** 112** ROUTINE NAME: rpc__cn_init_seqnum 113** 114** SCOPE: PRIVATE - declared in cnid.h 115** 116** DESCRIPTION: 117** 118** 119** This routine initializes the global sequence number cell and 120** corresponding mutex. 121** 122** A sequence number generated by extracting the lower sixteen bits 123** of system time in seconds. 124** 125** INPUTS: none 126** 127** INPUTS/OUTPUTS: none 128** 129** OUTPUTS: none 130** 131** IMPLICIT INPUTS: none 132** 133** The system time. 134** 135** IMPLICIT OUTPUTS: none 136** 137** The static variable seqnum will contain the lower 16 138** bits of the system time in seconds. 139** 140** FUNCTION VALUE: none 141** 142** SIDE EFFECTS: none 143** 144** 145** 146** 147**-- 148**/ 149 150PRIVATE void rpc__cn_init_seqnum (void) 151 152{ 153 154 /* 155 * Determine the system time in seconds via the time() C runtime library 156 * call. Use the lower 16 bits of this for the sequence number. 157 */ 158 seqnum = ((unsigned32) time (NULL)) & 0xffff; 159} 160 161 162/* 163**++ 164** 165** ROUTINE NAME: rpc__cn_gen_local_id 166** 167** SCOPE: PRIVATE - declared in cnid.h 168** 169** DESCRIPTION: 170** 171** This routine creates a new local identifier. The index portion 172** of the identifier is taken from the index argument passed by the 173** caller. 174** 175** INPUTS: 176** 177** index Index value to be stored in the local 178** identifier being created. 179** 180** INPUTS/OUTPUTS: none 181** 182** OUTPUTS: 183** 184** lcl_id The created local identifier. 185** 186** IMPLICIT INPUTS: none 187** 188** IMPLICIT OUTPUTS: none 189** 190** FUNCTION VALUE: none 191** 192** SIDE EFFECTS: 193** 194** The sequence number is incremented. 195** 196**-- 197**/ 198 199PRIVATE void rpc__cn_gen_local_id 200( 201 unsigned32 index, 202 rpc_cn_local_id_t *lcl_id 203) 204{ 205 206 /* 207 * Increment it so that the local id being generated will be different that 208 * the last. 209 */ 210 seqnum++; 211 212 /* 213 * Since zero is defined as being an invalid local id we never want to 214 * generate a local id with a sequence number part of zero (since the index 215 * given may be zero. 216 */ 217 if (seqnum == 0) 218 { 219 seqnum = 1; 220 } 221 222 /* 223 * Copy the sequence number into the returned local id. 224 */ 225 lcl_id->parts.id_seqnum = seqnum; 226 227 /* 228 * Put the caller provided index into the returned local id. 229 */ 230 lcl_id->parts.id_index = (unsigned16) index; 231} 232