Mercurial > hg > nginx-quic
comparison src/event/ngx_event_quic.c @ 7745:5f223cdad40e quic
Implemented eof in QUIC streams.
author | Roman Arutyunyan <arut@nginx.com> |
---|---|
date | Tue, 24 Mar 2020 13:49:42 +0300 |
parents | 146687b1ab43 |
children | b364af7f9f3f |
comparison
equal
deleted
inserted
replaced
7744:146687b1ab43 | 7745:5f223cdad40e |
---|---|
1077 b->last = ngx_cpymem(b->last, f->data, f->length); | 1077 b->last = ngx_cpymem(b->last, f->data, f->length); |
1078 | 1078 |
1079 rev = sn->c->read; | 1079 rev = sn->c->read; |
1080 rev->ready = 1; | 1080 rev->ready = 1; |
1081 | 1081 |
1082 if (f->fin) { | |
1083 rev->pending_eof = 1; | |
1084 } | |
1085 | |
1082 if (rev->active) { | 1086 if (rev->active) { |
1083 rev->handler(rev); | 1087 rev->handler(rev); |
1084 } | 1088 } |
1085 | 1089 |
1086 return NGX_OK; | 1090 return NGX_OK; |
1544 static ssize_t | 1548 static ssize_t |
1545 ngx_quic_stream_recv(ngx_connection_t *c, u_char *buf, size_t size) | 1549 ngx_quic_stream_recv(ngx_connection_t *c, u_char *buf, size_t size) |
1546 { | 1550 { |
1547 ssize_t len; | 1551 ssize_t len; |
1548 ngx_buf_t *b; | 1552 ngx_buf_t *b; |
1553 ngx_event_t *rev; | |
1549 ngx_quic_stream_t *qs; | 1554 ngx_quic_stream_t *qs; |
1550 ngx_quic_connection_t *qc; | 1555 ngx_quic_connection_t *qc; |
1551 ngx_quic_stream_node_t *sn; | 1556 ngx_quic_stream_node_t *sn; |
1552 | 1557 |
1553 qs = c->qs; | 1558 qs = c->qs; |
1558 | 1563 |
1559 if (sn == NULL) { | 1564 if (sn == NULL) { |
1560 return NGX_ERROR; | 1565 return NGX_ERROR; |
1561 } | 1566 } |
1562 | 1567 |
1563 // XXX: how to return EOF? | 1568 rev = c->read; |
1564 | 1569 |
1565 b = sn->b; | 1570 b = sn->b; |
1566 | 1571 |
1572 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0, | |
1573 "quic recv: eof:%d, avail:%z", | |
1574 rev->pending_eof, b->last - b->pos); | |
1575 | |
1567 if (b->pos == b->last) { | 1576 if (b->pos == b->last) { |
1568 c->read->ready = 0; | 1577 rev->ready = 0; |
1578 | |
1579 if (rev->pending_eof) { | |
1580 rev->eof = 1; | |
1581 return 0; | |
1582 } | |
1583 | |
1569 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0, "quic recv() not ready"); | 1584 ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, 0, "quic recv() not ready"); |
1570 return NGX_AGAIN; | 1585 return NGX_AGAIN; |
1571 } | 1586 } |
1572 | 1587 |
1573 len = ngx_min(b->last - b->pos, (ssize_t) size); | 1588 len = ngx_min(b->last - b->pos, (ssize_t) size); |
1577 b->pos += len; | 1592 b->pos += len; |
1578 | 1593 |
1579 if (b->pos == b->last) { | 1594 if (b->pos == b->last) { |
1580 b->pos = b->start; | 1595 b->pos = b->start; |
1581 b->last = b->start; | 1596 b->last = b->start; |
1597 rev->ready = 0; | |
1582 } | 1598 } |
1583 | 1599 |
1584 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0, | 1600 ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0, |
1585 "quic recv: %z of %uz", len, size); | 1601 "quic recv: %z of %uz", len, size); |
1586 | 1602 |
1587 return len; | 1603 return len; |
1588 } | 1604 } |
1589 | 1605 |
1590 | 1606 |