|
|
1.1 root 1: /*
2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
7: * Reserved. This file contains Original Code and/or Modifications of
8: * Original Code as defined in and that are subject to the Apple Public
9: * Source License Version 1.1 (the "License"). You may not use this file
10: * except in compliance with the License. Please obtain a copy of the
11: * License at http://www.apple.com/publicsource and read it before using
12: * this file.
13: *
14: * The Original Code and all software distributed under the License are
15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
19: * License for the specific language governing rights and limitations
20: * under the License.
21: *
22: * @APPLE_LICENSE_HEADER_END@
23: */
24:
25: /*
26: * Copyright (c) 1990, 1996-1998 Apple Computer, Inc.
27: * All Rights Reserved.
28: *
29: * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF APPLE COMPUTER, INC.
30: * The copyright notice above does not evidence any actual or
31: * intended publication of such source code.
32: */
33:
34: #include <adsp_local.h>
35: extern atlock_t adspgen_lock;
36:
37: /*
38: * InitContinue
39: *
40: * Handle 2nd half of code for dsp init. We could be called directly by
41: * the dsp Init routine, or if a socket has to be opened, we get called
42: * by the completion routine of the dsp open socket.
43: *
44: * INPUTS:
45: * sp The stream we're initing (not yet on list of streams)
46: * pb The user's dsp Init param block
47: * soc The socket we're going to use
48: * OUTPUTS:
49: * none
50: */
51: static void InitContinue(sp, pb) /* (CCBPtr sp, DSPPBPtr pb, int soc) */
52: CCBPtr sp;
53: struct adspcmd *pb;
54: {
55: int s;
56:
57: /* Save connection's socket # in CCB */
58: sp->localSocket = pb->socket;
59:
60: /*
61: * Link the new ccb onto queue. Must be done with interrupts off.
62: */
63: ATDISABLE(s, adspgen_lock);
64: qAddToEnd(AT_ADSP_STREAMS, sp); /* Put on linked list of connections */
65: ATENABLE(s, adspgen_lock);
66: return;
67: }
68:
69: /*
70: * dspInit
71: *
72: * Create and initialize a connection end. return ccbRefNum so that client can
73: * reference this ccb in later calls. The caller provides a pointer to
74: * ccb which belongs to adsp until the connection end is removed.
75: *
76: * If we have to open a socket, we'll have to do an async open socket, and
77: * finish up in the completion routine
78: *
79: * INPUTS:
80: * --> ccbPtr Pointer to connection control block
81: * --> adspcmdPtr Pointer to user request block
82: *
83: * OUTPUTS:
84: * <-- ccbRefNum refnum assigned to this connection.
85: *
86: * ERRORS:
87: * EADDRINUSE or 0
88: */
89: int adspInit(sp, ap) /* (DSPPBPtr pb) */
90: CCBPtr sp;
91: struct adspcmd *ap;
92: {
93: /*
94: * Set connection end defaults
95: */
96: sp->badSeqMax = 3; /* # of out-of-sequence packets received */
97: /* until a retransmit advice packet is sent */
98: sp->probeInterval = 6 * 30; /* 30 second probe interval */
99: sp->rtmtInterval = 6 * 5; /* Just a guess --- 5 seconds */
100: sp->sendBlocking = 16;
101: sp->sendInterval = 6;
102: sp->badSeqMax = 3; /* This is the default */
103:
104: sp->ProbeTimer.type = kProbeTimerType;
105: sp->FlushTimer.type = kFlushTimerType;
106: sp->RetryTimer.type = kRetryTimerType;
107: sp->AttnTimer.type = kAttnTimerType;
108: sp->ResetTimer.type = kResetTimerType;
109:
110: if (ap->csCode == dspInit) { /* Only do this if not connection Listener */
111: /*
112: * Initialize send and receive queue. Make sure they are the
113: * right size
114: */
115: sp->rbuflen = RecvQSize;
116: sp->rbuf_mb = 0;
117: sp->sbuflen = SendQSize;
118: sp->sbuf_mb = 0;
119: sp->csbuf_mb = 0;
120:
121: /*
122: * Initialize send and receive defaults
123: */
124:
125: sp->attn_mb = 0;
126: sp->state = sClosed; /* Set state for connection end */
127: /* end dspInit */
128: } else {
129:
130: /* dspCLInit */
131: sp->state = sListening; /* Set state for conn end */
132: } /* end dspCLInit */
133: /*
134: * User opens the socket, so continue with the init stuff
135: */
136: InitContinue(sp, ap);
137: return(0);
138: }
139:
140:
141: /*
142: * AdspBad
143: *
144: *
145: * INPUTS:
146: * --> ap Parameter block
147: *
148: */
149: int AdspBad(ap) /* (DSPPBPtr pb) */
150: struct adspcmd *ap;
151: {
152: dPrintf(D_M_ADSP, D_L_ERROR,
153: ("Hey! Do you have the right AuthToolbox?"));
154: ap->ioResult = controlErr; /* Unknown csCode in the param block */
155: return EINVAL;
156: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.