16193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline/*
26193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * Copyright (C) 2015 The Android Open Source Project
36193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline *
46193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * Licensed under the Apache License, Version 2.0 (the "License");
56193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * you may not use this file except in compliance with the License.
66193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * You may obtain a copy of the License at
76193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline *
86193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline *      http://www.apache.org/licenses/LICENSE-2.0
96193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline *
106193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * Unless required by applicable law or agreed to in writing, software
116193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * distributed under the License is distributed on an "AS IS" BASIS,
126193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * See the License for the specific language governing permissions and
146193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * limitations under the License.
156193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline */
166193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline
176193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Klinepackage android.net.netlink;
186193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline
196193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Klineimport android.net.netlink.StructNlMsgHdr;
206193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Klineimport android.net.netlink.NetlinkMessage;
216193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline
226193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Klineimport java.nio.ByteBuffer;
236193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline
246193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline
256193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline/**
266193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * A NetlinkMessage subclass for netlink error messages.
276193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline *
286193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline * @hide
296193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline */
306193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Klinepublic class NetlinkErrorMessage extends NetlinkMessage {
316193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline
326193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline    public static NetlinkErrorMessage parse(StructNlMsgHdr header, ByteBuffer byteBuffer) {
336193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline        final NetlinkErrorMessage errorMsg = new NetlinkErrorMessage(header);
346193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline
356193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline        errorMsg.mNlMsgErr = StructNlMsgErr.parse(byteBuffer);
366193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline        if (errorMsg.mNlMsgErr == null) {
376193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline            return null;
386193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline        }
396193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline
406193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline        return errorMsg;
416193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline    }
426193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline
436193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline    private StructNlMsgErr mNlMsgErr;
446193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline
456193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline    NetlinkErrorMessage(StructNlMsgHdr header) {
466193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline        super(header);
476193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline        mNlMsgErr = null;
486193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline    }
496193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline
506193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline    public StructNlMsgErr getNlMsgError() {
516193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline        return mNlMsgErr;
526193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline    }
536193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline
546193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline    @Override
556193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline    public String toString() {
566193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline        return "NetlinkErrorMessage{ "
576193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline                + "nlmsghdr{" + (mHeader == null ? "" : mHeader.toString()) + "}, "
586193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline                + "nlmsgerr{" + (mNlMsgErr == null ? "" : mNlMsgErr.toString()) + "} "
596193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline                + "}";
606193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline    }
616193aa3305bc2aa5b7f0a983f4b08c99065cfb82Erik Kline}
62