|
|
1.1 ! root 1: /* frsend.c - _frsend */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <frame.h> ! 6: #include <dlc.h> ! 7: ! 8: /*------------------------------------------------------------------------ ! 9: * _frsend -- transmit one frame until receipt acknowledged ! 10: *------------------------------------------------------------------------ ! 11: */ ! 12: _frsend(fptr, fgptr) ! 13: struct frame *fptr; ! 14: struct fglob *fgptr; ! 15: { ! 16: int len; ! 17: int seq, nextseq; ! 18: int msg; /* response from receiver or timeout */ ! 19: int msgcode; /* ack code without sequence number */ ! 20: ! 21: len = getflen(fptr); ! 22: fgptr->fofails = 0; ! 23: fptr->frseq = seq = fgptr->foseq; ! 24: nextseq = seq >= FRMAXSEQ ? 0 : seq+1; ! 25: while ( TRUE ) { ! 26: recvclr(); ! 27: write(fgptr->foutdev, fptr, len); ! 28: ! 29: /* schedule timeout message */ ! 30: ! 31: fgptr->ftfuse = FRTIME; ! 32: fgptr->ftpid = getpid(); ! 33: resume(fgptr->ftimproc); ! 34: if ( (msg=receive()) != FRTMSG) { ! 35: fgptr->ftfuse = -1; ! 36: switch (msg & FRCODE) { ! 37: ! 38: case FRACK: ! 39: if ( (msg&FRSEQ) == nextseq) { ! 40: fgptr->foseq = nextseq; ! 41: return; ! 42: } ! 43: break; ! 44: ! 45: case FRSACK: ! 46: fptr->frseq = fgptr->foseq = 0; ! 47: nextseq = 1; ! 48: sleep10(1); ! 49: } ! 50: } ! 51: sleep10(1); ! 52: } ! 53: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.