PageRenderTime 54ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/servers/jain-slee/resources/diameter-base/common/events/src/main/java/org/mobicents/slee/resource/diameter/base/events/DiameterMessageImpl.java

http://mobicents.googlecode.com/
Java | 981 lines | 718 code | 209 blank | 54 comment | 35 complexity | e89ba5ea79ee2d3e45f47ed54a272c00 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.base.events;
  23. import java.util.ArrayList;
  24. import java.util.Date;
  25. import java.util.List;
  26. import net.java.slee.resource.diameter.base.events.DiameterCommand;
  27. import net.java.slee.resource.diameter.base.events.DiameterHeader;
  28. import net.java.slee.resource.diameter.base.events.DiameterMessage;
  29. import net.java.slee.resource.diameter.base.events.avp.Address;
  30. import net.java.slee.resource.diameter.base.events.avp.AvpNotAllowedException;
  31. import net.java.slee.resource.diameter.base.events.avp.AvpUtilities;
  32. import net.java.slee.resource.diameter.base.events.avp.DiameterAvp;
  33. import net.java.slee.resource.diameter.base.events.avp.DiameterAvpType;
  34. import net.java.slee.resource.diameter.base.events.avp.DiameterIdentity;
  35. import net.java.slee.resource.diameter.base.events.avp.DiameterURI;
  36. import net.java.slee.resource.diameter.base.events.avp.FailedAvp;
  37. import net.java.slee.resource.diameter.base.events.avp.IPFilterRule;
  38. import net.java.slee.resource.diameter.base.events.avp.ProxyInfoAvp;
  39. import net.java.slee.resource.diameter.base.events.avp.RedirectHostUsageType;
  40. import net.java.slee.resource.diameter.base.events.avp.VendorSpecificApplicationIdAvp;
  41. import org.apache.log4j.Logger;
  42. import org.jdiameter.api.Avp;
  43. import org.jdiameter.api.AvpDataException;
  44. import org.jdiameter.api.AvpSet;
  45. import org.jdiameter.api.Message;
  46. import org.mobicents.diameter.dictionary.AvpDictionary;
  47. import org.mobicents.diameter.dictionary.AvpRepresentation;
  48. import org.mobicents.slee.resource.diameter.base.events.avp.DiameterAvpImpl;
  49. import org.mobicents.slee.resource.diameter.base.events.avp.FailedAvpImpl;
  50. import org.mobicents.slee.resource.diameter.base.events.avp.GroupedAvpImpl;
  51. import org.mobicents.slee.resource.diameter.base.events.avp.ProxyInfoAvpImpl;
  52. import org.mobicents.slee.resource.diameter.base.events.avp.VendorSpecificApplicationIdAvpImpl;
  53. /**
  54. * Super class for all diameter messages <br>
  55. *
  56. * @author <a href="mailto:baranowb@gmail.com"> Bartosz Baranowski </a>
  57. * @author <a href="mailto:brainslog@gmail.com"> Alexandre Mendonca </a>
  58. */
  59. public abstract class DiameterMessageImpl implements DiameterMessage {
  60. private Logger log = Logger.getLogger(DiameterMessageImpl.class);
  61. protected Message message = null;
  62. /**
  63. * Constructor taking a jDiameter {@link Message} as argument.
  64. *
  65. * @param message the jDiameter Message object to create the DiameterMessage from
  66. */
  67. public DiameterMessageImpl(Message message) {
  68. this.message = message;
  69. }
  70. // Begin of DiameterMessage Implementation
  71. /**
  72. * This method returns long name of this message type - Like
  73. * Device-Watchdog-Request
  74. *
  75. * @return
  76. */
  77. public abstract String getLongName();
  78. /**
  79. * This method return short name of this message type - for instance DWR,DWA
  80. * for DeviceWatchdog message
  81. *
  82. * @return
  83. */
  84. public abstract String getShortName();
  85. public DiameterHeader getHeader() {
  86. return new DiameterHeaderImpl(this.message);
  87. }
  88. public DiameterCommand getCommand() {
  89. return new DiameterCommandImpl(this.message.getCommandCode(), this.message.getApplicationId(), this.getShortName(), this.getLongName(), this.message.isRequest(), this.message.isProxiable());
  90. }
  91. public DiameterAvp[] getAvps() {
  92. DiameterAvp[] avps = new DiameterAvp[0];
  93. try {
  94. avps = getAvpsInternal(message.getAvps());
  95. }
  96. catch (Exception e) {
  97. log.error("Failed to obtain/decode AVP/data.", e);
  98. }
  99. return avps;
  100. }
  101. public DiameterAvp[] getExtensionAvps() {
  102. return getAvps();
  103. }
  104. public void setExtensionAvps(DiameterAvp... avps) throws AvpNotAllowedException {
  105. for (DiameterAvp a : avps) {
  106. this.addAvp(a);
  107. }
  108. }
  109. public Object clone() {
  110. try {
  111. return super.clone();
  112. }
  113. catch (CloneNotSupportedException e) {
  114. return null;
  115. }
  116. }
  117. // AVP Getters and Setters
  118. public boolean hasSessionId() {
  119. return hasAvp(Avp.SESSION_ID);
  120. }
  121. public String getSessionId() {
  122. return getAvpAsUTF8String(Avp.SESSION_ID);
  123. }
  124. public void setSessionId(String sessionId) {
  125. addAvp(Avp.SESSION_ID, sessionId);
  126. }
  127. public boolean hasOriginHost() {
  128. return hasAvp(Avp.ORIGIN_HOST);
  129. }
  130. public DiameterIdentity getOriginHost() {
  131. return getAvpAsDiameterIdentity(Avp.ORIGIN_HOST);
  132. }
  133. public void setOriginHost(DiameterIdentity originHost) {
  134. addAvp(Avp.ORIGIN_HOST, originHost);
  135. }
  136. public boolean hasOriginRealm() {
  137. return hasAvp(Avp.ORIGIN_REALM);
  138. }
  139. public DiameterIdentity getOriginRealm() {
  140. return getAvpAsDiameterIdentity(Avp.ORIGIN_REALM);
  141. }
  142. public void setOriginRealm(DiameterIdentity originRealm) {
  143. addAvp(Avp.ORIGIN_REALM, originRealm);
  144. }
  145. public boolean hasDestinationHost() {
  146. return hasAvp(Avp.DESTINATION_HOST);
  147. }
  148. public DiameterIdentity getDestinationHost() {
  149. return getAvpAsDiameterIdentity(Avp.DESTINATION_HOST);
  150. }
  151. public void setDestinationHost(DiameterIdentity destinationHost) {
  152. addAvp(Avp.DESTINATION_HOST, destinationHost);
  153. }
  154. public boolean hasDestinationRealm() {
  155. return hasAvp(Avp.DESTINATION_REALM);
  156. }
  157. public DiameterIdentity getDestinationRealm() {
  158. return getAvpAsDiameterIdentity(Avp.DESTINATION_REALM);
  159. }
  160. public void setDestinationRealm(DiameterIdentity destinationRealm) {
  161. addAvp(Avp.DESTINATION_REALM, destinationRealm);
  162. }
  163. public boolean hasAcctApplicationId() {
  164. return hasAvp(Avp.ACCT_APPLICATION_ID);
  165. }
  166. public long getAcctApplicationId() {
  167. return getAvpAsUnsigned32(Avp.ACCT_APPLICATION_ID);
  168. }
  169. public void setAcctApplicationId(long acctApplicationId) {
  170. addAvp(Avp.ACCT_APPLICATION_ID, acctApplicationId);
  171. }
  172. public boolean hasAuthApplicationId() {
  173. return hasAvp(Avp.AUTH_APPLICATION_ID);
  174. }
  175. public long getAuthApplicationId() {
  176. return getAvpAsUnsigned32(Avp.AUTH_APPLICATION_ID);
  177. }
  178. public void setAuthApplicationId(long authApplicationId) {
  179. addAvp(Avp.AUTH_APPLICATION_ID, authApplicationId);
  180. }
  181. public boolean hasErrorMessage() {
  182. return hasAvp(Avp.ERROR_MESSAGE);
  183. }
  184. public String getErrorMessage() {
  185. return getAvpAsUTF8String(Avp.ERROR_MESSAGE);
  186. }
  187. public void setErrorMessage(String errorMessage) {
  188. addAvp(Avp.ERROR_MESSAGE, errorMessage);
  189. }
  190. public boolean hasErrorReportingHost() {
  191. return hasAvp(Avp.ERROR_REPORTING_HOST);
  192. }
  193. public DiameterIdentity getErrorReportingHost() {
  194. return getAvpAsDiameterIdentity(Avp.ERROR_REPORTING_HOST);
  195. }
  196. public void setErrorReportingHost(DiameterIdentity errorReportingHost) {
  197. addAvp(Avp.ERROR_REPORTING_HOST, errorReportingHost);
  198. }
  199. public boolean hasEventTimestamp() {
  200. return hasAvp(Avp.EVENT_TIMESTAMP);
  201. }
  202. public Date getEventTimestamp() {
  203. return getAvpAsTime(Avp.EVENT_TIMESTAMP);
  204. }
  205. public void setEventTimestamp(Date eventTimestamp) {
  206. addAvp(Avp.EVENT_TIMESTAMP, eventTimestamp);
  207. }
  208. public boolean hasOriginStateId() {
  209. return hasAvp(Avp.ORIGIN_STATE_ID);
  210. }
  211. public long getOriginStateId() {
  212. return getAvpAsUnsigned32(Avp.ORIGIN_STATE_ID);
  213. }
  214. public void setOriginStateId(long originStateId) {
  215. addAvp(Avp.ORIGIN_STATE_ID, originStateId);
  216. }
  217. public boolean hasResultCode() {
  218. return hasAvp(Avp.RESULT_CODE);
  219. }
  220. public long getResultCode() {
  221. return getAvpAsUnsigned32(Avp.RESULT_CODE);
  222. }
  223. public void setResultCode(long resultCode) {
  224. addAvp(Avp.RESULT_CODE, resultCode);
  225. }
  226. public boolean hasFailedAvp() {
  227. return hasAvp(Avp.FAILED_AVP);
  228. }
  229. public FailedAvp[] getFailedAvps() {
  230. return (FailedAvp[]) getAvpsAsCustom(Avp.FAILED_AVP, FailedAvpImpl.class);
  231. }
  232. public FailedAvp getFailedAvp() {
  233. return (FailedAvp) getAvpAsCustom(Avp.FAILED_AVP, FailedAvpImpl.class);
  234. }
  235. public void setFailedAvp(FailedAvp failedAvp) {
  236. addAvp(Avp.FAILED_AVP, failedAvp.byteArrayValue());
  237. }
  238. public void setFailedAvps(FailedAvp[] failedAvps) {
  239. DiameterAvp[] values = new DiameterAvp[failedAvps.length];
  240. for(int index = 0; index < failedAvps.length; index++) {
  241. values[index] = AvpUtilities.createAvp(Avp.FAILED_AVP, failedAvps[index].getExtensionAvps());
  242. }
  243. this.message.getAvps().removeAvp(Avp.FAILED_AVP);
  244. this.setExtensionAvps(values);
  245. }
  246. public boolean hasUserName() {
  247. return hasAvp(Avp.USER_NAME);
  248. }
  249. public String getUserName() {
  250. return getAvpAsUTF8String(Avp.USER_NAME);
  251. }
  252. public void setUserName(String userName) {
  253. addAvp(Avp.USER_NAME, userName);
  254. }
  255. public void setProxyInfo(ProxyInfoAvp proxyInfo) {
  256. addAvp(Avp.PROXY_INFO, proxyInfo.byteArrayValue());
  257. }
  258. public ProxyInfoAvp[] getProxyInfos() {
  259. return (ProxyInfoAvp[]) getAvpsAsCustom(Avp.PROXY_INFO, ProxyInfoAvpImpl.class);
  260. }
  261. public void setProxyInfos(ProxyInfoAvp[] proxyInfos) {
  262. DiameterAvp[] values = new DiameterAvp[proxyInfos.length];
  263. for(int index = 0; index < proxyInfos.length; index++) {
  264. values[index] = AvpUtilities.createAvp(Avp.PROXY_INFO, proxyInfos[index].getExtensionAvps());
  265. }
  266. this.message.getAvps().removeAvp(Avp.PROXY_INFO);
  267. this.setExtensionAvps(values);
  268. }
  269. public boolean hasRedirectHostUsage() {
  270. return hasAvp(Avp.REDIRECT_HOST_USAGE);
  271. }
  272. public void setRedirectHostUsage(RedirectHostUsageType redirectHostUsage) {
  273. addAvp(Avp.REDIRECT_HOST_USAGE, redirectHostUsage.getValue());
  274. }
  275. public RedirectHostUsageType getRedirectHostUsage() {
  276. return (RedirectHostUsageType) getAvpAsEnumerated(Avp.REDIRECT_HOST_USAGE, RedirectHostUsageType.class);
  277. }
  278. public boolean hasRedirectMaxCacheTime() {
  279. return hasAvp(Avp.REDIRECT_MAX_CACHE_TIME);
  280. }
  281. public void setRedirectMaxCacheTime(long redirectMaxCacheTime) {
  282. addAvp(Avp.REDIRECT_MAX_CACHE_TIME, redirectMaxCacheTime);
  283. }
  284. public long getRedirectMaxCacheTime() {
  285. return getAvpAsUnsigned32(Avp.REDIRECT_MAX_CACHE_TIME);
  286. }
  287. public boolean hasRedirectHosts() {
  288. return hasAvp(Avp.REDIRECT_HOST);
  289. }
  290. public DiameterURI[] getRedirectHosts() {
  291. return getAvpsAsDiameterURI(Avp.REDIRECT_HOST);
  292. }
  293. public void setRedirectHost(DiameterURI redirectHost) {
  294. addAvp(Avp.REDIRECT_HOST, redirectHost.toString());
  295. }
  296. public void setRedirectHosts(DiameterURI[] redirectHosts) {
  297. DiameterAvp[] values = new DiameterAvp[redirectHosts.length];
  298. for(int index = 0; index < redirectHosts.length; index++) {
  299. values[index] = AvpUtilities.createAvp(Avp.REDIRECT_HOST, redirectHosts[index].toString());
  300. }
  301. this.message.getAvps().removeAvp(Avp.REDIRECT_HOST);
  302. this.setExtensionAvps(values);
  303. }
  304. public DiameterIdentity[] getRouteRecords() {
  305. return getAvpsAsDiameterIdentity(Avp.ROUTE_RECORD);
  306. }
  307. public void setRouteRecord(DiameterIdentity routeRecord) {
  308. addAvp(Avp.ROUTE_RECORD, routeRecord);
  309. }
  310. public void setRouteRecords(DiameterIdentity[] routeRecords) {
  311. DiameterAvp[] values = new DiameterAvp[routeRecords.length];
  312. for(int index = 0; index < routeRecords.length; index++) {
  313. values[index] = AvpUtilities.createAvp(Avp.ROUTE_RECORD, routeRecords[index].toString());
  314. }
  315. this.message.getAvps().removeAvp(Avp.ROUTE_RECORD);
  316. this.setExtensionAvps(values);
  317. }
  318. public boolean hasVendorSpecificApplicationId() {
  319. return hasAvp(Avp.VENDOR_SPECIFIC_APPLICATION_ID);
  320. }
  321. public VendorSpecificApplicationIdAvp getVendorSpecificApplicationId() {
  322. return (VendorSpecificApplicationIdAvp) getAvpAsCustom( Avp.VENDOR_SPECIFIC_APPLICATION_ID, VendorSpecificApplicationIdAvpImpl.class );
  323. }
  324. public void setVendorSpecificApplicationId(VendorSpecificApplicationIdAvp vsaid) {
  325. addAvp(Avp.VENDOR_SPECIFIC_APPLICATION_ID, vsaid.byteArrayValue());
  326. }
  327. public Message getGenericData() {
  328. return message;
  329. }
  330. @Override
  331. public String toString() {
  332. DiameterHeader header = this.getHeader();
  333. StringBuilder sb = new StringBuilder();
  334. sb.append("\r\n");
  335. sb.append("+----------------------------------- HEADER ----------------------------------+\r\n");
  336. sb.append("| Version.................").append(header.getVersion()).append("\r\n");
  337. sb.append("| Message-Length..........").append(header.getMessageLength()).append("\r\n");
  338. sb.append("| Command-Flags...........").append("R[" + header.isRequest()).append("] P[").append(header.isProxiable()).append("] ").append("E[").append(header.isError()).append("] T[" + header.isPotentiallyRetransmitted()).append("]").append("\r\n");
  339. sb.append("| Command-Code............").append(this.getHeader().getCommandCode()).append("\r\n");
  340. sb.append("| Application-Id..........").append(this.getHeader().getApplicationId()).append("\r\n");
  341. sb.append("| Hop-By-Hop Identifier...").append(this.getHeader().getHopByHopId()).append("\r\n");
  342. sb.append("| End-To-End Identifier...").append(this.getHeader().getEndToEndId()).append("\r\n");
  343. sb.append("+------------------------------------ AVPs -----------------------------------+\r\n");
  344. for (Avp avp : this.getGenericData().getAvps()) {
  345. sb.append(printAvp(avp, ""));
  346. }
  347. sb.append("+-----------------------------------------------------------------------------+\r\n");
  348. return sb.toString();
  349. }
  350. // ===== AVP Management =====
  351. private DiameterAvp[] getAvpsInternal(AvpSet set) throws Exception {
  352. List<DiameterAvp> avps = new ArrayList<DiameterAvp>();
  353. for (Avp a : set) {
  354. AvpRepresentation avpRep = AvpDictionary.INSTANCE.getAvp(a.getCode(), a.getVendorId());
  355. if (avpRep == null) {
  356. //log.error("Avp with code: " + a.getCode() + " VendorId: " + a.getVendorId() + " is not listed in dictionary, skipping!");
  357. continue;
  358. }
  359. else {
  360. if (avpRep.getType().equals("Grouped")) {
  361. // TODO: There's no info about if AVP has mandatory or protected flags set...
  362. GroupedAvpImpl gAVP = new GroupedAvpImpl(a.getCode(), a.getVendorId(), avpRep.getRuleMandatoryAsInt(), avpRep.getRuleProtectedAsInt(), a.getRaw());
  363. gAVP.setExtensionAvps(getAvpsInternal(a.getGrouped()));
  364. // This is a grouped AVP... let's make it like that.
  365. avps.add(gAVP);
  366. }
  367. else {
  368. // TODO: There's no info about if AVP has mandatory or protected flags set...
  369. avps.add(new DiameterAvpImpl(a.getCode(), a.getVendorId(), avpRep.getRuleMandatoryAsInt(), avpRep.getRuleProtectedAsInt(), a.getRaw(), DiameterAvpType.fromString(avpRep.getType())));
  370. }
  371. }
  372. }
  373. return avps.toArray(new DiameterAvp[avps.size()]);
  374. }
  375. private String printAvp(Avp avp, String indent) {
  376. Object avpValue = null;
  377. StringBuilder avpStringSB = new StringBuilder();
  378. boolean isGrouped = false;
  379. try {
  380. String avpType = AvpDictionary.INSTANCE.getAvp(avp.getCode(), avp.getVendorId()).getType();
  381. if ("Integer32".equals(avpType) || "AppId".equals(avpType)) {
  382. avpValue = avp.getInteger32();
  383. }
  384. else if ("Unsigned32".equals(avpType) || "VendorId".equals(avpType)) {
  385. avpValue = avp.getUnsigned32();
  386. }
  387. else if ("Float64".equals(avpType)) {
  388. avpValue = avp.getFloat64();
  389. }
  390. else if ("Integer64".equals(avpType)) {
  391. avpValue = avp.getInteger64();
  392. }
  393. else if ("Time".equals(avpType)) {
  394. avpValue = avp.getTime();
  395. }
  396. else if ("Unsigned64".equals(avpType)) {
  397. avpValue = avp.getUnsigned64();
  398. }
  399. else if ("Grouped".equals(avpType)) {
  400. avpValue = "<Grouped>";
  401. isGrouped = true;
  402. }
  403. else {
  404. avpValue = avp.getUTF8String().replaceAll("\r", "").replaceAll("\n", "");
  405. }
  406. }
  407. catch (Exception ignore) {
  408. try {
  409. avpValue = avp.getUTF8String().replaceAll("\r", "").replaceAll("\n", "");
  410. }
  411. catch (AvpDataException e) {
  412. avpValue = avp.toString();
  413. }
  414. }
  415. avpStringSB.append("| ").append(indent).append("AVP: Code[").append(avp.getCode()).append("] VendorID[").append(avp.getVendorId()).append("] Value[").append(avpValue).
  416. append("] Flags[V=").append(avp.isVendorId()).append(";M=").append(avp.isMandatory()).append(";P=").append(avp.isEncrypted()).append("]\r\n");
  417. if (isGrouped) {
  418. try {
  419. for (Avp subAvp : avp.getGrouped()) {
  420. avpStringSB.append(printAvp(subAvp, indent + " "));
  421. }
  422. }
  423. catch (AvpDataException e) {
  424. // Failed to ungroup... ignore then...
  425. }
  426. }
  427. return avpStringSB.toString();
  428. }
  429. protected void reportAvpFetchError(String msg, long code) {
  430. log.error("Failed to fetch avp, code: " + code + ". Message: " + msg);
  431. }
  432. // AVP Utilities Proxy Methods
  433. protected Date getAvpAsTime(int code) {
  434. return AvpUtilities.getAvpAsTime(code, message.getAvps());
  435. }
  436. protected Date getAvpAsTime(int code, long vendorId) {
  437. return AvpUtilities.getAvpAsTime(code, vendorId, message.getAvps());
  438. }
  439. protected Date[] getAvpsAsTime(int code) {
  440. return AvpUtilities.getAvpsAsTime(code, message.getAvps());
  441. }
  442. protected Date[] getAvpsAsTime(int code, long vendorId) {
  443. return AvpUtilities.getAvpsAsTime(code, vendorId, message.getAvps());
  444. }
  445. protected void setAvpAsTime(int code, long vendorId, Date value, boolean isMandatory, boolean isProtected) {
  446. AvpUtilities.setAvpAsTime(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
  447. }
  448. protected float getAvpAsFloat32(int code) {
  449. return AvpUtilities.getAvpAsFloat32(code, message.getAvps());
  450. }
  451. protected float getAvpAsFloat32(int code, long vendorId) {
  452. return AvpUtilities.getAvpAsFloat32(code, vendorId, message.getAvps());
  453. }
  454. protected float[] getAvpsAsFloat32(int code) {
  455. return AvpUtilities.getAvpsAsFloat32(code, message.getAvps());
  456. }
  457. protected float[] getAvpsAsFloat32(int code, long vendorId) {
  458. return AvpUtilities.getAvpsAsFloat32(code, vendorId, message.getAvps());
  459. }
  460. protected void setAvpAsFloat32(int code, long vendorId, float value, boolean isMandatory, boolean isProtected) {
  461. AvpUtilities.setAvpAsFloat32(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
  462. }
  463. protected double getAvpAsFloat64(int code) {
  464. return AvpUtilities.getAvpAsFloat64(code, message.getAvps());
  465. }
  466. protected double getAvpAsFloat64(int code, long vendorId) {
  467. return AvpUtilities.getAvpAsFloat64(code, vendorId, message.getAvps());
  468. }
  469. protected double[] getAvpsAsFloat64(int code) {
  470. return AvpUtilities.getAvpsAsFloat64(code, message.getAvps());
  471. }
  472. protected double[] getAvpsAsFloat64(int code, long vendorId) {
  473. return AvpUtilities.getAvpsAsFloat64(code, vendorId, message.getAvps());
  474. }
  475. protected void setAvpAsFloat64(int code, long vendorId, float value, boolean isMandatory, boolean isProtected) {
  476. AvpUtilities.setAvpAsFloat64(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
  477. }
  478. protected byte[] getAvpAsGrouped(int code) {
  479. return AvpUtilities.getAvpAsGrouped(code, message.getAvps());
  480. }
  481. protected byte[] getAvpAsGrouped(int code, long vendorId) {
  482. return AvpUtilities.getAvpAsGrouped(code, vendorId, message.getAvps());
  483. }
  484. protected byte[][] getAvpsAsGrouped(int code) {
  485. return AvpUtilities.getAvpsAsGrouped(code, message.getAvps());
  486. }
  487. protected byte[][] getAvpsAsGrouped(int code, long vendorId) {
  488. return AvpUtilities.getAvpsAsGrouped(code, vendorId, message.getAvps());
  489. }
  490. protected AvpSet setAvpAsGrouped(int code, long vendorId, DiameterAvp[] childs, boolean isMandatory, boolean isProtected) {
  491. return AvpUtilities.setAvpAsGrouped(message, code, vendorId, message.getAvps(), isMandatory, isProtected, childs);
  492. }
  493. protected int getAvpAsInteger32(int code) {
  494. return AvpUtilities.getAvpAsInteger32(code, message.getAvps());
  495. }
  496. protected int getAvpAsInteger32(int code, long vendorId) {
  497. return AvpUtilities.getAvpAsInteger32(code, vendorId, message.getAvps());
  498. }
  499. protected int[] getAvpsAsInteger32(int code) {
  500. return AvpUtilities.getAvpsAsInteger32(code, message.getAvps());
  501. }
  502. protected int[] getAvpsAsInteger32(int code, long vendorId) {
  503. return AvpUtilities.getAvpsAsInteger32(code, vendorId, message.getAvps());
  504. }
  505. protected void setAvpAsInteger32(int code, long vendorId, int value, boolean isMandatory, boolean isProtected) {
  506. AvpUtilities.setAvpAsInteger32(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
  507. }
  508. protected long getAvpAsInteger64(int code) {
  509. return AvpUtilities.getAvpAsInteger64(code, message.getAvps());
  510. }
  511. protected long getAvpAsInteger64(int code, long vendorId) {
  512. return AvpUtilities.getAvpAsInteger64(code, vendorId, message.getAvps());
  513. }
  514. protected long[] getAvpsAsInteger64(int code) {
  515. return AvpUtilities.getAvpsAsInteger64(code, message.getAvps());
  516. }
  517. protected long[] getAvpsAsInteger64(int code, long vendorId) {
  518. return AvpUtilities.getAvpsAsInteger64(code, vendorId, message.getAvps());
  519. }
  520. protected void setAvpAsInteger64(int code, long vendorId, long value, boolean isMandatory, boolean isProtected) {
  521. AvpUtilities.setAvpAsInteger64(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
  522. }
  523. protected long getAvpAsUnsigned32(int code) {
  524. return AvpUtilities.getAvpAsUnsigned32(code, message.getAvps());
  525. }
  526. protected long getAvpAsUnsigned32(int code, long vendorId) {
  527. return AvpUtilities.getAvpAsUnsigned32(code, vendorId, message.getAvps());
  528. }
  529. protected long[] getAvpsAsUnsigned32(int code) {
  530. return AvpUtilities.getAvpsAsUnsigned32(code, message.getAvps());
  531. }
  532. protected long[] getAvpsAsUnsigned32(int code, long vendorId) {
  533. return AvpUtilities.getAvpsAsUnsigned32(code, vendorId, message.getAvps());
  534. }
  535. protected void setAvpAsUnsigned32(int code, long vendorId, long value, boolean isMandatory, boolean isProtected) {
  536. AvpUtilities.setAvpAsUnsigned32(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
  537. }
  538. protected long getAvpAsUnsigned64(int code) {
  539. return AvpUtilities.getAvpAsUnsigned64(code, message.getAvps());
  540. }
  541. protected long getAvpAsUnsigned64(int code, long vendorId) {
  542. return AvpUtilities.getAvpAsUnsigned64(code, vendorId, message.getAvps());
  543. }
  544. protected long[] getAvpsAsUnsigned64(int code) {
  545. return AvpUtilities.getAvpsAsUnsigned64(code, message.getAvps());
  546. }
  547. protected long[] getAvpsAsUnsigned64(int code, long vendorId) {
  548. return AvpUtilities.getAvpsAsUnsigned64(code, vendorId, message.getAvps());
  549. }
  550. protected void setAvpAsUnsigned64(int code, long vendorId, long value, boolean isMandatory, boolean isProtected) {
  551. AvpUtilities.setAvpAsUnsigned64(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
  552. }
  553. protected String getAvpAsUTF8String(int code) {
  554. return AvpUtilities.getAvpAsUTF8String(code, message.getAvps());
  555. }
  556. protected String getAvpAsUTF8String(int code, long vendorId) {
  557. return AvpUtilities.getAvpAsUTF8String(code, vendorId, message.getAvps());
  558. }
  559. protected String[] getAvpsAsUTF8String(int code) {
  560. return AvpUtilities.getAvpsAsUTF8String(code, message.getAvps());
  561. }
  562. protected String[] getAvpsAsUTF8String(int code, long vendorId) {
  563. return AvpUtilities.getAvpsAsUTF8String(code, vendorId, message.getAvps());
  564. }
  565. protected void setAvpAsUTF8String(int code, long vendorId, String value, boolean isMandatory, boolean isProtected) {
  566. AvpUtilities.setAvpAsUTF8String(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
  567. }
  568. protected byte[] getAvpAsOctetString(int code) {
  569. return AvpUtilities.getAvpAsOctetString(code, message.getAvps());
  570. }
  571. protected byte[] getAvpAsOctetString(int code, long vendorId) {
  572. return AvpUtilities.getAvpAsOctetString(code, vendorId, message.getAvps());
  573. }
  574. protected byte[][] getAvpsAsOctetString(int code) {
  575. return AvpUtilities.getAvpsAsOctetString(code, message.getAvps());
  576. }
  577. protected byte[][] getAvpsAsOctetString(int code, long vendorId) {
  578. return AvpUtilities.getAvpsAsOctetString(code, vendorId, message.getAvps());
  579. }
  580. protected void setAvpAsOctetString(int code, long vendorId, String value, boolean isMandatory, boolean isProtected) {
  581. AvpUtilities.setAvpAsOctetString(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
  582. }
  583. protected byte[] getAvpAsRaw(int code) {
  584. return AvpUtilities.getAvpAsRaw(code, message.getAvps());
  585. }
  586. protected byte[] getAvpAsRaw(int code, long vendorId) {
  587. return AvpUtilities.getAvpAsRaw(code, vendorId, message.getAvps());
  588. }
  589. protected byte[][] getAvpsAsRaw(int code) {
  590. return AvpUtilities.getAvpsAsRaw(code, message.getAvps());
  591. }
  592. protected byte[][] getAvpsAsRaw(int code, long vendorId) {
  593. return AvpUtilities.getAvpsAsRaw(code, vendorId, message.getAvps());
  594. }
  595. protected void setAvpAsRaw(int code, long vendorId, byte[] value, boolean isMandatory, boolean isProtected) {
  596. AvpUtilities.setAvpAsRaw(message, code, vendorId, message.getAvps(), isMandatory, isProtected, value);
  597. }
  598. protected Object getAvpAsCustom(int code, Class clazz) {
  599. return AvpUtilities.getAvpAsCustom(code, message.getAvps(), clazz);
  600. }
  601. protected Object getAvpAsCustom(int code, long vendorId, Class clazz) {
  602. return AvpUtilities.getAvpAsCustom(code, vendorId, message.getAvps(), clazz);
  603. }
  604. protected Object[] getAvpsAsCustom(int code, Class clazz) {
  605. return AvpUtilities.getAvpsAsCustom(code, message.getAvps(), clazz);
  606. }
  607. protected Object[] getAvpsAsCustom(int code, long vendorId, Class clazz) {
  608. return AvpUtilities.getAvpsAsCustom(code, vendorId, message.getAvps(), clazz);
  609. }
  610. protected DiameterIdentity getAvpAsDiameterIdentity(int code) {
  611. return AvpUtilities.getAvpAsDiameterIdentity(code, message.getAvps());
  612. }
  613. protected DiameterIdentity getAvpAsDiameterIdentity(int code, long vendorId) {
  614. return AvpUtilities.getAvpAsDiameterIdentity(code, vendorId, message.getAvps());
  615. }
  616. protected DiameterIdentity[] getAvpsAsDiameterIdentity(int code) {
  617. return AvpUtilities.getAvpsAsDiameterIdentity(code, message.getAvps());
  618. }
  619. protected DiameterIdentity[] getAvpsAsDiameterIdentity(int code, long vendorId) {
  620. return AvpUtilities.getAvpsAsDiameterIdentity(code, vendorId, message.getAvps());
  621. }
  622. protected DiameterURI getAvpAsDiameterURI(int code) {
  623. return AvpUtilities.getAvpAsDiameterURI(code, message.getAvps());
  624. }
  625. protected DiameterURI getAvpAsDiameterURI(int code, long vendorId) {
  626. return AvpUtilities.getAvpAsDiameterURI(code, vendorId, message.getAvps());
  627. }
  628. protected DiameterURI[] getAvpsAsDiameterURI(int code) {
  629. return AvpUtilities.getAvpsAsDiameterURI(code, message.getAvps());
  630. }
  631. protected DiameterURI[] getAvpsAsDiameterURI(int code, long vendorId) {
  632. return AvpUtilities.getAvpsAsDiameterURI(code, vendorId, message.getAvps());
  633. }
  634. protected Address getAvpAsAddress(int code) {
  635. return AvpUtilities.getAvpAsAddress(code, message.getAvps());
  636. }
  637. protected Address getAvpAsAddress(int code, long vendorId) {
  638. return AvpUtilities.getAvpAsAddress(code, vendorId, message.getAvps());
  639. }
  640. protected Address[] getAvpsAsAddress(int code) {
  641. return AvpUtilities.getAvpsAsAddress(code, message.getAvps());
  642. }
  643. protected Address[] getAvpsAsAddress(int code, long vendorId) {
  644. return AvpUtilities.getAvpsAsAddress(code, vendorId, message.getAvps());
  645. }
  646. protected Object getAvpAsEnumerated(int code, Class clazz) {
  647. return AvpUtilities.getAvpAsEnumerated(code, message.getAvps(), clazz);
  648. }
  649. protected Object getAvpAsEnumerated(int code, long vendorId, Class clazz) {
  650. return AvpUtilities.getAvpAsEnumerated(code, vendorId, message.getAvps(), clazz);
  651. }
  652. protected Object[] getAvpsAsEnumerated(int code, Class clazz) {
  653. return AvpUtilities.getAvpsAsEnumerated(code, message.getAvps(), clazz);
  654. }
  655. protected Object[] getAvpsAsEnumerated(int code, long vendorId, Class clazz) {
  656. return AvpUtilities.getAvpsAsEnumerated(code, vendorId, message.getAvps(), clazz);
  657. }
  658. protected IPFilterRule getAvpAsIPFilterRule(int code) {
  659. return AvpUtilities.getAvpAsIPFilterRule(code, message.getAvps());
  660. }
  661. protected IPFilterRule getAvpAsIPFilterRule(int code, long vendorId) {
  662. return AvpUtilities.getAvpAsIPFilterRule(code, vendorId, message.getAvps());
  663. }
  664. protected IPFilterRule[] getAvpsAsIPFilterRule(int code) {
  665. return AvpUtilities.getAvpsAsIPFilterRule(code, message.getAvps());
  666. }
  667. protected IPFilterRule[] getAvpsAsIPFilterRule(int code, long vendorId) {
  668. return AvpUtilities.getAvpsAsIPFilterRule(code, vendorId, message.getAvps());
  669. }
  670. protected void addAvp(String avpName, Object avp) {
  671. AvpUtilities.addAvp(message, avpName, message.getAvps(), avp);
  672. }
  673. protected void addAvp(int avpCode, Object avp) {
  674. AvpUtilities.addAvp(message, avpCode, 0L, message.getAvps(), avp);
  675. }
  676. protected void addAvp(int avpCode, long vendorId, Object avp) {
  677. AvpUtilities.addAvp(message, avpCode, vendorId, message.getAvps(), avp);
  678. }
  679. protected boolean hasAvp(int code) {
  680. return AvpUtilities.hasAvp(code, 0L, message.getAvps());
  681. }
  682. protected boolean hasAvp(int code, long vendorId) {
  683. return AvpUtilities.hasAvp(code, vendorId, message.getAvps());
  684. }
  685. protected Object getAvp(int avpCode) {
  686. return getAvp(avpCode, 0L);
  687. }
  688. protected Object getAvp(String avpName) {
  689. AvpRepresentation avpRep = AvpDictionary.INSTANCE.getAvp(avpName);
  690. if(avpRep != null) {
  691. return getAvp(avpRep.getCode(), avpRep.getVendorId());
  692. }
  693. return null;
  694. }
  695. protected Object getAvp(int avpCode, long vendorId) {
  696. AvpRepresentation avpRep = AvpDictionary.INSTANCE.getAvp(avpCode, vendorId);
  697. if(avpRep != null)
  698. {
  699. int avpType = AvpRepresentation.Type.valueOf(avpRep.getType()).ordinal();
  700. switch (avpType)
  701. {
  702. case DiameterAvpType._ADDRESS:
  703. case DiameterAvpType._DIAMETER_IDENTITY:
  704. case DiameterAvpType._DIAMETER_URI:
  705. case DiameterAvpType._IP_FILTER_RULE:
  706. case DiameterAvpType._OCTET_STRING:
  707. case DiameterAvpType._QOS_FILTER_RULE:
  708. {
  709. return getAvpAsOctetString(avpCode, vendorId);
  710. }
  711. case DiameterAvpType._ENUMERATED:
  712. case DiameterAvpType._INTEGER_32:
  713. {
  714. return getAvpAsInteger32(avpCode, vendorId);
  715. }
  716. case DiameterAvpType._FLOAT_32:
  717. {
  718. return getAvpAsFloat32(avpCode, vendorId);
  719. }
  720. case DiameterAvpType._FLOAT_64:
  721. {
  722. return getAvpAsFloat64(avpCode, vendorId);
  723. }
  724. case DiameterAvpType._GROUPED:
  725. {
  726. return getAvpAsGrouped(avpCode, vendorId);
  727. }
  728. case DiameterAvpType._INTEGER_64:
  729. {
  730. return getAvpAsInteger64(avpCode, vendorId);
  731. }
  732. case DiameterAvpType._TIME:
  733. {
  734. return getAvpAsTime(avpCode, vendorId);
  735. }
  736. case DiameterAvpType._UNSIGNED_32:
  737. {
  738. return getAvpAsUnsigned32(avpCode, vendorId);
  739. }
  740. case DiameterAvpType._UNSIGNED_64:
  741. {
  742. return getAvpAsUnsigned64(avpCode, vendorId);
  743. }
  744. case DiameterAvpType._UTF8_STRING:
  745. {
  746. return getAvpAsUTF8String(avpCode, vendorId);
  747. }
  748. default:
  749. {
  750. return getAvpAsRaw(avpCode, vendorId);
  751. }
  752. }
  753. }
  754. return null;
  755. }
  756. public void addAvp(DiameterAvp avp) {
  757. AvpUtilities.addAvp(avp, message.getAvps());
  758. }
  759. //some hack
  760. private transient Object data = null;
  761. public void setData(Object d) {
  762. this.data = d;
  763. }
  764. public Object removeData() {
  765. Object o = this.data;
  766. this.data = null;
  767. return o;
  768. }
  769. public Object getData() {
  770. return this.data;
  771. }
  772. }