|
|
1.1 ! root 1: /* ts2ps.c - TSDU-backed abstraction for PStreams ! 2: (really just a refinement of datagram-backed PStreams) */ ! 3: ! 4: #ifndef lint ! 5: static char *rcsid = "$Header: /f/osi/psap/RCS/ts2ps.c,v 7.0 89/11/23 22:13:55 mrose Rel $"; ! 6: #endif ! 7: ! 8: /* ! 9: * $Header: /f/osi/psap/RCS/ts2ps.c,v 7.0 89/11/23 22:13:55 mrose Rel $ ! 10: * ! 11: * ! 12: * $Log: ts2ps.c,v $ ! 13: * Revision 7.0 89/11/23 22:13:55 mrose ! 14: * Release 6.0 ! 15: * ! 16: */ ! 17: ! 18: /* ! 19: * NOTICE ! 20: * ! 21: * Acquisition, use, and distribution of this module and related ! 22: * materials are subject to the restrictions of a license agreement. ! 23: * Consult the Preface in the User's Manual for the full terms of ! 24: * this agreement. ! 25: * ! 26: */ ! 27: ! 28: ! 29: /* LINTLIBRARY */ ! 30: ! 31: #include <stdio.h> ! 32: #include "psap.h" ! 33: #include "tsap.h" ! 34: #include "tailor.h" ! 35: ! 36: /* */ ! 37: ! 38: int ts_read (fd, q) ! 39: int fd; ! 40: struct qbuf **q; ! 41: { ! 42: register struct qbuf *qb; ! 43: struct TSAPdata txs; ! 44: register struct TSAPdata *tx = &txs; ! 45: struct TSAPdisconnect tds; ! 46: register struct TSAPdisconnect *td = &tds; ! 47: ! 48: if (TReadRequest (fd, tx, NOTOK, td) == NOTOK) { ! 49: if (td -> td_reason == DR_NORMAL) { ! 50: *q = NULL; ! 51: return OK; ! 52: } ! 53: ! 54: SLOG (psap_log, LLOG_EXCEPTIONS, NULLCP, ! 55: (td -> td_cc > 0 ? "ts_read: [%s] %*.*s" : "ts_read: [%s]", ! 56: TErrString (td -> td_reason), td -> td_cc, td -> td_cc, ! 57: td -> td_data)); ! 58: ! 59: return NOTOK; ! 60: } ! 61: ! 62: qb = &tx -> tx_qbuf; ! 63: if (qb -> qb_forw -> qb_forw != qb && qb_pullup (qb) == NOTOK) { ! 64: SLOG (psap_log, LLOG_EXCEPTIONS, NULLCP, ! 65: ("ts_read: qb_pullup fails")); ! 66: TXFREE (tx); ! 67: ! 68: return NOTOK; ! 69: } ! 70: ! 71: remque (qb = tx -> tx_qbuf.qb_forw); ! 72: qb -> qb_forw = qb -> qb_back = qb; ! 73: ! 74: *q = qb; ! 75: ! 76: TXFREE (tx); ! 77: ! 78: return qb -> qb_len; ! 79: } ! 80: ! 81: ! 82: int ts_write (fd, qb) ! 83: int fd; ! 84: register struct qbuf *qb; ! 85: { ! 86: struct TSAPdisconnect tds; ! 87: register struct TSAPdisconnect *td = &tds; ! 88: ! 89: if (TDataRequest (fd, qb -> qb_data, qb -> qb_len, td) == NOTOK) { ! 90: SLOG (psap_log, LLOG_EXCEPTIONS, NULLCP, ! 91: (td -> td_cc > 0 ? "ts_write: [%s] %*.*s" : "ts_write: [%s]", ! 92: TErrString (td -> td_reason), td -> td_cc, td -> td_cc, ! 93: td -> td_data)); ! 94: ! 95: return NOTOK; ! 96: } ! 97: ! 98: return qb -> qb_len; ! 99: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.