summaryrefslogtreecommitdiff
path: root/SDL_Android/SmartDeviceLinkProxyAndroid/src/com/smartdevicelink/protocol/BinaryFrameHeader.java
blob: e5bc9d7beb840fe6e565e89feef0fa5944863e11 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package com.smartdevicelink.protocol;

import com.smartdevicelink.util.BitConverter;

public class BinaryFrameHeader {
	private byte _rpcType;
	private int _functionID;
	private int _correlationID;
	private int _jsonSize;
	
	private byte[] _jsonData;
	private byte[] _bulkData;
	
	public BinaryFrameHeader() {}
	
	public static BinaryFrameHeader parseBinaryHeader(byte[] binHeader) {
		BinaryFrameHeader msg = new BinaryFrameHeader();
		
		byte RPC_Type = (byte) (binHeader[0] >>> 4);
		msg.setRPCType(RPC_Type);
		
		int _functionID = (BitConverter.intFromByteArray(binHeader, 0) & 0x0FFFFFFF);
		msg.setFunctionID(_functionID);
		
		int corrID = BitConverter.intFromByteArray(binHeader, 4);
		msg.setCorrID(corrID);
		
		int _jsonSize = BitConverter.intFromByteArray(binHeader, 8);
		msg.setJsonSize(_jsonSize);
		
		if (_jsonSize > 0) {
			byte[] _jsonData = new byte[_jsonSize];
			System.arraycopy(binHeader, 12, _jsonData, 0, _jsonSize);
			msg.setJsonData(_jsonData);
		}
		
		if (binHeader.length - _jsonSize - 12 > 0) {
			byte[] _bulkData = new byte[binHeader.length - _jsonSize - 12];
			System.arraycopy(binHeader, 12 + _jsonSize, _bulkData, 0, _bulkData.length);
			msg.setBulkData(_bulkData);
		}		
		
		return msg;
	}
	
	protected byte[] assembleHeaderBytes() {
		int binHeader = _functionID;
		binHeader |= (_rpcType << 28);
		
		byte[] ret = new byte[12];
		System.arraycopy(BitConverter.intToByteArray(binHeader), 0, ret, 0, 4);
		System.arraycopy(BitConverter.intToByteArray(_correlationID), 0, ret, 4, 4);
		System.arraycopy(BitConverter.intToByteArray(_jsonSize), 0, ret, 8, 4);
		
		return ret;
	}
	
	public byte getRPCType() {
		return _rpcType;
	}

	public void setRPCType(byte _rpcType) {
		this._rpcType = _rpcType;
	}

	public int getFunctionID() {
		return _functionID;
	}

	public void setFunctionID(int _functionID) {
		this._functionID = _functionID;
	}

	public int getCorrID() {
		return _correlationID;
	}

	public void setCorrID(int _correlationID) {
		this._correlationID = _correlationID;
	}

	public int getJsonSize() {
		return _jsonSize;
	}

	public void setJsonSize(int _jsonSize) {
		this._jsonSize = _jsonSize;
	}
	
	public byte[] getJsonData() {
		return _jsonData;
	}
	
	public void setJsonData(byte[] _jsonData) {
		this._jsonData = new byte[this._jsonSize];
		System.arraycopy(_jsonData, 0, this._jsonData, 0, _jsonSize);
		//this._jsonData = _jsonData;
	}
	
	public byte[] getBulkData() {
		return _bulkData;
	}
	
	public void setBulkData(byte[] _bulkData) {
		this._bulkData = _bulkData;
	}
}