*/
unsigned int net_read_desired : 1;
unsigned int net_write_desired : 1;
+
+ /*
+ * Are the read and write poll descriptors we are currently configured with
+ * things we can actually poll?
+ */
+ unsigned int can_poll_r : 1;
+ unsigned int can_poll_w : 1;
} QUIC_REACTOR;
void ossl_quic_reactor_init(QUIC_REACTOR *rtor,
void ossl_quic_reactor_set_poll_w(QUIC_REACTOR *rtor,
const BIO_POLL_DESCRIPTOR *w);
-const BIO_POLL_DESCRIPTOR *ossl_quic_reactor_get_poll_r(QUIC_REACTOR *rtor);
+const BIO_POLL_DESCRIPTOR *ossl_quic_reactor_get_poll_r(const QUIC_REACTOR *rtor);
+const BIO_POLL_DESCRIPTOR *ossl_quic_reactor_get_poll_w(const QUIC_REACTOR *rtor);
-const BIO_POLL_DESCRIPTOR *ossl_quic_reactor_get_poll_w(QUIC_REACTOR *rtor);
+int ossl_quic_reactor_can_poll_r(const QUIC_REACTOR *rtor);
+int ossl_quic_reactor_can_poll_w(const QUIC_REACTOR *rtor);
-int ossl_quic_reactor_net_read_desired(QUIC_REACTOR *rtor);
+int ossl_quic_reactor_can_support_poll_descriptor(const QUIC_REACTOR *rtor,
+ const BIO_POLL_DESCRIPTOR *d);
+int ossl_quic_reactor_net_read_desired(QUIC_REACTOR *rtor);
int ossl_quic_reactor_net_write_desired(QUIC_REACTOR *rtor);
OSSL_TIME ossl_quic_reactor_get_tick_deadline(QUIC_REACTOR *rtor);
rtor->poll_w.type = BIO_POLL_DESCRIPTOR_TYPE_NONE;
rtor->net_read_desired = 0;
rtor->net_write_desired = 0;
+ rtor->can_poll_r = 0;
+ rtor->can_poll_w = 0;
rtor->tick_deadline = initial_tick_deadline;
rtor->tick_cb = tick_cb;
void ossl_quic_reactor_set_poll_r(QUIC_REACTOR *rtor, const BIO_POLL_DESCRIPTOR *r)
{
- rtor->poll_r = *r;
+ if (r == NULL)
+ rtor->poll_r.type = BIO_POLL_DESCRIPTOR_TYPE_NONE;
+ else
+ rtor->poll_r = *r;
+
+ rtor->can_poll_r
+ = ossl_quic_reactor_can_support_poll_descriptor(rtor, &rtor->poll_r);
}
void ossl_quic_reactor_set_poll_w(QUIC_REACTOR *rtor, const BIO_POLL_DESCRIPTOR *w)
{
- rtor->poll_w = *w;
+ if (w == NULL)
+ rtor->poll_w.type = BIO_POLL_DESCRIPTOR_TYPE_NONE;
+ else
+ rtor->poll_w = *w;
+
+ rtor->can_poll_w
+ = ossl_quic_reactor_can_support_poll_descriptor(rtor, &rtor->poll_w);
}
-const BIO_POLL_DESCRIPTOR *ossl_quic_reactor_get_poll_r(QUIC_REACTOR *rtor)
+const BIO_POLL_DESCRIPTOR *ossl_quic_reactor_get_poll_r(const QUIC_REACTOR *rtor)
{
return &rtor->poll_r;
}
-const BIO_POLL_DESCRIPTOR *ossl_quic_reactor_get_poll_w(QUIC_REACTOR *rtor)
+const BIO_POLL_DESCRIPTOR *ossl_quic_reactor_get_poll_w(const QUIC_REACTOR *rtor)
{
return &rtor->poll_w;
}
+int ossl_quic_reactor_can_support_poll_descriptor(const QUIC_REACTOR *rtor,
+ const BIO_POLL_DESCRIPTOR *d)
+{
+ return d->type == BIO_POLL_DESCRIPTOR_TYPE_SOCK_FD;
+}
+
+int ossl_quic_reactor_can_poll_r(const QUIC_REACTOR *rtor)
+{
+ return rtor->can_poll_r;
+}
+
+int ossl_quic_reactor_can_poll_w(const QUIC_REACTOR *rtor)
+{
+ return rtor->can_poll_w;
+}
+
int ossl_quic_reactor_net_read_desired(QUIC_REACTOR *rtor)
{
return rtor->net_read_desired;