/*
 * Copyright (C) 2021 The Android Open Source Project
 *
 * 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.
 */

package android.system;

import libcore.util.NonNull;
import libcore.util.Nullable;

import java.net.SocketAddress;
import java.nio.ByteBuffer;

/**
 * Corresponds to C's {@code struct msghdr}
 *
 */
public final class StructMsghdr{
    /**
     * Optional address.
     * <p>Sendmsg: Caller must populate to specify the target address for a datagram, or pass
     * {@code null} to send to the destination of an already-connected socket.
     * Recvmsg: Populated by the system to specify the source address.
     */
    @Nullable public SocketAddress msg_name;

    /** Scatter/gather array */
    @NonNull public final ByteBuffer[] msg_iov;

    /** Ancillary data */
    @Nullable public StructCmsghdr[] msg_control;

    /** Flags on received message. */
    public int msg_flags;

    /**
     * Constructs an instance with the given field values
     */
    public StructMsghdr(@Nullable SocketAddress msg_name, @NonNull ByteBuffer[] msg_iov,
                        @Nullable StructCmsghdr[] msg_control, int msg_flags) {
        this.msg_name = msg_name;
        this.msg_iov = msg_iov;
        this.msg_control = msg_control;
        this.msg_flags = msg_flags;
    }
}