1 /* 2 * Copyright 2009 Mike Cumings 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 17 package com.kenai.jbosh; 18 19 /** 20 * A BOSH connection manager session instance. This consolidates the 21 * configuration knowledge related to the CM session and provides a 22 * mechanism by which 23 */ 24 final class CMSessionParams { 25 26 private final AttrSessionID sid; 27 28 private final AttrWait wait; 29 30 private final AttrVersion ver; 31 32 private final AttrPolling polling; 33 34 private final AttrInactivity inactivity; 35 36 private final AttrRequests requests; 37 38 private final AttrHold hold; 39 40 private final AttrAccept accept; 41 42 private final AttrMaxPause maxPause; 43 44 private final AttrAck ack; 45 46 private final AttrCharsets charsets; 47 48 private final boolean ackingRequests; 49 50 /** 51 * Prevent direct construction. 52 */ CMSessionParams( final AttrSessionID aSid, final AttrWait aWait, final AttrVersion aVer, final AttrPolling aPolling, final AttrInactivity aInactivity, final AttrRequests aRequests, final AttrHold aHold, final AttrAccept aAccept, final AttrMaxPause aMaxPause, final AttrAck aAck, final AttrCharsets aCharsets, final boolean amAckingRequests)53 private CMSessionParams( 54 final AttrSessionID aSid, 55 final AttrWait aWait, 56 final AttrVersion aVer, 57 final AttrPolling aPolling, 58 final AttrInactivity aInactivity, 59 final AttrRequests aRequests, 60 final AttrHold aHold, 61 final AttrAccept aAccept, 62 final AttrMaxPause aMaxPause, 63 final AttrAck aAck, 64 final AttrCharsets aCharsets, 65 final boolean amAckingRequests) { 66 sid = aSid; 67 wait = aWait; 68 ver = aVer; 69 polling = aPolling; 70 inactivity = aInactivity; 71 requests = aRequests; 72 hold = aHold; 73 accept = aAccept; 74 maxPause = aMaxPause; 75 ack = aAck; 76 charsets = aCharsets; 77 ackingRequests = amAckingRequests; 78 } 79 fromSessionInit( final AbstractBody req, final AbstractBody resp)80 static CMSessionParams fromSessionInit( 81 final AbstractBody req, 82 final AbstractBody resp) 83 throws BOSHException { 84 AttrAck aAck = AttrAck.createFromString( 85 resp.getAttribute(Attributes.ACK)); 86 String rid = req.getAttribute(Attributes.RID); 87 boolean acking = (aAck != null && aAck.getValue().equals(rid)); 88 89 return new CMSessionParams( 90 AttrSessionID.createFromString( 91 getRequiredAttribute(resp, Attributes.SID)), 92 AttrWait.createFromString( 93 getRequiredAttribute(resp, Attributes.WAIT)), 94 AttrVersion.createFromString( 95 resp.getAttribute(Attributes.VER)), 96 AttrPolling.createFromString( 97 resp.getAttribute(Attributes.POLLING)), 98 AttrInactivity.createFromString( 99 resp.getAttribute(Attributes.INACTIVITY)), 100 AttrRequests.createFromString( 101 resp.getAttribute(Attributes.REQUESTS)), 102 AttrHold.createFromString( 103 resp.getAttribute(Attributes.HOLD)), 104 AttrAccept.createFromString( 105 resp.getAttribute(Attributes.ACCEPT)), 106 AttrMaxPause.createFromString( 107 resp.getAttribute(Attributes.MAXPAUSE)), 108 aAck, 109 AttrCharsets.createFromString( 110 resp.getAttribute(Attributes.CHARSETS)), 111 acking 112 ); 113 } 114 getRequiredAttribute( final AbstractBody body, final BodyQName name)115 private static String getRequiredAttribute( 116 final AbstractBody body, 117 final BodyQName name) 118 throws BOSHException { 119 String attrStr = body.getAttribute(name); 120 if (attrStr == null) { 121 throw(new BOSHException( 122 "Connection Manager session creation response did not " 123 + "include required '" + name.getLocalPart() 124 + "' attribute")); 125 } 126 return attrStr; 127 } 128 getSessionID()129 AttrSessionID getSessionID() { 130 return sid; 131 } 132 getWait()133 AttrWait getWait() { 134 return wait; 135 } 136 getVersion()137 AttrVersion getVersion() { 138 return ver; 139 } 140 getPollingInterval()141 AttrPolling getPollingInterval() { 142 return polling; 143 } 144 getInactivityPeriod()145 AttrInactivity getInactivityPeriod() { 146 return inactivity; 147 } 148 getRequests()149 AttrRequests getRequests() { 150 return requests; 151 } 152 getHold()153 AttrHold getHold() { 154 return hold; 155 } 156 getAccept()157 AttrAccept getAccept() { 158 return accept; 159 } 160 getMaxPause()161 AttrMaxPause getMaxPause() { 162 return maxPause; 163 } 164 getAck()165 AttrAck getAck() { 166 return ack; 167 } 168 getCharsets()169 AttrCharsets getCharsets() { 170 return charsets; 171 } 172 isAckingRequests()173 boolean isAckingRequests() { 174 return ackingRequests; 175 } 176 177 } 178