1/*
2* Copyright (C) 2015 Samsung System LSI
3* Licensed under the Apache License, Version 2.0 (the "License");
4* you may not use this file except in compliance with the License.
5* You may obtain a copy of the License at
6*
7*      http://www.apache.org/licenses/LICENSE-2.0
8*
9* Unless required by applicable law or agreed to in writing, software
10* distributed under the License is distributed on an "AS IS" BASIS,
11* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12* See the License for the specific language governing permissions and
13* limitations under the License.
14*/
15package android.bluetooth;
16
17import java.util.Arrays;
18
19import android.os.Parcel;
20import android.os.Parcelable;
21
22/**
23 * Data representation of a Object Push Profile Server side SDP record.
24 */
25/** @hide */
26public class SdpOppOpsRecord implements Parcelable {
27
28    private final String mServiceName;
29    private final int mRfcommChannel;
30    private final int mL2capPsm;
31    private final int mProfileVersion;
32    private final byte[] mFormatsList;
33
34    public SdpOppOpsRecord(String serviceName, int rfcommChannel,
35            int l2capPsm, int version, byte[] formatsList) {
36        super();
37        this.mServiceName = serviceName;
38        this.mRfcommChannel = rfcommChannel;
39        this.mL2capPsm = l2capPsm;
40        this.mProfileVersion = version;
41        this.mFormatsList = formatsList;
42    }
43
44    public String getServiceName() {
45        return mServiceName;
46    }
47
48    public int getRfcommChannel() {
49        return mRfcommChannel;
50    }
51
52    public int getL2capPsm() {
53        return mL2capPsm;
54    }
55
56    public int getProfileVersion() {
57        return mProfileVersion;
58    }
59
60    public byte[] getFormatsList() {
61        return mFormatsList;
62    }
63
64    @Override
65    public int describeContents() {
66        /* No special objects */
67        return 0;
68    }
69
70    public SdpOppOpsRecord(Parcel in){
71        this.mRfcommChannel = in.readInt();
72        this.mL2capPsm = in.readInt();
73        this.mProfileVersion = in.readInt();
74        this.mServiceName = in.readString();
75        int arrayLength = in.readInt();
76        if(arrayLength > 0) {
77            byte[] bytes = new byte[arrayLength];
78            in.readByteArray(bytes);
79            this.mFormatsList = bytes;
80        } else {
81            this.mFormatsList = null;
82        }
83    }
84
85    @Override
86    public void writeToParcel(Parcel dest, int flags) {
87        dest.writeInt(mRfcommChannel);
88        dest.writeInt(mL2capPsm);
89        dest.writeInt(mProfileVersion);
90        dest.writeString(mServiceName);
91        if(mFormatsList!= null && mFormatsList.length > 0) {
92            dest.writeInt(mFormatsList.length);
93            dest.writeByteArray(mFormatsList);
94        } else {
95            dest.writeInt(0);
96        }
97    }
98
99    public String toString(){
100        StringBuilder sb = new StringBuilder("Bluetooth OPP Server SDP Record:\n");
101        sb.append("  RFCOMM Chan Number: ").append(mRfcommChannel);
102        sb.append("\n  L2CAP PSM: ").append(mL2capPsm);
103        sb.append("\n  Profile version: ").append(mProfileVersion);
104        sb.append("\n  Service Name: ").append(mServiceName);
105        sb.append("\n  Formats List: ").append(Arrays.toString(mFormatsList));
106        return sb.toString();
107    }
108
109    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
110        public SdpOppOpsRecord createFromParcel(Parcel in) {
111            return new SdpOppOpsRecord(in);
112        }
113        public SdpOppOpsRecord[] newArray(int size) {
114            return new SdpOppOpsRecord[size];
115        }
116    };
117
118}
119