blob: 5bc689a4ae4ca01f2bf1bddd688f5aa481a01e19 [file] [log] [blame]
Shuyi Chend7955ce2013-05-22 14:51:55 -07001/**
2 * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
3 * you may not use this file except in compliance with the License.
4 * You may obtain a copy of the License at
5 *
6 * http://www.apache.org/licenses/LICENSE-2.0
7 *
8 * Unless required by applicable law or agreed to in writing, software
9 * distributed under the License is distributed on an "AS IS" BASIS,
10 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 * See the License for the specific language governing permissions and
12 * limitations under the License.
13 */
14package org.jivesoftware.smackx.bytestreams.ibb;
15
16import org.jivesoftware.smack.Connection;
17import org.jivesoftware.smack.XMPPException;
18import org.jivesoftware.smack.packet.IQ;
19import org.jivesoftware.smackx.bytestreams.BytestreamRequest;
20import org.jivesoftware.smackx.bytestreams.ibb.packet.Open;
21
22/**
23 * InBandBytestreamRequest class handles incoming In-Band Bytestream requests.
24 *
25 * @author Henning Staib
26 */
27public class InBandBytestreamRequest implements BytestreamRequest {
28
29 /* the bytestream initialization request */
30 private final Open byteStreamRequest;
31
32 /*
33 * In-Band Bytestream manager containing the XMPP connection and helper
34 * methods
35 */
36 private final InBandBytestreamManager manager;
37
38 protected InBandBytestreamRequest(InBandBytestreamManager manager,
39 Open byteStreamRequest) {
40 this.manager = manager;
41 this.byteStreamRequest = byteStreamRequest;
42 }
43
44 /**
45 * Returns the sender of the In-Band Bytestream open request.
46 *
47 * @return the sender of the In-Band Bytestream open request
48 */
49 public String getFrom() {
50 return this.byteStreamRequest.getFrom();
51 }
52
53 /**
54 * Returns the session ID of the In-Band Bytestream open request.
55 *
56 * @return the session ID of the In-Band Bytestream open request
57 */
58 public String getSessionID() {
59 return this.byteStreamRequest.getSessionID();
60 }
61
62 /**
63 * Accepts the In-Band Bytestream open request and returns the session to
64 * send/receive data.
65 *
66 * @return the session to send/receive data
67 * @throws XMPPException if stream is invalid.
68 */
69 public InBandBytestreamSession accept() throws XMPPException {
70 Connection connection = this.manager.getConnection();
71
72 // create In-Band Bytestream session and store it
73 InBandBytestreamSession ibbSession = new InBandBytestreamSession(connection,
74 this.byteStreamRequest, this.byteStreamRequest.getFrom());
75 this.manager.getSessions().put(this.byteStreamRequest.getSessionID(), ibbSession);
76
77 // acknowledge request
78 IQ resultIQ = IQ.createResultIQ(this.byteStreamRequest);
79 connection.sendPacket(resultIQ);
80
81 return ibbSession;
82 }
83
84 /**
85 * Rejects the In-Band Bytestream request by sending a reject error to the
86 * initiator.
87 */
88 public void reject() {
89 this.manager.replyRejectPacket(this.byteStreamRequest);
90 }
91
92}