Project

General

Profile

Statistics
| Revision:

root / src / message / Message.java @ 3

History | View | Annotate | Download (3.53 KB)

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
}