DoxigAlpha

upgradeRequested

Does not invalidate request.head.

Function parameters

Parameters

#
request:*const Request

Type definitions in this namespace

Types

#
WebSocket
See https://tools.ietf.org/html/rfc6455

Initialize an HTTP server that can respond to multiple requests on the same

Functions

#
init
Initialize an HTTP server that can respond to multiple requests on the same

Error sets in this namespace

Error Sets

#

Source

Implementation

#
pub fn upgradeRequested(request: *const Request) UpgradeRequest {
    switch (request.head.version) {
        .@"HTTP/1.0" => return .none,
        .@"HTTP/1.1" => if (request.head.method != .GET) return .none,
    }

    var sec_websocket_key: ?[]const u8 = null;
    var upgrade_name: ?[]const u8 = null;
    var it = request.iterateHeaders();
    while (it.next()) |header| {
        if (std.ascii.eqlIgnoreCase(header.name, "sec-websocket-key")) {
            sec_websocket_key = header.value;
        } else if (std.ascii.eqlIgnoreCase(header.name, "upgrade")) {
            upgrade_name = header.value;
        }
    }

    const name = upgrade_name orelse return .none;
    if (std.ascii.eqlIgnoreCase(name, "websocket")) return .{ .websocket = sec_websocket_key };
    return .{ .other = name };
}