summaryrefslogtreecommitdiff
path: root/src/org/noreply/fancydress/type3/routing/RoutingMBOX.java
blob: 2016228adcf575a0d51d7ccce0abda90404f1b05 (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
/* $Id$ */
package org.noreply.fancydress.type3.routing;

import org.noreply.fancydress.misc.Util;
import org.noreply.fancydress.crypto.*;

/**
 * The MBOX routing as specified in the type III spec.
 *
 * MBOX packets are delivered by email by the handling server.
 *
 * The payload of a MBOX packet should be constructed according
 * to the E2E spec.
 *
 * @see org.noreply.fancydress.type3.Payload
 */
public class RoutingMBOX extends RoutingDestination {
	/**
	 * Recipient mailbox.
	 */
	String mailbox;

	/**
	 * Construct an MBOX routing.
	 */
	public RoutingMBOX(String mailbox) {
		super (RoutingType.MBOX);

		// FIXME: syntax check mailbox

		this.mailbox = mailbox;
	}

	/**
	 * Return the total length in octets of the routing information.
	 *
	 * @return total length in octets of the routing information
	 */
	public int getRoutingInformationLength() {
		return DECODINGHANDLE_LEN + mailbox.length();
	}

	/**
	 * Get the routing type of this instance.
	 *
	 * @return routing type
	 */
	public byte[] getRoutingInformation() {
		int length = getRoutingInformationLength();
		byte[] result = new byte[length];
		int pos = 0;

		System.arraycopy(CryptoPrimitives.rand(DECODINGHANDLE_LEN), 0, result, pos, DECODINGHANDLE_LEN);
		pos += DECODINGHANDLE_LEN;
		System.arraycopy(Util.toOctets(mailbox), 0, result, pos, mailbox.length());
		pos += mailbox.length();

		if (pos != length)
			throw new Error("Did not fill in expected amount of bytes!");

		return result;
	}
}