╭─────────────╮ │scroll to top│ ╰─────────────╯ ╭ main.zig ─────────────────────────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰───────────────────────────────────────────────────────────────╯
╭────╮ ╭ clone ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╮ │http│ ssh │ │ ╰────╯ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╯
165 const handler, const suffix = for (&xit.net_server_http_backend.routes) |*svc| { 166 if (std.mem.endsWith(u8, path, svc.suffix)) 167 break .{ svc.handler, svc.suffix }; 168 } else { 169 try xit.net_server_http_backend.sendNotFound(&stdout_writer.interface); 170 return; 171 }; 172 173 const request_method: std.http.Method = blk: { 174 const method_str = environ_map.get("REQUEST_METHOD") orelse break :blk .GET; 175 const method = std.meta.stringToEnum(std.http.Method, method_str) orelse break :blk .GET; 176 break :blk if (method == .HEAD) .GET else method; 177 }; 178 179 var stdin_buf: [repo_opts.net_buffer_size]u8 = undefined; 180 var stdin_reader = std.Io.File.stdin().reader(io, &stdin_buf); 181 try repo.httpBackend(io, allocator, &stdin_reader.interface, &stdout_writer.interface, .cgi, .{ 182 .request_method = request_method, 183 .handler = handler, 184 .suffix = suffix, 185 .query_string = environ_map.get("QUERY_STRING") orelse "", 186 .content_type = environ_map.get("CONTENT_TYPE") orelse "", 187 .has_remote_user = environ_map.get("REMOTE_USER") != null, 188 .protocol_version = xit.net_server_common.detectProtocolVersion(environ_map), 189 }); 190 }, 191 .serve => unreachable, 192 .ssh_helper => unreachable, 193 } 194 } 195