[master] 7a834f4 Have frame-rx functions return an error
Poul-Henning Kamp
phk at FreeBSD.org
Fri Feb 17 12:36:05 CET 2017
commit 7a834f42c4c350d1806b893b70ca4e6a8d255ed2
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Fri Feb 17 08:10:04 2017 +0000
Have frame-rx functions return an error
diff --git a/bin/varnishd/http2/cache_http2.h b/bin/varnishd/http2/cache_http2.h
index 453f3d3..dafcfdc 100644
--- a/bin/varnishd/http2/cache_http2.h
+++ b/bin/varnishd/http2/cache_http2.h
@@ -153,7 +153,7 @@ int H2_Send_Frame(struct worker *, const struct h2_sess *,
int H2_Send(struct worker *, struct h2_req *, int flush,
enum h2_frame_e type, uint8_t flags, uint32_t len, const void *);
-typedef void h2_frame_f(struct worker *, struct h2_sess *,
+typedef h2_error h2_frame_f(struct worker *, struct h2_sess *,
struct h2_req *);
#define H2_FRAME(l,u,t,f) h2_frame_f h2_rx_##l ;
#include "tbl/h2_frames.h"
diff --git a/bin/varnishd/http2/cache_http2_proto.c b/bin/varnishd/http2/cache_http2_proto.c
index 625dade..40ff6ad 100644
--- a/bin/varnishd/http2/cache_http2_proto.c
+++ b/bin/varnishd/http2/cache_http2_proto.c
@@ -104,7 +104,7 @@ static const uint8_t H2_settings[] = {
/**********************************************************************/
#define DUMMY_FRAME(l) \
- void \
+ h2_error __match_proto__(h2_frame_f) \
h2_rx_##l(struct worker *wrk, struct h2_sess *h2, struct h2_req *r2) \
__match_proto__(h2_frame_f) \
{ (void)wrk; (void)r2; VSLb(h2->vsl, SLT_Debug, "XXX implement " #l); INCOMPL(); }
@@ -296,7 +296,7 @@ h2_vsl_frame(const struct h2_sess *h2, const void *ptr, size_t len)
/**********************************************************************
*/
-void __match_proto__(h2_frame_f)
+h2_error __match_proto__(h2_frame_f)
h2_rx_ping(struct worker *wrk, struct h2_sess *h2, struct h2_req *r2)
{
(void)r2;
@@ -305,12 +305,13 @@ h2_rx_ping(struct worker *wrk, struct h2_sess *h2, struct h2_req *r2)
xxxassert(h2->rxf_stream == 0);
H2_Send_Frame(wrk, h2,
H2_FRAME_PING, H2FF_PING_ACK, 8, 0, h2->rxf_data);
+ return (0);
}
/**********************************************************************
*/
-void __match_proto__(h2_frame_f)
+h2_error __match_proto__(h2_frame_f)
h2_rx_goaway(struct worker *wrk, struct h2_sess *h2, struct h2_req *r2)
{
uint32_t error;
@@ -321,9 +322,10 @@ h2_rx_goaway(struct worker *wrk, struct h2_sess *h2, struct h2_req *r2)
error = vbe32dec(h2->rxf_data + 4);
/*XXX*/(void)error;
h2->go_away = 1;
+ return (0);
}
-void __match_proto__(h2_frame_f)
+h2_error __match_proto__(h2_frame_f)
h2_rx_window_update(struct worker *wrk, struct h2_sess *h2, struct h2_req *r2)
{
uint32_t wu;
@@ -335,26 +337,28 @@ h2_rx_window_update(struct worker *wrk, struct h2_sess *h2, struct h2_req *r2)
xxxassert(wu != 0); // stream PROTOCOL_ERROR
r2->window += wu;
xxxassert(r2->window < (1LLU<<32)); // FLOW_CONTROL_ERROR
+ return (0);
}
/**********************************************************************
* Incoming PRIORITY, possibly an ACK of one we sent.
*/
-void __match_proto__(h2_frame_f)
+h2_error __match_proto__(h2_frame_f)
h2_rx_priority(struct worker *wrk, struct h2_sess *h2, struct h2_req *r2)
{
(void)wrk;
(void)h2;
xxxassert(r2->stream & 1);
+ return (0);
}
/**********************************************************************
* Incoming SETTINGS, possibly an ACK of one we sent.
*/
-void __match_proto__(h2_frame_f)
+h2_error __match_proto__(h2_frame_f)
h2_rx_settings(struct worker *wrk, struct h2_sess *h2, struct h2_req *r2)
{
const uint8_t *p = h2->rxf_data;
@@ -376,6 +380,7 @@ h2_rx_settings(struct worker *wrk, struct h2_sess *h2, struct h2_req *r2)
} else {
WRONG("SETTINGS FRAME");
}
+ return (0);
}
/**********************************************************************
@@ -397,7 +402,7 @@ h2_do_req(struct worker *wrk, void *priv)
h2_del_req(wrk, r2, H2SE_NO_ERROR);
}
-void __match_proto__(h2_frame_f)
+h2_error __match_proto__(h2_frame_f)
h2_rx_headers(struct worker *wrk, struct h2_sess *h2, struct h2_req *r2)
{
struct req *req;
@@ -459,6 +464,7 @@ h2_rx_headers(struct worker *wrk, struct h2_sess *h2, struct h2_req *r2)
req->task.func = h2_do_req;
req->task.priv = req;
XXXAZ(Pool_Task(wrk->pool, &req->task, TASK_QUEUE_REQ));
+ return (0);
}
/**********************************************************************/
@@ -548,7 +554,7 @@ h2_rxframe(struct worker *wrk, struct h2_sess *h2)
#define H2_FRAME(l,u,t,f) \
case H2F_##u: \
if (!(h2->rxf_flags & ~f)) { \
- h2_rx_##l(wrk, h2, r2); \
+ (void)h2_rx_##l(wrk, h2, r2); \
} else { \
VSLb(h2->vsl, SLT_Debug, \
"H2: Bad flags 0x%02x on " #u, \
More information about the varnish-commit
mailing list