diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-04-04 19:01:57 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2017-04-04 19:01:57 +0200 |
commit | 249ff9a24c5119efa545fe045e99094068ec59f3 (patch) | |
tree | ee04f3e9df84119c067879d4ee69ad422ceac274 /sys/src/libsec | |
parent | de80075fc6bdc6dc785a67db2deaa59df020cfa6 (diff) |
tlshand: simplify tlsReadN()
Diffstat (limited to 'sys/src/libsec')
-rw-r--r-- | sys/src/libsec/port/tlshand.c | 29 |
1 files changed, 8 insertions, 21 deletions
diff --git a/sys/src/libsec/port/tlshand.c b/sys/src/libsec/port/tlshand.c index dfa1837d8..23d61af22 100644 --- a/sys/src/libsec/port/tlshand.c +++ b/sys/src/libsec/port/tlshand.c @@ -99,7 +99,7 @@ typedef struct TlsConnection{ HandshakeHash handhash; Finished finished; - uchar *sendp, *recvp, *recvw; + uchar *sendp; uchar buf[1<<16]; } TlsConnection; @@ -691,7 +691,6 @@ tlsServer2(int ctl, int hand, c->trace = trace; c->version = ProtocolVersion; c->sendp = c->buf; - c->recvp = c->recvw = &c->buf[sizeof(c->buf)]; memset(&m, 0, sizeof(m)); if(!msgRecv(c, &m)){ @@ -996,7 +995,6 @@ tlsClient2(int ctl, int hand, c->trace = trace; c->cert = nil; c->sendp = c->buf; - c->recvp = c->recvw = &c->buf[sizeof(c->buf)]; c->version = ProtocolVersion; tlsSecInitc(c->sec, c->version); @@ -1264,7 +1262,7 @@ msgSend(TlsConnection *c, Msg *m, int act) int n, i; p = c->sendp; - e = c->recvp; + e = &c->buf[sizeof(c->buf)]; if(c->trace) c->trace("send %s", msgPrint((char*)p, e - p, m)); @@ -1440,28 +1438,17 @@ Err: static uchar* tlsReadN(TlsConnection *c, int n) { - uchar *p, *e; + uchar *p, *w, *e; - p = c->recvp; - if(n <= c->recvw - p){ - c->recvp += n; - return p; - } e = &c->buf[sizeof(c->buf)]; - c->recvp = e - n; - if(c->recvp < c->sendp || n > sizeof(c->buf)){ + p = e - n; + if(n > sizeof(c->buf) || p < c->sendp){ tlsError(c, EDecodeError, "handshake message too long %d", n); return nil; } - memmove(c->recvp, p, c->recvw - p); - c->recvw -= p - c->recvp; - p = c->recvp; - c->recvp += n; - while(c->recvw < c->recvp){ - if((n = read(c->hand, c->recvw, e - c->recvw)) <= 0) + for(w = p; w < e; w += n) + if((n = read(c->hand, w, e - w)) <= 0) return nil; - c->recvw += n; - } return p; } @@ -1804,7 +1791,7 @@ msgRecv(TlsConnection *c, Msg *m) goto Short; Ok: if(c->trace) - c->trace("recv %s", msgPrint((char*)c->sendp, c->recvp - c->sendp, m)); + c->trace("recv %s", msgPrint((char*)c->sendp, &c->buf[sizeof(c->buf)] - c->sendp, m)); return 1; Short: tlsError(c, EDecodeError, "handshake message (%d) has invalid length", type); |