mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-31 01:28:55 +00:00
add CachedResponse variant to Response
This commit is contained in:
@@ -32,6 +32,8 @@ const CookieJar = @import("webapi/storage/Cookie.zig").Jar;
|
|||||||
const http = @import("../network/http.zig");
|
const http = @import("../network/http.zig");
|
||||||
const Runtime = @import("../network/Runtime.zig");
|
const Runtime = @import("../network/Runtime.zig");
|
||||||
const Robots = @import("../network/Robots.zig");
|
const Robots = @import("../network/Robots.zig");
|
||||||
|
const Cache = @import("../network/cache/Cache.zig");
|
||||||
|
const CachedResponse = Cache.CachedResponse;
|
||||||
|
|
||||||
const IS_DEBUG = builtin.mode == .Debug;
|
const IS_DEBUG = builtin.mode == .Debug;
|
||||||
|
|
||||||
@@ -1006,57 +1008,67 @@ pub const Response = struct {
|
|||||||
ctx: *anyopaque,
|
ctx: *anyopaque,
|
||||||
inner: union(enum) {
|
inner: union(enum) {
|
||||||
transfer: *Transfer,
|
transfer: *Transfer,
|
||||||
|
cached: *const CachedResponse,
|
||||||
},
|
},
|
||||||
|
|
||||||
pub fn fromTransfer(transfer: *Transfer) Response {
|
pub fn fromTransfer(transfer: *Transfer) Response {
|
||||||
return .{ .ctx = transfer.req.ctx, .inner = .{ .transfer = transfer } };
|
return .{ .ctx = transfer.req.ctx, .inner = .{ .transfer = transfer } };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn fromCached(ctx: *anyopaque, resp: *const CachedResponse) Response {
|
||||||
|
return .{ .ctx = ctx, .inner = .{ .cached = resp } };
|
||||||
|
}
|
||||||
|
|
||||||
pub fn status(self: Response) ?u16 {
|
pub fn status(self: Response) ?u16 {
|
||||||
return switch (self.inner) {
|
return switch (self.inner) {
|
||||||
.transfer => |t| if (t.response_header) |rh| rh.status else null,
|
.transfer => |t| if (t.response_header) |rh| rh.status else null,
|
||||||
|
.cached => |c| c.metadata.status,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn contentType(self: Response) ?[]const u8 {
|
pub fn contentType(self: Response) ?[]const u8 {
|
||||||
return switch (self.inner) {
|
return switch (self.inner) {
|
||||||
.transfer => |t| if (t.response_header) |*rh| rh.contentType() else null,
|
.transfer => |t| if (t.response_header) |*rh| rh.contentType() else null,
|
||||||
|
.cached => |c| c.metadata.content_type,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn contentLength(self: Response) ?u32 {
|
pub fn contentLength(self: Response) ?u32 {
|
||||||
return switch (self.inner) {
|
return switch (self.inner) {
|
||||||
.transfer => |t| t.getContentLength(),
|
.transfer => |t| t.getContentLength(),
|
||||||
|
.cached => |c| switch (c.data) {
|
||||||
|
.buffer => |buf| @intCast(buf.len),
|
||||||
|
.file => |f| @intCast(f.getEndPos() catch 0),
|
||||||
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn redirectCount(self: Response) ?u32 {
|
pub fn redirectCount(self: Response) ?u32 {
|
||||||
return switch (self.inner) {
|
return switch (self.inner) {
|
||||||
.transfer => |t| if (t.response_header) |rh| rh.redirect_count else null,
|
.transfer => |t| if (t.response_header) |rh| rh.redirect_count else null,
|
||||||
|
.cached => 0,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn url(self: Response) [:0]const u8 {
|
pub fn url(self: Response) [:0]const u8 {
|
||||||
return switch (self.inner) {
|
return switch (self.inner) {
|
||||||
.transfer => |t| t.url,
|
.transfer => |t| t.url,
|
||||||
|
.cached => |c| c.metadata.url,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn headerIterator(self: Response) HeaderIterator {
|
pub fn headerIterator(self: Response) HeaderIterator {
|
||||||
return switch (self.inner) {
|
return switch (self.inner) {
|
||||||
.live => |live| live.responseHeaderIterator(),
|
.transfer => |t| t.responseHeaderIterator(),
|
||||||
|
// TODO: Cache HTTP Headers
|
||||||
|
.cached => unreachable,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn abort(self: Response, err: anyerror) void {
|
pub fn abort(self: Response, err: anyerror) void {
|
||||||
switch (self.inner) {
|
switch (self.inner) {
|
||||||
.transfer => |t| t.abort(err),
|
.transfer => |t| t.abort(err),
|
||||||
}
|
.cached => {},
|
||||||
}
|
|
||||||
|
|
||||||
pub fn terminate(self: Response) void {
|
|
||||||
switch (self.inner) {
|
|
||||||
.transfer => |t| t.terminate(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -753,6 +753,7 @@ pub const Script = struct {
|
|||||||
self.debug_transfer_auth_challenge = transfer._auth_challenge != null;
|
self.debug_transfer_auth_challenge = transfer._auth_challenge != null;
|
||||||
self.debug_transfer_easy_id = if (transfer._conn) |c| @intFromPtr(c._easy) else 0;
|
self.debug_transfer_easy_id = if (transfer._conn) |c| @intFromPtr(c._easy) else 0;
|
||||||
},
|
},
|
||||||
|
else => {},
|
||||||
}
|
}
|
||||||
|
|
||||||
lp.assert(self.source.remote.capacity == 0, "ScriptManager.Header buffer", .{ .capacity = self.source.remote.capacity });
|
lp.assert(self.source.remote.capacity == 0, "ScriptManager.Header buffer", .{ .capacity = self.source.remote.capacity });
|
||||||
|
|||||||
Reference in New Issue
Block a user