Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
U
unique-xids
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
uplex-varnish
unique-xids
Commits
702f6401
Commit
702f6401
authored
Mar 24, 2011
by
Poul-Henning Kamp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Leave generation of chunked headers to WRW code
parent
6e68c081
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
33 additions
and
66 deletions
+33
-66
cache_esi_deliver.c
bin/varnishd/cache_esi_deliver.c
+26
-48
cache_pool.c
bin/varnishd/cache_pool.c
+1
-0
cache_response.c
bin/varnishd/cache_response.c
+6
-18
No files found.
bin/varnishd/cache_esi_deliver.c
View file @
702f6401
...
...
@@ -120,6 +120,8 @@ ved_include(struct sess *sp, const char *src, const char *host)
WS_Reset
(
sp
->
ws
,
ws_wm
);
WRW_Reserve
(
sp
->
wrk
,
&
sp
->
fd
);
if
(
sp
->
wrk
->
res_mode
&
RES_CHUNKED
)
WRW_Chunked
(
sp
->
wrk
);
}
/*--------------------------------------------------------------------*/
...
...
@@ -128,28 +130,6 @@ ved_include(struct sess *sp, const char *src, const char *host)
//#define Debug(fmt, ...) printf(fmt, __VA_ARGS__)
#define Debug(fmt, ...)
/**/
static
void
ved_sendchunk
(
const
struct
sess
*
sp
,
const
void
*
cb
,
ssize_t
cl
,
const
void
*
ptr
,
ssize_t
l
)
{
char
chunk
[
20
];
assert
(
l
>
0
);
if
(
sp
->
wrk
->
res_mode
&
RES_CHUNKED
)
{
if
(
cb
==
NULL
)
{
bprintf
(
chunk
,
"%jx
\r\n
"
,
(
intmax_t
)
l
);
(
void
)
WRW_Write
(
sp
->
wrk
,
chunk
,
-
1
);
}
else
(
void
)
WRW_Write
(
sp
->
wrk
,
cb
,
cl
);
}
(
void
)
WRW_Write
(
sp
->
wrk
,
ptr
,
l
);
if
(
sp
->
wrk
->
res_mode
&
RES_CHUNKED
)
{
(
void
)
WRW_Write
(
sp
->
wrk
,
"
\r\n
"
,
-
1
);
if
(
cb
==
NULL
)
(
void
)
WRW_Flush
(
sp
->
wrk
);
}
}
static
ssize_t
ved_decode_len
(
uint8_t
**
pp
)
{
...
...
@@ -200,32 +180,32 @@ ved_decode_len(uint8_t **pp)
static
void
ved_pretend_gzip
(
const
struct
sess
*
sp
,
const
uint8_t
*
p
,
ssize_t
l
)
{
uint8_t
buf
[
5
];
char
chunk
[
20
];
uint8_t
buf1
[
5
],
buf2
[
5
];
uint16_t
lx
;
lx
=
65535
;
buf1
[
0
]
=
0
;
vle16enc
(
buf1
+
1
,
lx
);
vle16enc
(
buf1
+
3
,
~
lx
);
while
(
l
>
0
)
{
if
(
l
>
65535
)
if
(
l
>
=
65535
)
{
lx
=
65535
;
else
(
void
)
WRW_Write
(
sp
->
wrk
,
buf1
,
sizeof
buf1
);
}
else
{
lx
=
(
uint16_t
)
l
;
buf
[
0
]
=
0
;
vle16enc
(
buf
+
1
,
lx
);
vle16enc
(
buf
+
3
,
~
lx
);
if
(
sp
->
wrk
->
res_mode
&
RES_CHUNKED
)
{
bprintf
(
chunk
,
"%x
\r\n
"
,
lx
+
5
);
(
void
)
WRW_Write
(
sp
->
wrk
,
chunk
,
-
1
);
buf2
[
0
]
=
0
;
vle16enc
(
buf2
+
1
,
lx
);
vle16enc
(
buf2
+
3
,
~
lx
);
(
void
)
WRW_Write
(
sp
->
wrk
,
buf2
,
sizeof
buf2
);
}
(
void
)
WRW_Write
(
sp
->
wrk
,
buf
,
sizeof
buf
);
(
void
)
WRW_Write
(
sp
->
wrk
,
p
,
lx
);
if
(
sp
->
wrk
->
res_mode
&
RES_CHUNKED
)
(
void
)
WRW_Write
(
sp
->
wrk
,
"
\r\n
"
,
-
1
);
(
void
)
WRW_Flush
(
sp
->
wrk
);
sp
->
wrk
->
crc
=
crc32
(
sp
->
wrk
->
crc
,
p
,
lx
);
sp
->
wrk
->
l_crc
+=
lx
;
l
-=
lx
;
p
+=
lx
;
}
(
void
)
WRW_Flush
(
sp
->
wrk
);
}
/*---------------------------------------------------------------------
...
...
@@ -280,7 +260,7 @@ ESI_Deliver(struct sess *sp)
if
(
isgzip
&&
!
(
sp
->
wrk
->
res_mode
&
RES_GUNZIP
))
{
assert
(
sizeof
gzip_hdr
==
10
);
/* Send out the gzip header */
ved_sendchunk
(
sp
,
"a
\r\n
"
,
3
,
gzip_hdr
,
10
);
WRW_Write
(
sp
->
wrk
,
gzip_hdr
,
10
);
sp
->
wrk
->
l_crc
=
0
;
sp
->
wrk
->
gzip_resp
=
1
;
sp
->
wrk
->
crc
=
crc32
(
0L
,
Z_NULL
,
0
);
...
...
@@ -328,7 +308,7 @@ ESI_Deliver(struct sess *sp)
sp
->
wrk
->
crc
=
crc32_combine
(
sp
->
wrk
->
crc
,
icrc
,
l_icrc
);
sp
->
wrk
->
l_crc
+=
l_icrc
;
ved_sendchunk
(
sp
,
r
,
q
-
r
,
st
->
ptr
+
off
,
l
);
WRW_Write
(
sp
->
wrk
,
st
->
ptr
+
off
,
l
);
}
else
if
(
sp
->
wrk
->
gzip_resp
)
{
/*
* A gzip'ed ESI response, but the VEC was
...
...
@@ -344,8 +324,7 @@ ESI_Deliver(struct sess *sp)
VGZ_Ibuf
(
vgz
,
st
->
ptr
+
off
,
l
);
do
{
if
(
obufl
==
sizeof
obuf
)
{
ved_sendchunk
(
sp
,
NULL
,
0
,
obuf
,
obufl
);
WRW_Write
(
sp
->
wrk
,
obuf
,
obufl
);
obufl
=
0
;
}
VGZ_Obuf
(
vgz
,
obuf
+
obufl
,
...
...
@@ -358,7 +337,7 @@ ESI_Deliver(struct sess *sp)
/*
* Ungzip'ed VEC, ungzip'ed ESI response
*/
ved_sendchunk
(
sp
,
r
,
q
-
r
,
st
->
ptr
+
off
,
l
);
WRW_Write
(
sp
->
wrk
,
st
->
ptr
+
off
,
l
);
}
off
+=
l
;
break
;
...
...
@@ -377,8 +356,7 @@ ESI_Deliver(struct sess *sp)
r
=
(
void
*
)
strchr
((
const
char
*
)
q
,
'\0'
);
AN
(
r
);
if
(
obufl
>
0
)
{
ved_sendchunk
(
sp
,
NULL
,
0
,
obuf
,
obufl
);
WRW_Write
(
sp
->
wrk
,
obuf
,
obufl
);
obufl
=
0
;
}
Debug
(
"INCL [%s][%s] BEGIN
\n
"
,
q
,
p
);
...
...
@@ -393,7 +371,7 @@ ESI_Deliver(struct sess *sp)
}
if
(
vgz
!=
NULL
)
{
if
(
obufl
>
0
)
ved_sendchunk
(
sp
,
NULL
,
0
,
obuf
,
obufl
);
WRW_Write
(
sp
->
wrk
,
obuf
,
obufl
);
VGZ_Destroy
(
&
vgz
);
}
if
(
sp
->
wrk
->
gzip_resp
&&
sp
->
esi_level
==
0
)
{
...
...
@@ -410,7 +388,7 @@ ESI_Deliver(struct sess *sp)
/* MOD(2^32) length */
vle32enc
(
tailbuf
+
9
,
sp
->
wrk
->
l_crc
);
ved_sendchunk
(
sp
,
"d
\r\n
"
,
3
,
tailbuf
,
13
);
WRW_Write
(
sp
->
wrk
,
tailbuf
,
13
);
}
(
void
)
WRW_Flush
(
sp
->
wrk
);
}
...
...
@@ -450,7 +428,7 @@ ved_deliver_byterange(const struct sess *sp, ssize_t low, ssize_t high)
//printf("[2-] %jd %jd\n", lx, lx + l);
assert
(
lx
>=
low
&&
lx
+
l
<=
high
);
if
(
l
!=
0
)
ved_sendchunk
(
sp
,
NULL
,
0
,
p
,
l
);
WRW_Write
(
sp
->
wrk
,
p
,
l
);
if
(
lx
+
st
->
len
>
high
)
return
(
p
[
l
]);
lx
+=
st
->
len
;
...
...
@@ -502,7 +480,7 @@ ESI_DeliverChild(const struct sess *sp)
*/
*
dbits
=
ved_deliver_byterange
(
sp
,
start
/
8
,
last
/
8
);
*
dbits
&=
~
(
1U
<<
(
last
&
7
));
ved_sendchunk
(
sp
,
NULL
,
0
,
dbits
,
1
);
WRW_Write
(
sp
->
wrk
,
dbits
,
1
);
cc
=
ved_deliver_byterange
(
sp
,
1
+
last
/
8
,
stop
/
8
);
switch
((
int
)(
stop
&
7
))
{
case
0
:
/* xxxxxxxx */
...
...
@@ -546,7 +524,7 @@ ESI_DeliverChild(const struct sess *sp)
INCOMPL
();
}
if
(
lpad
>
0
)
ved_sendchunk
(
sp
,
NULL
,
0
,
dbits
+
1
,
lpad
);
WRW_Write
(
sp
->
wrk
,
dbits
+
1
,
lpad
);
st
=
VTAILQ_LAST
(
&
sp
->
obj
->
store
,
storagehead
);
assert
(
st
->
len
>
8
);
...
...
bin/varnishd/cache_pool.c
View file @
702f6401
...
...
@@ -145,6 +145,7 @@ wrk_thread_real(struct wq *qp, unsigned shm_workspace, unsigned sess_workspace,
w
->
resp
=
HTTP_create
(
http2
,
nhttp
);
w
->
wrw
.
iov
=
iov
;
w
->
wrw
.
siov
=
siov
;
w
->
wrw
.
ciov
=
siov
;
AZ
(
pthread_cond_init
(
&
w
->
cond
,
NULL
));
WS_Init
(
w
->
ws
,
"wrk"
,
ws
,
sess_workspace
);
...
...
bin/varnishd/cache_response.c
View file @
702f6401
...
...
@@ -246,7 +246,6 @@ res_WriteGunzipObj(struct sess *sp)
unsigned
u
=
0
;
struct
vgz
*
vg
;
const
void
*
dp
;
char
lenbuf
[
20
];
char
obuf
[
params
->
gzip_stack_buffer
];
size_t
dl
;
int
i
;
...
...
@@ -268,13 +267,7 @@ res_WriteGunzipObj(struct sess *sp)
VGZ_Obuf
(
vg
,
obuf
,
sizeof
obuf
);
i
=
VGZ_Gunzip
(
vg
,
&
dp
,
&
dl
);
if
(
dl
!=
0
)
{
if
(
sp
->
wrk
->
res_mode
&
RES_CHUNKED
)
{
bprintf
(
lenbuf
,
"%x
\r\n
"
,
(
unsigned
)
dl
);
(
void
)
WRW_Write
(
sp
->
wrk
,
lenbuf
,
-
1
);
}
(
void
)
WRW_Write
(
sp
->
wrk
,
dp
,
dl
);
if
(
sp
->
wrk
->
res_mode
&
RES_CHUNKED
)
(
void
)
WRW_Write
(
sp
->
wrk
,
"
\r\n
"
,
-
1
);
if
(
WRW_Flush
(
sp
->
wrk
))
break
;
}
...
...
@@ -288,7 +281,7 @@ res_WriteGunzipObj(struct sess *sp)
/*--------------------------------------------------------------------*/
static
void
res_WriteDirObj
(
struct
sess
*
sp
,
char
*
lenbuf
,
size_t
low
,
size_t
high
)
res_WriteDirObj
(
struct
sess
*
sp
,
size_t
low
,
size_t
high
)
{
unsigned
u
=
0
;
size_t
ptr
,
off
,
len
;
...
...
@@ -296,11 +289,6 @@ res_WriteDirObj(struct sess *sp, char *lenbuf, size_t low, size_t high)
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
if
(
sp
->
wrk
->
res_mode
&
RES_CHUNKED
)
{
sprintf
(
lenbuf
,
"%jx
\r\n
"
,
(
intmax_t
)
sp
->
obj
->
len
);
(
void
)
WRW_Write
(
sp
->
wrk
,
lenbuf
,
-
1
);
}
ptr
=
0
;
VTAILQ_FOREACH
(
st
,
&
sp
->
obj
->
store
,
list
)
{
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
...
...
@@ -344,8 +332,6 @@ res_WriteDirObj(struct sess *sp, char *lenbuf, size_t low, size_t high)
(
void
)
WRW_Write
(
sp
->
wrk
,
st
->
ptr
+
off
,
len
);
}
assert
(
u
==
sp
->
obj
->
len
);
if
(
sp
->
wrk
->
res_mode
&
RES_CHUNKED
)
(
void
)
WRW_Write
(
sp
->
wrk
,
"
\r\n
"
,
-
1
);
}
/*--------------------------------------------------------------------*/
...
...
@@ -355,7 +341,6 @@ RES_WriteObj(struct sess *sp)
{
char
*
r
;
unsigned
low
,
high
;
char
lenbuf
[
20
];
CHECK_OBJ_NOTNULL
(
sp
,
SESS_MAGIC
);
...
...
@@ -384,6 +369,9 @@ RES_WriteObj(struct sess *sp)
sp
->
acct_tmp
.
hdrbytes
+=
http_Write
(
sp
->
wrk
,
sp
->
wrk
->
resp
,
1
);
if
(
sp
->
wrk
->
res_mode
&
RES_CHUNKED
)
WRW_Chunked
(
sp
->
wrk
);
if
(
!
sp
->
wantbody
)
{
/* This was a HEAD request */
}
else
if
(
sp
->
obj
->
len
==
0
)
{
...
...
@@ -395,12 +383,12 @@ RES_WriteObj(struct sess *sp)
}
else
if
(
sp
->
wrk
->
res_mode
&
RES_GUNZIP
)
{
res_WriteGunzipObj
(
sp
);
}
else
{
res_WriteDirObj
(
sp
,
l
enbuf
,
l
ow
,
high
);
res_WriteDirObj
(
sp
,
low
,
high
);
}
if
(
sp
->
wrk
->
res_mode
&
RES_CHUNKED
&&
!
(
sp
->
wrk
->
res_mode
&
RES_ESI_CHILD
))
(
void
)
WRW_Write
(
sp
->
wrk
,
"0
\r\n\r\n
"
,
-
1
);
WRW_EndChunk
(
sp
->
wrk
);
if
(
WRW_FlushRelease
(
sp
->
wrk
))
vca_close_session
(
sp
,
"remote closed"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment