Newer
Older
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
package org.etsi.its.adapter.layers;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
import org.etsi.common.ByteHelper;
import org.etsi.its.adapter.IManagementLayers;
import org.etsi.its.adapter.UdpMultiplexer;
public class UdpIpMarbenLayer extends UdpIpLayer {
// Marben 88:ceres 182:Jupiter VM32G
private static String UdpAddress = "192.168.7.182"; //"10.200.1.101"; // FIXME Use a generic way to retrieve UDP settings
private static int UdpRecvPort = 3751; //18501; // FIXME Use a generic way to retrieve UDP settings
private static int UdpSendPort = 3750; //18502; // FIXME Use a generic way to retrieve UDP settings
private Map<String, Short> clientsToFrameTypes = new HashMap<String, Short>();
public UdpIpMarbenLayer(IManagementLayers management, Stack<String> lowerStack) {
super(management, lowerStack);
UdpMultiplexer.getInstance().UdpAddress = UdpAddress;
UdpMultiplexer.getInstance().UdpRecvPort = UdpRecvPort;
UdpMultiplexer.getInstance().UdpSendPort = UdpSendPort;
}
/* (non-Javadoc)
* @see org.etsi.its.adapter.layers.Layer#register(org.etsi.its.adapter.layers.Layer)
*/
@Override
public void register(Layer upperLayer) {
if(registeredUpperLayer == null) {
super.register(upperLayer);
// Workaround for Marben CAM send module
Map<String, Object> lowerInfo = new HashMap<String, Object>();
lowerInfo.put(UdpMultiplexer.getInstance().UDP_PORT_KEY, new Integer(UdpRecvPort).toString());
super.send(new byte[] { (byte)0xAA, (byte)0xAA, (byte)0xAA, (byte)0xAA }, lowerInfo);
} else {
super.register(upperLayer);
}
clientsToFrameTypes.put(this.toString(), upperLayerFrameType);
}
/* (non-Javadoc)
* @see org.etsi.its.adapter.layers.Layer#unregister(org.etsi.its.adapter.layers.Layer)
*/
@Override
public void unregister(Layer upperLayer) {
super.unregister(upperLayer);
clientsToFrameTypes.remove(this.toString(), upperLayerFrameType);
}
/* (non-Javadoc)
* @see org.etsi.its.adapter.layers.Layer#send(byte[], java.util.Map)
*/
@Override
public boolean send(byte[] message, Map<String, Object> params) {
System.out.println("UdpIpMarbenLayer.send: " + ByteHelper.byteArrayToString(message));
return super.send(message, params); // ML(Marben) : no lower header added
}
public void receive(byte[] message, Map<String, Object> lowerInfo) {
System.out.println("UdpIpMarbenLayer.run: Received packet " + ByteHelper.byteArrayToString(message));
lowerInfo.put(EthernetLayer.LINK_LAYER_DESTINATION, MAC_BROADCAST);
registeredUpperLayer.receive(message, lowerInfo); // no MAC+LLC headers expected for Marben (ML)
}
}