Home | History | Annotate | Download | only in ibb
      1 /**
      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  */
     14 package org.jivesoftware.smackx.bytestreams.ibb;
     15 
     16 import org.jivesoftware.smack.Connection;
     17 import org.jivesoftware.smack.XMPPException;
     18 import org.jivesoftware.smack.packet.IQ;
     19 import org.jivesoftware.smackx.bytestreams.BytestreamRequest;
     20 import org.jivesoftware.smackx.bytestreams.ibb.packet.Open;
     21 
     22 /**
     23  * InBandBytestreamRequest class handles incoming In-Band Bytestream requests.
     24  *
     25  * @author Henning Staib
     26  */
     27 public 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 }
     93