|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: /* ! 23: * Copyright (c) 1995-1998 Apple Computer, Inc. ! 24: * ! 25: * Change Log: ! 26: * Created February 20, 1995 by Tuyen Nguyen ! 27: * Modified for MP, 1996 by Tuyen Nguyen ! 28: * Modified, March 17, 1997 by Tuyen Nguyen for MacOSX. ! 29: */ ! 30: #include <sys/errno.h> ! 31: #include <sys/types.h> ! 32: #include <sys/param.h> ! 33: #include <machine/spl.h> ! 34: #include <sys/systm.h> ! 35: #include <sys/kernel.h> ! 36: #include <sys/proc.h> ! 37: #include <sys/filedesc.h> ! 38: #include <sys/fcntl.h> ! 39: #include <sys/mbuf.h> ! 40: #include <sys/malloc.h> ! 41: #include <sys/file.h> ! 42: #include <sys/socket.h> ! 43: ! 44: #include <netat/sysglue.h> ! 45: #include <netat/appletalk.h> ! 46: #include <netat/at_pcb.h> ! 47: #include <netat/debug.h> ! 48: ! 49: int (*sys_ATsocket)() = 0; ! 50: int (*sys_ATgetmsg)() = 0; ! 51: int (*sys_ATputmsg)() = 0; ! 52: int (*sys_ATPsndreq)() = 0; ! 53: int (*sys_ATPsndrsp)() = 0; ! 54: int (*sys_ATPgetreq)() = 0; ! 55: int (*sys_ATPgetrsp)() = 0; ! 56: ! 57: int ATsocket(proc, uap, retval) ! 58: void *proc; ! 59: struct { ! 60: int proto; ! 61: } *uap; ! 62: int *retval; ! 63: { ! 64: int err; ! 65: ! 66: if (sys_ATsocket) ! 67: *retval = (*sys_ATsocket)(uap->proto, &err, proc); ! 68: else { ! 69: *retval = -1; ! 70: err = ENXIO; ! 71: } ! 72: return err; ! 73: } ! 74: ! 75: int ATgetmsg(proc, uap, retval) ! 76: void *proc; ! 77: struct { ! 78: int fd; ! 79: void *ctlptr; ! 80: void *datptr; ! 81: int *flags; ! 82: } *uap; ! 83: int *retval; ! 84: { ! 85: int err; ! 86: ! 87: if (sys_ATgetmsg) ! 88: *retval = (*sys_ATgetmsg)(uap->fd, ! 89: uap->ctlptr, uap->datptr, uap->flags, &err, proc); ! 90: else { ! 91: *retval = -1; ! 92: err = ENXIO; ! 93: } ! 94: return err; ! 95: } ! 96: ! 97: int ATputmsg(proc, uap, retval) ! 98: void *proc; ! 99: struct { ! 100: int fd; ! 101: void *ctlptr; ! 102: void *datptr; ! 103: int flags; ! 104: } *uap; ! 105: int *retval; ! 106: { ! 107: int err; ! 108: ! 109: if (sys_ATputmsg) ! 110: *retval = (*sys_ATputmsg)(uap->fd, ! 111: uap->ctlptr, uap->datptr, uap->flags, &err, proc); ! 112: else { ! 113: *retval = -1; ! 114: err = ENXIO; ! 115: } ! 116: return err; ! 117: } ! 118: ! 119: int ATPsndreq(proc, uap, retval) ! 120: void *proc; ! 121: struct { ! 122: int fd; ! 123: unsigned char *buf; ! 124: int len; ! 125: int nowait; ! 126: } *uap; ! 127: int *retval; ! 128: { ! 129: int err; ! 130: ! 131: if (sys_ATPsndreq) ! 132: *retval = (*sys_ATPsndreq)(uap->fd, ! 133: uap->buf, uap->len, uap->nowait, &err, proc); ! 134: else { ! 135: *retval = -1; ! 136: err= ENXIO; ! 137: } ! 138: return err; ! 139: } ! 140: ! 141: int ATPsndrsp(proc, uap, retval) ! 142: void *proc; ! 143: struct { ! 144: int fd; ! 145: unsigned char *respbuff; ! 146: int resplen; ! 147: int datalen; ! 148: } *uap; ! 149: int *retval; ! 150: { ! 151: int err; ! 152: ! 153: if (sys_ATPsndrsp) ! 154: *retval = (*sys_ATPsndrsp)(uap->fd, ! 155: uap->respbuff, uap->resplen, uap->datalen, &err, proc); ! 156: else { ! 157: *retval = -1; ! 158: err = ENXIO; ! 159: } ! 160: return err; ! 161: } ! 162: ! 163: int ATPgetreq(proc, uap, retval) ! 164: void *proc; ! 165: struct { ! 166: int fd; ! 167: unsigned char *buf; ! 168: int buflen; ! 169: } *uap; ! 170: int *retval; ! 171: { ! 172: int err; ! 173: ! 174: if (sys_ATPgetreq) ! 175: *retval = (*sys_ATPgetreq)(uap->fd, ! 176: uap->buf, uap->buflen, &err, proc); ! 177: else { ! 178: *retval = -1; ! 179: err = ENXIO; ! 180: } ! 181: return err; ! 182: } ! 183: ! 184: int ATPgetrsp(proc, uap, retval) ! 185: void *proc; ! 186: struct { ! 187: int fd; ! 188: unsigned char *bdsp; ! 189: } *uap; ! 190: int *retval; ! 191: { ! 192: int err; ! 193: ! 194: if (sys_ATPgetrsp) ! 195: *retval = (*sys_ATPgetrsp)(uap->fd, uap->bdsp, &err, proc); ! 196: else { ! 197: *retval = -1; ! 198: err = ENXIO; ! 199: } ! 200: return err; ! 201: } ! 202: ! 203: int atalk_closeref(fp, grefp) ! 204: struct file *fp; ! 205: gref_t **grefp; ! 206: { ! 207: *grefp = (gref_t *)fp->f_data; ! 208: ! 209: fp->f_data = 0; ! 210: /* ! 211: kprintf("atalk_closeref: fp = 0x%x, gref = 0x%x\n", (u_int)fp, ! 212: (u_int)*grefp); ! 213: */ ! 214: return 0; ! 215: } ! 216: ! 217: int atalk_openref(gref, retfd, proc) ! 218: gref_t *gref; ! 219: int *retfd; ! 220: struct proc *proc; ! 221: { ! 222: extern int _ATread(), _ATwrite(),_ATioctl(), _ATselect(), _ATclose(); ! 223: static struct fileops fileops = ! 224: {_ATread, _ATwrite, _ATioctl, _ATselect, _ATclose}; ! 225: int err, fd; ! 226: struct file *fp; ! 227: ! 228: if ((err = falloc(proc, &fp, &fd)) != 0) ! 229: return err; ! 230: fp->f_flag = FREAD|FWRITE; ! 231: /*##### LD 5/7/96 Warning: we don't have a "DTYPE_OTHER" for ! 232: * MacOSX, so defines DTYPE_ATALK as DTYPE_SOCKET... ! 233: */ ! 234: fp->f_type = DTYPE_ATALK+1; ! 235: fp->f_ops = &fileops; ! 236: *fdflags(proc, fd) &= ~UF_RESERVED; ! 237: *retfd = fd; ! 238: fp->f_data = (void *)gref; ! 239: /* ! 240: kprintf("atalk_openref: fp = 0x%x, gref = 0x%x\n", (u_int)fp, (u_int)gref); ! 241: */ ! 242: return 0; ! 243: } ! 244: ! 245: /* go from file descriptor to gref, which has been saved in fp->f_data */ ! 246: int atalk_getref(fp, fd, grefp, proc) ! 247: struct file *fp; ! 248: int fd; ! 249: gref_t **grefp; ! 250: struct proc *proc; ! 251: { ! 252: if (fp == 0) { ! 253: int error = fdgetf(proc, fd, &fp); ! 254: ! 255: if (error) { ! 256: ! 257: *grefp = (gref_t *)0; ! 258: return EBADF; ! 259: } ! 260: } ! 261: if ((*grefp = (gref_t *)fp->f_data) == 0) ! 262: return EBADF; ! 263: return 0; ! 264: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.