about summary refs log tree commit diff stats
path: root/data/maps/the_impressive/rooms
Commit message (Collapse)AuthorAgeFilesLines
* Added display names to portsStar Rauchenberger2025-09-283-0/+3
|
* [Data] Annotate shuffleable portsStar Rauchenberger2025-09-213-3/+6
|
* Changed how door location names are formattedStar Rauchenberger2025-08-307-7/+7
| | | | | | | | | | | | | | | | | | STANDARD type doors with at most four panels in the same map area and no other trigger objects will have their location names generated from the names of the panels used to open the door, similar to Lingo 1. Other door types will use the door's name. In either case, the name can be overridden using the new location_name field. Rooms can also set a panel_display_name field, which will be used in location names for doors, and is used to group panels into areas. Panels themselves can set display names, which differentiates their locations from other panels in the same area. Many maps were updated for this, but note that the_symbolic and the_unyielding have validator failures because of duplicate panel names. This won't matter until panelsanity is implemented.
* [Data] Made proxies with the same answer as the panel explicitStar Rauchenberger2025-08-301-0/+1
|
* Converted puzzle symbols to an enumStar Rauchenberger2025-08-203-4/+4
|
* Added the_impressiveStar Rauchenberger2025-08-147-0/+90
} /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
/* Copyright 2021 The libwifi Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "disassociation.h"
#include "../../core/misc/byteswap.h"

#include <errno.h>
#include <stdlib.h>
#include <string.h>

/**
 * The length of a disassoc frame is the sum of the header length, the fixed parameters length, and the tagged
 * parameters length.
 */
size_t libwifi_get_disassoc_length(struct libwifi_disassoc *disassoc) {
    return sizeof(struct libwifi_mgmt_unordered_frame_header) +
           sizeof(struct libwifi_disassoc_fixed_parameters) + disassoc->tags.length;
}

/**
 * The generated disassociation frame contains only the supplied receiver, transmitter and reason_code by
 * default.
 */
int libwifi_create_disassoc(struct libwifi_disassoc *disassoc, const unsigned char receiver[6],
                             const unsigned char transmitter[6], uint16_t reason_code) {
    memset(disassoc, 0, sizeof(struct libwifi_disassoc));

    disassoc->frame_header.frame_control.type = TYPE_MANAGEMENT;
    disassoc->frame_header.frame_control.subtype = SUBTYPE_DISASSOC;
    memcpy(&disassoc->frame_header.addr1, receiver, 6);
    memcpy(&disassoc->frame_header.addr2, transmitter, 6);
    memcpy(&disassoc->frame_header.addr3, transmitter, 6);

    disassoc->frame_header.seq_control.sequence_number = (rand() % 4096);

    memcpy(&disassoc->fixed_parameters.reason_code, &reason_code, sizeof(reason_code));

    return 0;
}

/**
 * Copy a libwifi_disassoc into a regular unsigned char buffer. This is useful when injecting generated
 * libwifi frames.
 */
size_t libwifi_dump_disassoc(struct libwifi_disassoc *disassoc, unsigned char *buf, size_t buf_len) {
    size_t disassoc_len = libwifi_get_disassoc_length(disassoc);
    if (disassoc_len > buf_len) {
        return -EINVAL;
    }

    size_t offset = 0;
    memcpy(buf + offset, &disassoc->frame_header, sizeof(struct libwifi_mgmt_unordered_frame_header));
    offset += sizeof(struct libwifi_mgmt_unordered_frame_header);

    memcpy(buf + offset, &disassoc->fixed_parameters, sizeof(struct libwifi_disassoc_fixed_parameters));
    offset += sizeof(struct libwifi_disassoc_fixed_parameters);

    memcpy(buf + offset, disassoc->tags.parameters, disassoc->tags.length);
    offset += disassoc->tags.length;

    return disassoc_len;
}

/**
 * Because the tagged parameters memory is managed inside of the library, the library must
 * be the one to free it, too.
 */
void libwifi_free_disassoc(struct libwifi_disassoc *disassoc) {
    free(disassoc->tags.parameters);
}