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 */ 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 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 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 129 AttrSessionID getSessionID() { 130 return sid; 131 } 132 133 AttrWait getWait() { 134 return wait; 135 } 136 137 AttrVersion getVersion() { 138 return ver; 139 } 140 141 AttrPolling getPollingInterval() { 142 return polling; 143 } 144 145 AttrInactivity getInactivityPeriod() { 146 return inactivity; 147 } 148 149 AttrRequests getRequests() { 150 return requests; 151 } 152 153 AttrHold getHold() { 154 return hold; 155 } 156 157 AttrAccept getAccept() { 158 return accept; 159 } 160 161 AttrMaxPause getMaxPause() { 162 return maxPause; 163 } 164 165 AttrAck getAck() { 166 return ack; 167 } 168 169 AttrCharsets getCharsets() { 170 return charsets; 171 } 172 173 boolean isAckingRequests() { 174 return ackingRequests; 175 } 176 177 } 178