PageRenderTime 51ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 0ms

/servers/jain-slee/resources/diameter-cx-dx/ra/src/main/java/org/mobicents/slee/resource/diameter/cxdx/handlers/CxDxSessionFactory.java

http://mobicents.googlecode.com/
Java | 349 lines | 171 code | 53 blank | 125 comment | 7 complexity | f8abc9a889722e30740ad5114245c0a5 MD5 | raw file
Possible License(s): LGPL-3.0, GPL-3.0, LGPL-2.1, GPL-2.0, CC-BY-SA-3.0, CC0-1.0, Apache-2.0, BSD-3-Clause
  1. /*
  2. * JBoss, Home of Professional Open Source
  3. * Copyright 2011, Red Hat, Inc. and individual contributors
  4. * by the @authors tag. See the copyright.txt in the distribution for a
  5. * full listing of individual contributors.
  6. *
  7. * This is free software; you can redistribute it and/or modify it
  8. * under the terms of the GNU Lesser General Public License as
  9. * published by the Free Software Foundation; either version 2.1 of
  10. * the License, or (at your option) any later version.
  11. *
  12. * This software is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with this software; if not, write to the Free
  19. * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20. * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21. */
  22. package org.mobicents.slee.resource.diameter.cxdx.handlers;
  23. import net.java.slee.resource.diameter.cxdx.events.avp.DiameterCxDxAvpCodes;
  24. import org.apache.log4j.Logger;
  25. import org.jdiameter.api.Answer;
  26. import org.jdiameter.api.ApplicationId;
  27. import org.jdiameter.api.IllegalDiameterStateException;
  28. import org.jdiameter.api.InternalException;
  29. import org.jdiameter.api.Message;
  30. import org.jdiameter.api.OverloadException;
  31. import org.jdiameter.api.Request;
  32. import org.jdiameter.api.RouteException;
  33. import org.jdiameter.api.SessionFactory;
  34. import org.jdiameter.api.app.AppAnswerEvent;
  35. import org.jdiameter.api.app.AppRequestEvent;
  36. import org.jdiameter.api.app.AppSession;
  37. import org.jdiameter.api.cxdx.ClientCxDxSession;
  38. import org.jdiameter.api.cxdx.ServerCxDxSession;
  39. import org.jdiameter.api.cxdx.events.JLocationInfoAnswer;
  40. import org.jdiameter.api.cxdx.events.JLocationInfoRequest;
  41. import org.jdiameter.api.cxdx.events.JMultimediaAuthAnswer;
  42. import org.jdiameter.api.cxdx.events.JMultimediaAuthRequest;
  43. import org.jdiameter.api.cxdx.events.JPushProfileAnswer;
  44. import org.jdiameter.api.cxdx.events.JPushProfileRequest;
  45. import org.jdiameter.api.cxdx.events.JRegistrationTerminationAnswer;
  46. import org.jdiameter.api.cxdx.events.JRegistrationTerminationRequest;
  47. import org.jdiameter.api.cxdx.events.JServerAssignmentAnswer;
  48. import org.jdiameter.api.cxdx.events.JServerAssignmentRequest;
  49. import org.jdiameter.api.cxdx.events.JUserAuthorizationAnswer;
  50. import org.jdiameter.api.cxdx.events.JUserAuthorizationRequest;
  51. import org.jdiameter.client.impl.app.cxdx.CxDxClientSessionImpl;
  52. import org.jdiameter.common.impl.app.cxdx.CxDxSessionFactoryImpl;
  53. import org.jdiameter.common.impl.app.cxdx.JLocationInfoAnswerImpl;
  54. import org.jdiameter.common.impl.app.cxdx.JLocationInfoRequestImpl;
  55. import org.jdiameter.common.impl.app.cxdx.JMultimediaAuthAnswerImpl;
  56. import org.jdiameter.common.impl.app.cxdx.JMultimediaAuthRequestImpl;
  57. import org.jdiameter.common.impl.app.cxdx.JPushProfileAnswerImpl;
  58. import org.jdiameter.common.impl.app.cxdx.JPushProfileRequestImpl;
  59. import org.jdiameter.common.impl.app.cxdx.JRegistrationTerminationAnswerImpl;
  60. import org.jdiameter.common.impl.app.cxdx.JRegistrationTerminationRequestImpl;
  61. import org.jdiameter.common.impl.app.cxdx.JServerAssignmentAnswerImpl;
  62. import org.jdiameter.common.impl.app.cxdx.JServerAssignmentRequestImpl;
  63. import org.jdiameter.common.impl.app.cxdx.JUserAuthorizationAnswerImpl;
  64. import org.jdiameter.common.impl.app.cxdx.JUserAuthorizationRequestImpl;
  65. import org.jdiameter.server.impl.app.cxdx.CxDxServerSessionImpl;
  66. import org.mobicents.slee.resource.diameter.base.handlers.DiameterRAInterface;
  67. /**
  68. *
  69. * @author <a href="mailto:brainslog@gmail.com"> Alexandre Mendonca </a>
  70. * @author <a href="mailto:baranowb@gmail.com"> Bartosz Baranowski </a>
  71. */
  72. public class CxDxSessionFactory extends CxDxSessionFactoryImpl {
  73. private DiameterRAInterface cxdxResourceAdaptor;
  74. private static final Logger logger = Logger.getLogger(CxDxSessionFactory.class);
  75. public CxDxSessionFactory(DiameterRAInterface cxDxResourceAdaptor, long messageTimeout, SessionFactory sessionFactory) {
  76. super(sessionFactory);
  77. this.cxdxResourceAdaptor = cxDxResourceAdaptor;
  78. }
  79. /* (non-Javadoc)
  80. * @see org.jdiameter.common.api.app.IAppSessionFactory#getNewSession(java.lang.String, java.lang.Class, org.jdiameter.api.ApplicationId, java.lang.Object[])
  81. */
  82. public AppSession getNewSession(String sessionId, Class<? extends AppSession> appSessionClass, ApplicationId applicationId, Object[] args) {
  83. AppSession appSession = null;
  84. if(appSessionClass == ClientCxDxSession.class) {
  85. CxDxClientSessionImpl clientSession = null;
  86. clientSession = (CxDxClientSessionImpl) super.getNewSession(sessionId, appSessionClass, applicationId, args);
  87. appSession = clientSession;
  88. }
  89. else if(appSessionClass == ServerCxDxSession.class) {
  90. org.jdiameter.server.impl.app.cxdx.CxDxServerSessionImpl serverSession = null;
  91. serverSession = (CxDxServerSessionImpl) super.getNewSession(sessionId, appSessionClass, applicationId, args);
  92. appSession = serverSession;
  93. }
  94. else {
  95. throw new IllegalArgumentException("Wrong session class!![" + appSessionClass + "]. Supported[" + ServerCxDxSession.class + "," + ClientCxDxSession.class + "]");
  96. }
  97. return appSession;
  98. }
  99. /*
  100. * (non-Javadoc)
  101. * @see org.jdiameter.api.cxdx.ServerCxDxSessionListener#doLocationInformationRequest(org.jdiameter.api.cxdx.ServerCxDxSession, org.jdiameter.api.cxdx.events.JLocationInfoRequest)
  102. */
  103. public void doLocationInformationRequest(ServerCxDxSession appSession, JLocationInfoRequest request) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
  104. logger.info("Diameter Cx/Dx Session Factory :: doLocationInformationRequest :: appSession[" + appSession + "], Request[" + request + "]");
  105. doFireEvent(appSession, request.getMessage());
  106. }
  107. /*
  108. * (non-Javadoc)
  109. * @see org.jdiameter.api.cxdx.ServerCxDxSessionListener#doMultimediaAuthRequest(org.jdiameter.api.cxdx.ServerCxDxSession, org.jdiameter.api.cxdx.events.JMultimediaAuthRequest)
  110. */
  111. public void doMultimediaAuthRequest(ServerCxDxSession appSession, JMultimediaAuthRequest request) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
  112. logger.info("Diameter Cx/Dx Session Factory :: doMultimediaAuthRequest :: appSession[" + appSession + "], Request[" + request + "]");
  113. doFireEvent(appSession, request.getMessage());
  114. }
  115. /* (non-Javadoc)
  116. * @see org.jdiameter.api.cxdx.ServerCxDxSessionListener#doOtherEvent(org.jdiameter.api.app.AppSession, org.jdiameter.api.app.AppRequestEvent, org.jdiameter.api.app.AppAnswerEvent)
  117. */
  118. public void doOtherEvent(AppSession appSession, AppRequestEvent request, AppAnswerEvent answer) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
  119. logger.info("Diameter Cx/Dx Session Factory :: doOtherEvent :: appSession[" + appSession + "], Request[" + request + "]");
  120. doFireEvent(appSession, answer != null ? answer.getMessage() : request.getMessage());
  121. }
  122. /* (non-Javadoc)
  123. * @see org.jdiameter.api.cxdx.ServerCxDxSessionListener#doPushProfileAnswer(org.jdiameter.api.cxdx.ServerCxDxSession, org.jdiameter.api.cxdx.events.JPushProfileRequest, org.jdiameter.api.cxdx.events.JPushProfileAnswer)
  124. */
  125. public void doPushProfileAnswer(ServerCxDxSession appSession, JPushProfileRequest request, JPushProfileAnswer answer) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
  126. logger.info("Diameter Cx/Dx Session Factory :: doPushProfileAnswer :: appSession[" + appSession + "], Request[" + request + "]");
  127. doFireEvent(appSession, answer.getMessage());
  128. }
  129. /* (non-Javadoc)
  130. * @see org.jdiameter.api.cxdx.ServerCxDxSessionListener#doRegistrationTerminationAnswer(org.jdiameter.api.cxdx.ServerCxDxSession, org.jdiameter.api.cxdx.events.JRegistrationTerminationRequest, org.jdiameter.api.cxdx.events.JRegistrationTerminationAnswer)
  131. */
  132. public void doRegistrationTerminationAnswer(ServerCxDxSession appSession, JRegistrationTerminationRequest request, JRegistrationTerminationAnswer answer) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
  133. logger.info("Diameter Cx/Dx Session Factory :: doRegistrationTerminationAnswer :: appSession[" + appSession + "], Request[" + request + "]");
  134. doFireEvent(appSession, answer.getMessage());
  135. }
  136. /*
  137. * (non-Javadoc)
  138. * @see org.jdiameter.api.cxdx.ServerCxDxSessionListener#doServerAssignmentRequest(org.jdiameter.api.cxdx.ServerCxDxSession, org.jdiameter.api.cxdx.events.JServerAssignmentRequest)
  139. */
  140. public void doServerAssignmentRequest(ServerCxDxSession appSession, JServerAssignmentRequest request) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
  141. logger.info("Diameter Cx/Dx Session Factory :: doServerAssignmentRequest :: appSession[" + appSession + "], Request[" + request + "]");
  142. doFireEvent(appSession, request.getMessage());
  143. }
  144. /*
  145. * (non-Javadoc)
  146. * @see org.jdiameter.api.cxdx.ServerCxDxSessionListener#doUserAuthorizationRequest(org.jdiameter.api.cxdx.ServerCxDxSession, org.jdiameter.api.cxdx.events.JUserAuthorizationRequest)
  147. */
  148. public void doUserAuthorizationRequest(ServerCxDxSession appSession, JUserAuthorizationRequest request) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
  149. logger.info("Diameter Cx/Dx Session Factory :: doUserAuthorizationRequest :: appSession[" + appSession + "], Request[" + request + "]");
  150. doFireEvent(appSession, request.getMessage());
  151. }
  152. /* (non-Javadoc)
  153. * @see org.jdiameter.api.cxdx.ClientCxDxSessionListener#doLocationInformationAnswer(org.jdiameter.api.cxdx.ClientCxDxSession, org.jdiameter.api.cxdx.events.JLocationInfoRequest, org.jdiameter.api.cxdx.events.JLocationInfoAnswer)
  154. */
  155. public void doLocationInformationAnswer(ClientCxDxSession appSession, JLocationInfoRequest request, JLocationInfoAnswer answer) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
  156. logger.info("Diameter Cx/Dx Session Factory :: doLocationInformationAnswer :: appSession[" + appSession + "], Request[" + request + "]");
  157. doFireEvent(appSession, answer.getMessage());
  158. }
  159. /* (non-Javadoc)
  160. * @see org.jdiameter.api.cxdx.ClientCxDxSessionListener#doMultimediaAuthAnswer(org.jdiameter.api.cxdx.ClientCxDxSession, org.jdiameter.api.cxdx.events.JMultimediaAuthRequest, org.jdiameter.api.cxdx.events.JMultimediaAuthAnswer)
  161. */
  162. public void doMultimediaAuthAnswer(ClientCxDxSession appSession, JMultimediaAuthRequest request, JMultimediaAuthAnswer answer) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
  163. logger.info("Diameter Cx/Dx Session Factory :: doMultimediaAuthAnswer :: appSession[" + appSession + "], Request[" + request + "]");
  164. doFireEvent(appSession, answer.getMessage());
  165. }
  166. /*
  167. * (non-Javadoc)
  168. * @see org.jdiameter.api.cxdx.ClientCxDxSessionListener#doPushProfileRequest(org.jdiameter.api.cxdx.ClientCxDxSession, org.jdiameter.api.cxdx.events.JPushProfileRequest)
  169. */
  170. public void doPushProfileRequest(ClientCxDxSession appSession, JPushProfileRequest request) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
  171. logger.info("Diameter Cx/Dx Session Factory :: doPushProfileRequest :: appSession[" + appSession + "], Request[" + request + "]");
  172. doFireEvent(appSession, request.getMessage());
  173. }
  174. /*
  175. * (non-Javadoc)
  176. * @see org.jdiameter.api.cxdx.ClientCxDxSessionListener#doRegistrationTerminationRequest(org.jdiameter.api.cxdx.ClientCxDxSession, org.jdiameter.api.cxdx.events.JRegistrationTerminationRequest)
  177. */
  178. public void doRegistrationTerminationRequest(ClientCxDxSession appSession, JRegistrationTerminationRequest request) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
  179. logger.info("Diameter Cx/Dx Session Factory :: doRegistrationTerminationRequest :: appSession[" + appSession + "], Request[" + request + "]");
  180. doFireEvent(appSession, request.getMessage());
  181. }
  182. /* (non-Javadoc)
  183. * @see org.jdiameter.api.cxdx.ClientCxDxSessionListener#doServerAssignmentAnswer(org.jdiameter.api.cxdx.ClientCxDxSession, org.jdiameter.api.cxdx.events.JServerAssignmentRequest, org.jdiameter.api.cxdx.events.JServerAssignmentAnswer)
  184. */
  185. public void doServerAssignmentAnswer(ClientCxDxSession appSession, JServerAssignmentRequest request, JServerAssignmentAnswer answer) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
  186. logger.info("Diameter Cx/Dx Session Factory :: doServerAssignmentAnswer :: appSession[" + appSession + "], Request[" + request + "]");
  187. doFireEvent(appSession, answer.getMessage());
  188. }
  189. /* (non-Javadoc)
  190. * @see org.jdiameter.api.cxdx.ClientCxDxSessionListener#doUserAuthorizationAnswer(org.jdiameter.api.cxdx.ClientCxDxSession, org.jdiameter.api.cxdx.events.JUserAuthorizationRequest, org.jdiameter.api.cxdx.events.JUserAuthorizationAnswer)
  191. */
  192. public void doUserAuthorizationAnswer(ClientCxDxSession appSession, JUserAuthorizationRequest request, JUserAuthorizationAnswer answer) throws InternalException, IllegalDiameterStateException, RouteException, OverloadException {
  193. logger.info("Diameter Cx/Dx Session Factory :: doUserAuthorizationAnswer :: appSession[" + appSession + "], Request[" + request + "]");
  194. doFireEvent(appSession, answer.getMessage());
  195. }
  196. /*
  197. * (non-Javadoc)
  198. *
  199. * @see
  200. * org.jdiameter.common.impl.app.sh.ShSessionFactoryImpl#stateChanged(org
  201. * .jdiameter.api.app.AppSession, java.lang.Enum, java.lang.Enum)
  202. */
  203. @Override
  204. public void stateChanged(AppSession source, Enum oldState, Enum newState) {
  205. //cxdxResourceAdaptor.stateChanged(source, oldState, newState);
  206. logger.info("Diameter Cx/Dx Session Factory :: stateChanged :: source["+source+"] :: oldState[" + oldState + "], newState[" + newState + "]");
  207. }
  208. /* (non-Javadoc)
  209. * @see org.jdiameter.api.app.StateChangeListener#stateChanged(java.lang.Enum, java.lang.Enum)
  210. */
  211. public void stateChanged(Enum oldState, Enum newState) {
  212. logger.info("Diameter Cx/Dx Session Factory :: stateChanged :: oldState[" + oldState + "], newState[" + newState + "]");
  213. }
  214. /* (non-Javadoc)
  215. * @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createLocationInfoAnswer(org.jdiameter.api.Answer)
  216. */
  217. public JLocationInfoAnswer createLocationInfoAnswer(Answer answer) {
  218. return new JLocationInfoAnswerImpl(answer);
  219. }
  220. /* (non-Javadoc)
  221. * @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createLocationInfoRequest(org.jdiameter.api.Request)
  222. */
  223. public JLocationInfoRequest createLocationInfoRequest(Request request) {
  224. return new JLocationInfoRequestImpl(request);
  225. }
  226. /* (non-Javadoc)
  227. * @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createMultimediaAuthAnswer(org.jdiameter.api.Answer)
  228. */
  229. public JMultimediaAuthAnswer createMultimediaAuthAnswer(Answer answer) {
  230. return new JMultimediaAuthAnswerImpl(answer);
  231. }
  232. /* (non-Javadoc)
  233. * @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createMultimediaAuthRequest(org.jdiameter.api.Request)
  234. */
  235. public JMultimediaAuthRequest createMultimediaAuthRequest(Request request) {
  236. return new JMultimediaAuthRequestImpl(request);
  237. }
  238. /* (non-Javadoc)
  239. * @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createPushProfileAnswer(org.jdiameter.api.Answer)
  240. */
  241. public JPushProfileAnswer createPushProfileAnswer(Answer answer) {
  242. return new JPushProfileAnswerImpl(answer);
  243. }
  244. /* (non-Javadoc)
  245. * @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createPushProfileRequest(org.jdiameter.api.Request)
  246. */
  247. public JPushProfileRequest createPushProfileRequest(Request request) {
  248. return new JPushProfileRequestImpl(request);
  249. }
  250. /* (non-Javadoc)
  251. * @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createRegistrationTerminationAnswer(org.jdiameter.api.Answer)
  252. */
  253. public JRegistrationTerminationAnswer createRegistrationTerminationAnswer(Answer answer) {
  254. return new JRegistrationTerminationAnswerImpl(answer);
  255. }
  256. /* (non-Javadoc)
  257. * @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createRegistrationTerminationRequest(org.jdiameter.api.Request)
  258. */
  259. public JRegistrationTerminationRequest createRegistrationTerminationRequest(Request request) {
  260. return new JRegistrationTerminationRequestImpl(request);
  261. }
  262. /* (non-Javadoc)
  263. * @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createServerAssignmentAnswer(org.jdiameter.api.Answer)
  264. */
  265. public JServerAssignmentAnswer createServerAssignmentAnswer(Answer answer) {
  266. return new JServerAssignmentAnswerImpl(answer);
  267. }
  268. /* (non-Javadoc)
  269. * @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createServerAssignmentRequest(org.jdiameter.api.Request)
  270. */
  271. public JServerAssignmentRequest createServerAssignmentRequest(Request request) {
  272. return new JServerAssignmentRequestImpl(request);
  273. }
  274. /* (non-Javadoc)
  275. * @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createUserAuthorizationAnswer(org.jdiameter.api.Answer)
  276. */
  277. public JUserAuthorizationAnswer createUserAuthorizationAnswer(Answer answer) {
  278. return new JUserAuthorizationAnswerImpl(answer);
  279. }
  280. /* (non-Javadoc)
  281. * @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#createUserAuthorizationRequest(org.jdiameter.api.Request)
  282. */
  283. public JUserAuthorizationRequest createUserAuthorizationRequest(Request request) {
  284. return new JUserAuthorizationRequestImpl(request);
  285. }
  286. /* (non-Javadoc)
  287. * @see org.jdiameter.common.api.app.cxdx.ICxDxMessageFactory#getApplicationId()
  288. */
  289. public long getApplicationId() {
  290. // FIXME: Not needed?
  291. return DiameterCxDxAvpCodes.CXDX_AUTH_APP_ID;
  292. }
  293. private void doFireEvent(AppSession appSession, Message message) {
  294. this.cxdxResourceAdaptor.fireEvent(appSession.getSessions().get(0).getSessionId(), message);
  295. }
  296. }