projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
more fixes from rick adams
[unix-history]
/
usr
/
src
/
usr.bin
/
uucp
/
uucico
/
pk1.c
diff --git
a/usr/src/usr.bin/uucp/uucico/pk1.c
b/usr/src/usr.bin/uucp/uucico/pk1.c
index
8811e35
..
93e57fa
100644
(file)
--- a/
usr/src/usr.bin/uucp/uucico/pk1.c
+++ b/
usr/src/usr.bin/uucp/uucico/pk1.c
@@
-1,5
+1,5
@@
#ifndef lint
#ifndef lint
-static char sccsid[] = "@(#)pk1.c 5.
6
(Berkeley) %G%";
+static char sccsid[] = "@(#)pk1.c 5.
7
(Berkeley) %G%";
#endif
#include <signal.h>
#endif
#include <signal.h>
@@
-18,9
+18,9
@@
int iomask[2];
#endif VMS
#define PKMAXSTMSG 40
#endif VMS
#define PKMAXSTMSG 40
-#define
PKTIME 25
+#define
MAXPKTIME 32 /* was 16 */
#define CONNODATA 10
#define CONNODATA 10
-#define
NTIMEOUT 10
+#define
MAXTIMEOUT 32
extern int errno;
extern int Retries;
extern int errno;
extern int Retries;
@@
-30,6
+30,7
@@
extern char *malloc();
int Connodata = 0;
int Ntimeout = 0;
int Connodata = 0;
int Ntimeout = 0;
+int pktimeout = 4;
/*
* packet driver support routines
*
/*
* packet driver support routines
*
@@
-49,8
+50,6
@@
int ifn, ofn;
register char **bp;
register int i;
register char **bp;
register int i;
- if (++pkactive >= NPLINES)
- return NULL;
if ((pk = (struct pack *) malloc(sizeof (struct pack))) == NULL)
return NULL;
bzero((caddr_t) pk, sizeof (struct pack));
if ((pk = (struct pack *) malloc(sizeof (struct pack))) == NULL)
return NULL;
bzero((caddr_t) pk, sizeof (struct pack));
@@
-65,8
+64,10
@@
int ifn, ofn;
*bp = (char *) pk->p_ipool;
pk->p_ipool = bp;
}
*bp = (char *) pk->p_ipool;
pk->p_ipool = bp;
}
- if (i == 0)
+ if (i == 0) {
+ DEBUG(1, "pkopen: can't malloc i = 0\n", CNULL);
return NULL;
return NULL;
+ }
pk->p_rwindow = i;
/* start synchronization */
pk->p_rwindow = i;
/* start synchronization */
@@
-77,8
+78,10
@@
int ifn, ofn;
break;
}
}
break;
}
}
- if (i >= NPLINES)
+ if (i >= NPLINES) {
+ DEBUG(1,"pkopen: i>=NPLINES\n", CNULL);
return NULL;
return NULL;
+ }
pkoutput(pk);
for (i = 0; i < PKMAXSTMSG; i++) {
pkoutput(pk);
for (i = 0; i < PKMAXSTMSG; i++) {
@@
-86,8
+89,10
@@
int ifn, ofn;
if ((pk->p_state & LIVE) != 0)
break;
}
if ((pk->p_state & LIVE) != 0)
break;
}
- if (i >= PKMAXSTMSG)
+ if (i >= PKMAXSTMSG) {
+ DEBUG(1, "pkopen: i>= PKMAXSTMSG\n", CNULL);
return NULL;
return NULL;
+ }
pkreset(pk);
return pk;
pkreset(pk);
return pk;
@@
-113,25
+118,23
@@
int pksizes[] = {
1, 32, 64, 128, 256, 512, 1024, 2048, 4096, 1
};
1, 32, 64, 128, 256, 512, 1024, 2048, 4096, 1
};
-#define GETRIES
5
+#define GETRIES
10
/*
* Pseudo-dma byte collection.
*/
/*
* Pseudo-dma byte collection.
*/
-pkgetpack(
i
pk)
-
struct pack *i
pk;
+pkgetpack(pk)
+
register struct pack *
pk;
{
int k, tries, noise;
register char *p;
{
int k, tries, noise;
register char *p;
- register struct pack *pk;
register struct header *h;
unsigned short sum;
int ifn;
char **bp;
char hdchk;
register struct header *h;
unsigned short sum;
int ifn;
char **bp;
char hdchk;
- pk = ipk;
- if ((pk->p_state & DOWN) || Connodata > CONNODATA || Ntimeout > NTIMEOUT)
+ if ((pk->p_state & DOWN) || Connodata > CONNODATA || Ntimeout > MAXTIMEOUT)
pkfail();
ifn = pk->p_ifn;
pkfail();
ifn = pk->p_ifn;
@@
-142,10
+145,11
@@
struct pack *ipk;
if (*p++ == SYN) {
if (pkcget(ifn, p, HDRSIZ-1) == SUCCESS)
break;
if (*p++ == SYN) {
if (pkcget(ifn, p, HDRSIZ-1) == SUCCESS)
break;
- } else
- if (noise++ < (3*pk->p_rsize))
+ } else
{
+ if (noise++ <
10 || noise <
(3*pk->p_rsize))
continue;
continue;
- DEBUG(4, "Noisy line - set up RXMIT", "");
+ }
+ DEBUG(4, "Noisy line - set up RXMIT\n", CNULL);
noise = 0;
}
/* set up retransmit or REJ */
noise = 0;
}
/* set up retransmit or REJ */
@@
-157,12
+161,6
@@
struct pack *ipk;
if ((pk->p_state & LIVE) == LIVE)
pk->p_state |= RXMIT;
pkoutput(pk);
if ((pk->p_state & LIVE) == LIVE)
pk->p_state |= RXMIT;
pkoutput(pk);
-
- if (*p != SYN)
- continue;
- p++;
- if (pkcget(ifn, p, HDRSIZ - 1) == SUCCESS)
- break;
}
if (tries >= GETRIES) {
DEBUG(4, "tries = %d\n", tries);
}
if (tries >= GETRIES) {
DEBUG(4, "tries = %d\n", tries);
@@
-170,7
+168,7
@@
struct pack *ipk;
}
Connodata++;
}
Connodata++;
- h = (struct header *
) &pk->p_ihbuf;
+ h = (struct header *) &pk->p_ihbuf;
p = (caddr_t) h;
hdchk = p[1] ^ p[2] ^ p[3] ^ p[4];
p += 2;
p = (caddr_t) h;
hdchk = p[1] ^ p[2] ^ p[3] ^ p[4];
p += 2;
@@
-199,19
+197,18
@@
struct pack *ipk;
if (k && pksizes[k] == pk->p_rsize) {
pk->p_rpr = h->cntl & MOD8;
pksack(pk);
if (k && pksizes[k] == pk->p_rsize) {
pk->p_rpr = h->cntl & MOD8;
pksack(pk);
- Connodata = 0;
bp = pk->p_ipool;
if (bp == NULL) {
DEBUG(7, "bp NULL %s\n", "");
return;
}
pk->p_ipool = (char **) *bp;
bp = pk->p_ipool;
if (bp == NULL) {
DEBUG(7, "bp NULL %s\n", "");
return;
}
pk->p_ipool = (char **) *bp;
- } else {
+ Connodata = 0;
+ } else
return;
return;
- }
+
if (pkcget(pk->p_ifn, (char *) bp, pk->p_rsize) == SUCCESS)
pkdata(h->cntl, h->sum, pk, (char **) bp);
if (pkcget(pk->p_ifn, (char *) bp, pk->p_rsize) == SUCCESS)
pkdata(h->cntl, h->sum, pk, (char **) bp);
- Ntimeout = 0;
}
pkdata(c, sum, pk, bp)
}
pkdata(c, sum, pk, bp)
@@
-247,8
+244,6
@@
slot:
pk->p_ib[x] = (char *)bp;
}
pk->p_ib[x] = (char *)bp;
}
-
-
/*
* setup input transfers
*/
/*
* setup input transfers
*/
@@
-274,8
+269,7
@@
register x;
if (x < 0) {
*p++ = hdchk = 9;
checkword = cntl;
if (x < 0) {
*p++ = hdchk = 9;
checkword = cntl;
- }
- else {
+ } else {
*p++ = hdchk = pk->p_lpsize;
checkword = pk->p_osum[x] ^ (unsigned)(cntl & 0377);
}
*p++ = hdchk = pk->p_lpsize;
checkword = pk->p_osum[x] ^ (unsigned)(cntl & 0377);
}
@@
-296,15
+290,19
@@
register x;
logent("PKXSTART write failed", sys_errlist[errno]);
longjmp(Sjbuf, 4);
}
logent("PKXSTART write failed", sys_errlist[errno]);
longjmp(Sjbuf, 4);
}
- }
- else {
- char buf[PKMAXBUF + HDRSIZ], *b;
+ } else {
+ char buf[PKMAXBUF + HDRSIZ + TAILSIZE], *b;
int i;
for (i = 0, b = buf; i < HDRSIZ; i++)
*b++ = *p++;
for (i = 0, p = pk->p_ob[x]; i < pk->p_xsize; i++)
*b++ = *p++;
int i;
for (i = 0, b = buf; i < HDRSIZ; i++)
*b++ = *p++;
for (i = 0, p = pk->p_ob[x]; i < pk->p_xsize; i++)
*b++ = *p++;
- if (write(pk->p_ofn, buf, pk->p_xsize + HDRSIZ) != (HDRSIZ + pk->p_xsize)) {
+#if TAILSIZE != 0
+ for (i = 0; i < TAILSIZE; i++)
+ *b++ = '\0';
+#endif TAILSIZE
+ if (write(pk->p_ofn, buf, pk->p_xsize + HDRSIZ + TAILSIZE)
+ != (HDRSIZ + TAILSIZE + pk->p_xsize)) {
alarm(0);
logent("PKXSTART write failed", sys_errlist[errno]);
longjmp(Sjbuf, 5);
alarm(0);
logent("PKXSTART write failed", sys_errlist[errno]);
longjmp(Sjbuf, 5);
@@
-335,11
+333,8
@@
int count, flag;
}
}
-/***
- * pkcget(fn, b, n) get n characters from input
- * char *b; - buffer for characters
- * int fn; - file descriptor
- * int n; - requested number of characters
+/*
+ * get n characters from input
*
* return codes:
* n - number of characters returned
*
* return codes:
* n - number of characters returned
@@
-354,8
+349,8
@@
cgalarm()
pkcget(fn, b, n)
int fn;
pkcget(fn, b, n)
int fn;
-register int n;
register char *b;
register char *b;
+register int n;
{
register int ret;
extern int linebaudrate;
{
register int ret;
extern int linebaudrate;
@@
-371,12
+366,15
@@
register char *b;
if (setjmp(Getjbuf)) {
Ntimeout++;
if (setjmp(Getjbuf)) {
Ntimeout++;
+ pktimeout += 2;
+ if (pktimeout > MAXPKTIME)
+ pktimeout = MAXPKTIME;
DEBUG(4, "pkcget: alarm %d\n", Ntimeout);
return FAIL;
}
signal(SIGALRM, cgalarm);
DEBUG(4, "pkcget: alarm %d\n", Ntimeout);
return FAIL;
}
signal(SIGALRM, cgalarm);
- alarm(
PKTIME
);
+ alarm(
pktimeout
);
while (n > 0) {
#ifdef BSD4_2
if (linebaudrate > 0) {
while (n > 0) {
#ifdef BSD4_2
if (linebaudrate > 0) {