Project

General

Profile

Revision 3

Update

View differences:

Message.java
1
package message;

2

  
3
import chunk.Chunk;

4
import peer.Peer;

5

  
6
import java.io.ByteArrayOutputStream;

7
import java.io.IOException;

8

  
9
public class Message {

10

  
11
    public static final int MESSAGE_PACKET_MAX_SIZE = Chunk.CHUNK_MAX_SIZE + MessageHeader.MESSAGE_HEADER_MAX_SIZE;

12

  
13
    private MessageHeader header;

14
    private byte[] body;

15

  
16
    public Message(byte[] data) {

17
        String rawMessage = new String(data);

18
        int index = rawMessage.indexOf(MessageHeader.CRLF) + 4;

19
        byte[] rawHeader = new byte[index+1];

20
        System.arraycopy(data, 0, rawHeader, 0, index - 4);

21
        header = new MessageHeader(new String(rawHeader));

22
        int bodyLength = data.length - index;

23
        body = new byte[bodyLength];

24
        System.arraycopy(data, index, body, 0, bodyLength);

25
    }

26

  
27
    public Message(MessageHeader header, byte[] body) {

28
        this.header = header;

29
        this.body = body;

30
    }

31

  
32
    public byte[] toBytes() throws IOException {

33
        byte[] result;

34
        ByteArrayOutputStream bos = new ByteArrayOutputStream();

35
        bos.write(header.toString().getBytes());

36
        if (body != null)

37
            bos.write(body);

38
        result = bos.toByteArray();

39
        return result;

40
    }

41

  
42
    public MessageHeader getHeader() {

43
        return header;

44
    }

45

  
46
    public byte[] getBody() {

47
        return body;

48
    }

49

  
50
    /*

51
     * public static boolean isValid(String message) { String myString =

52
     * message.substring(0,message.indexOf("\r\n\r\n"));

53
     * 

54
     * return

55
     * myString.matches(".* [0-9].[0-9] [0-9]+ .{32} .{6} [0-9]\r\n\r\n(.*)?"); }

56
     */

57

  
58
    public static Message parsePutChunkMessage(Chunk chunk, Peer peer) {

59
        MessageHeader header = new MessageHeader("PUTCHUNK", peer.getpVersion(), peer.getPeerId(), chunk.getFileID(), chunk.getChunkNo(),

60
                chunk.getRepDegree());

61
        Message message = new Message(header, chunk.getData());

62

  
63
        return message;

64
    }

65

  
66
    public static Message parseStoredMessage(Chunk chunk, Peer peer) {

67
        try {

68
            MessageHeader header = new MessageHeader("STORED", peer.getpVersion(), peer.getPeerId(), chunk.getFileID(), chunk.getChunkNo());

69
            Message message = new Message(header, null);

70
            return message;

71
        } catch (InvalidHeaderParameters e) {

72
            e.printStackTrace();

73
        }

74
        return null;

75
    }

76

  
77
    public static Message parseDeleteMessage(String fileId, Peer peer) {

78
        try {

79
            MessageHeader header = new MessageHeader("DELETE", peer.getpVersion(), peer.getPeerId(), fileId);

80
            Message message = new Message(header, null);

81
            return message;

82
        } catch (InvalidHeaderParameters e) {

83
            e.printStackTrace();

84
        }

85
        return null;

86
    }

87

  
88
    public static Message parseGetChunkMessage(String fileId, int chunkNo, Peer peer) {

89
        try {

90
            MessageHeader header = new MessageHeader("GETCHUNK", peer.getpVersion(), peer.getPeerId(), fileId, chunkNo);

91
            Message message = new Message(header, null);

92
            return message;

93
        } catch (InvalidHeaderParameters e) {

94
            e.printStackTrace();

95
        }

96
        return null;

97
    }

98

  
99
	public static Message parseChunkMessage(Chunk chunk, Peer peer) {

100
		try {

101
            MessageHeader header = new MessageHeader("CHUNK", peer.getpVersion(), peer.getPeerId(), chunk.getFileID(), chunk.getChunkNo());

102
            Message message = new Message(header, chunk.getData());

103
            return message;

104
        } catch (InvalidHeaderParameters e) {

105
            e.printStackTrace();

106
        }

107
        return null;

108
	}

109

  
1
package message;
2

  
3
import chunk.Chunk;
4
import peer.Peer;
5

  
6
import java.io.ByteArrayOutputStream;
7
import java.io.IOException;
8

  
9
public class Message {
10

  
11
    public static final int MESSAGE_PACKET_MAX_SIZE = Chunk.CHUNK_MAX_SIZE + MessageHeader.MESSAGE_HEADER_MAX_SIZE;
12

  
13
    private MessageHeader header;
14
    private byte[] body;
15

  
16
    public Message(byte[] data) {
17
        String rawMessage = new String(data);
18
        int index = rawMessage.indexOf(MessageHeader.CRLF) + 4;
19
        byte[] rawHeader = new byte[index+1];
20
        System.arraycopy(data, 0, rawHeader, 0, index - 4);
21
        header = new MessageHeader(new String(rawHeader));
22
        int bodyLength = data.length - index;
23
        body = new byte[bodyLength];
24
        System.arraycopy(data, index, body, 0, bodyLength);
25
    }
26

  
27
    public Message(MessageHeader header, byte[] body) {
28
        this.header = header;
29
        this.body = body;
30
    }
31

  
32
    public byte[] toBytes() throws IOException {
33
        byte[] result;
34
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
35
        bos.write(header.toString().getBytes());
36
        if (body != null)
37
            bos.write(body);
38
        result = bos.toByteArray();
39
        return result;
40
    }
41

  
42
    public MessageHeader getHeader() {
43
        return header;
44
    }
45

  
46
    public byte[] getBody() {
47
        return body;
48
    }
49

  
50
    /*
51
     * public static boolean isValid(String message) { String myString =
52
     * message.substring(0,message.indexOf("\r\n\r\n"));
53
     * 
54
     * return
55
     * myString.matches(".* [0-9].[0-9] [0-9]+ .{32} .{6} [0-9]\r\n\r\n(.*)?"); }
56
     */
57

  
58
    public static Message parsePutChunkMessage(Chunk chunk, Peer peer) {
59
        MessageHeader header = new MessageHeader("PUTCHUNK", peer.getpVersion(), peer.getPeerId(), chunk.getFileID(), chunk.getChunkNo(),
60
                chunk.getRepDegree());
61
        Message message = new Message(header, chunk.getData());
62

  
63
        return message;
64
    }
65

  
66
    public static Message parseStoredMessage(Chunk chunk, Peer peer) {
67
        try {
68
            MessageHeader header = new MessageHeader("STORED", peer.getpVersion(), peer.getPeerId(), chunk.getFileID(), chunk.getChunkNo());
69
            Message message = new Message(header, null);
70
            return message;
71
        } catch (InvalidHeaderParameters e) {
72
            e.printStackTrace();
73
        }
74
        return null;
75
    }
76

  
77
    public static Message parseDeleteMessage(String fileId, Peer peer) {
78
        try {
79
            MessageHeader header = new MessageHeader("DELETE", peer.getpVersion(), peer.getPeerId(), fileId);
80
            Message message = new Message(header, null);
81
            return message;
82
        } catch (InvalidHeaderParameters e) {
83
            e.printStackTrace();
84
        }
85
        return null;
86
    }
87

  
88
    public static Message parseGetChunkMessage(String fileId, int chunkNo, Peer peer) {
89
        try {
90
            MessageHeader header = new MessageHeader("GETCHUNK", peer.getpVersion(), peer.getPeerId(), fileId, chunkNo);
91
            Message message = new Message(header, null);
92
            return message;
93
        } catch (InvalidHeaderParameters e) {
94
            e.printStackTrace();
95
        }
96
        return null;
97
    }
98

  
99
	public static Message parseChunkMessage(Chunk chunk, Peer peer) {
100
		try {
101
            MessageHeader header = new MessageHeader("CHUNK", peer.getpVersion(), peer.getPeerId(), chunk.getFileID(), chunk.getChunkNo());
102
            Message message = new Message(header, chunk.getData());
103
            return message;
104
        } catch (InvalidHeaderParameters e) {
105
            e.printStackTrace();
106
        }
107
        return null;
108
	}
109

  
110 110
}

Also available in: Unified diff