╭─────────────╮ │scroll to top│ ╰─────────────╯ ╭ serve.zig ────────────────────────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰───────────────────────────────────────────────────────────────╯
╭────╮ ╭ clone ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╮ │http│ ssh │ │ ╰────╯ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╯
556 const v = value["version=".len..]; 557 if (std.mem.eql(u8, v, "2")) { 558 version = .v2; 559 } else if (std.mem.eql(u8, v, "1") and version != .v2) { 560 version = .v1; 561 } 562 } 563 } 564 return version; 565 } 566 567 fn findHeader(request: *std.http.Server.Request, name: []const u8) ?[]const u8 { 568 var it = request.iterateHeaders(); 569 while (it.next()) |header| { 570 if (std.ascii.eqlIgnoreCase(header.name, name)) return header.value; 571 } 572 return null; 573 } 574 575 fn writeSimpleResponse( 576 http_server: *std.http.Server, 577 code: u16, 578 message: []const u8, 579 content_type: []const u8, 580 body: []const u8, 581 ) !void { 582 try http_server.out.print( 583 "HTTP/1.1 {d} {s}\r\nContent-Type: {s}\r\nContent-Length: {d}\r\n\r\n{s}", 584 .{ code, message, content_type, body.len, body }, 585 ); 586 } 587 588 fn logError(err: *std.Io.Writer, comptime fmt: []const u8, args: anytype) void { 589 err.print(fmt, args) catch return; 590 err.flush() catch {}; 591 } 592