1 /*
2 * Copyright 2006 Simon Raess
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package net.sf.beep4j.internal;
17
18 import net.sf.beep4j.Message;
19
20 /**
21 * A TransportMapping implements a transport mapping as described by
22 * section 2.5 of the BEEP specification (RFC 3080). The interface is meant to
23 * be generally applicable. But it could be that it needs some
24 * rework for other transport mappings as those specified by RFC 3081.
25 *
26 * <p>General responsibilities of implementors are:</p>
27 * <ul>
28 * <li>ensure that sent frames fit into the receivers advertised buffer window</li>
29 * <li>fragment messages into several frames as necessary</li>
30 * <li>validate that the other peer respects the local advertised buffer window</li>
31 * <li>process any transport specific mapping frame</li>
32 * </ul>
33 *
34 * @author Simon Raess
35 */
36 public interface TransportMapping extends SessionListener {
37
38 /**
39 * Process a mapping frame. This method receives the header tokens.
40 * As the TCP mapping is currently the only existing mapping, this
41 * is sufficient. If there ever exists another mapping that defines
42 * a payload for mapping frames, some changes would have to be
43 * implemented.
44 *
45 * @param token the header tokens (i.e. header is split on spaces)
46 */
47 void processMappingFrame(String[] token);
48
49 /**
50 * Checks that an incoming frame is valid. This method is called
51 * after the header has been parsed, but before the parsing of
52 * the body has started.
53 *
54 * @param channel the channel number of the message
55 * @param seqno the sequence number of the message
56 * @param size the payload size of the message
57 */
58 void checkFrame(int channel, long seqno, int size);
59
60 /**
61 * Invoked by the framework to notify the mapping that the parsing
62 * of the message has completed.
63 *
64 * @param channel the channel number of the message
65 * @param seqno the sequence number of the message
66 * @param size the size of the message
67 */
68 void frameReceived(int channel, long seqno, int size);
69
70 /**
71 * Sends a message of type MSG.
72 *
73 * @param channel the channel number
74 * @param messageNumber the message number
75 * @param message the message
76 */
77 void sendMSG(int channel, int messageNumber, Message message);
78
79 /**
80 * Sends a message of type RPY.
81 *
82 * @param channel the channel number
83 * @param messageNumber the message number
84 * @param message the message
85 */
86 void sendRPY(int channel, int messageNumber, Message message);
87
88 /**
89 * Sends a message of type ERR.
90 *
91 * @param channel the channel number
92 * @param messageNumber the message number
93 * @param message the message
94 */
95 void sendERR(int channel, int messageNumber, Message message);
96
97 /**
98 * Sends a message of type ANS.
99 *
100 * @param channel the channel number
101 * @param messageNumber the message number
102 * @param message the message
103 */
104 void sendANS(int channel, int messageNumber, int answerNumber, Message message);
105
106 /**
107 * Sends a message of type NUL.
108 *
109 * @param channel the channel number
110 * @param messageNumber the message number
111 * @param message the message
112 */
113 void sendNUL(int channel, int messageNumber);
114
115 /**
116 * Instructs the mapping to close the underlying Transport object.
117 */
118 void closeTransport();
119
120 }