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

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

http://mobicents.googlecode.com/
Java | 639 lines | 469 code | 134 blank | 36 comment | 35 complexity | c5722b03f44f873130347218579d8e18 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.avp;
  23. import java.io.Externalizable;
  24. import java.io.IOException;
  25. import java.util.ArrayList;
  26. import java.util.Arrays;
  27. import java.util.Date;
  28. import java.util.List;
  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.GroupedAvp;
  37. import net.java.slee.resource.diameter.base.events.avp.IPFilterRule;
  38. import org.apache.log4j.Logger;
  39. import org.jdiameter.api.Avp;
  40. import org.jdiameter.api.AvpDataException;
  41. import org.jdiameter.api.AvpSet;
  42. import org.mobicents.diameter.dictionary.AvpDictionary;
  43. import org.mobicents.diameter.dictionary.AvpRepresentation;
  44. /**
  45. *
  46. * Implementation of {@link GroupedAvp}.
  47. *
  48. * @author <a href = "mailto:baranowb@gmail.com"> Bartosz Baranowski </a>
  49. * @author <a href = "mailto:brainslog@gmail.com"> Alexandre Mendonca </a>
  50. * @author Erick Svenson
  51. */
  52. public class GroupedAvpImpl extends DiameterAvpImpl implements GroupedAvp , Externalizable {
  53. private static transient final Logger logger = Logger.getLogger(GroupedAvpImpl.class);
  54. protected transient AvpSet avpSet;
  55. public GroupedAvpImpl() {
  56. super();
  57. }
  58. public GroupedAvpImpl(int code, long vendorId, int mnd, int prt, byte[] value) {
  59. super(code, vendorId, mnd, prt, value, DiameterAvpType.GROUPED);
  60. try {
  61. avpSet = AvpUtilities.getParser().decodeAvpSet(value);
  62. }
  63. catch (IOException ioe) {
  64. logger.error("Failure creating Grouped AVP.", ioe);
  65. }
  66. catch (AvpDataException ade) {
  67. logger.error("Failure creating Grouped AVP.", ade);
  68. }
  69. }
  70. public DiameterAvp[] getExtensionAvps() {
  71. DiameterAvp[] acc = new DiameterAvp[0];
  72. if(avpSet != null && avpSet.size() > 0) {
  73. try {
  74. acc = getExtensionAvpsInternal(avpSet);
  75. }
  76. catch (Exception e) {
  77. logger.error("Failure getting Extension AVPs.", e);
  78. }
  79. }
  80. return acc;
  81. }
  82. public void setExtensionAvps(DiameterAvp[] extensions) throws AvpNotAllowedException {
  83. if(extensions == null) {
  84. return;
  85. }
  86. try {
  87. for (DiameterAvp avp : extensions) {
  88. addAvp(avp, avpSet);
  89. }
  90. }
  91. catch (Exception e) {
  92. logger.error("Failure setting Extension AVPs.", e);
  93. }
  94. }
  95. public double doubleValue() {
  96. throw new IllegalArgumentException();
  97. }
  98. public float floatValue() {
  99. throw new IllegalArgumentException();
  100. }
  101. public int intValue() {
  102. throw new IllegalArgumentException();
  103. }
  104. public long longValue() {
  105. throw new IllegalArgumentException();
  106. }
  107. public String stringValue() {
  108. throw new IllegalArgumentException();
  109. }
  110. public byte[] byteArrayValue() {
  111. return AvpUtilities.getParser().encodeAvpSet(avpSet);
  112. }
  113. public AvpSet getGenericData() {
  114. return avpSet;
  115. }
  116. public Object clone() {
  117. // TODO: Confirm it works as supposed! Findbugs complained...
  118. // return new GroupedAvpImpl(code, vendorId, mnd, prt, byteArrayValue());
  119. return super.clone();
  120. }
  121. private void addAvp(DiameterAvp avp, AvpSet set) {
  122. if(avp instanceof GroupedAvp) {
  123. AvpSet avpSet = set.addGroupedAvp(avp.getCode(), avp.getVendorId(), avp.getMandatoryRule() != DiameterAvp.FLAG_RULE_MUSTNOT, avp.getProtectedRule() == DiameterAvp.FLAG_RULE_MUST);
  124. DiameterAvp[] groupedAVPs = ((GroupedAvp)avp).getExtensionAvps();
  125. for(DiameterAvp avpFromGroup : groupedAVPs) {
  126. addAvp(avpFromGroup, avpSet);
  127. }
  128. }
  129. else if(avp != null) {
  130. set.addAvp(avp.getCode(), avp.byteArrayValue(), avp.getVendorId(), avp.getMandatoryRule() != DiameterAvp.FLAG_RULE_MUSTNOT, avp.getProtectedRule() == DiameterAvp.FLAG_RULE_MUST);
  131. }
  132. }
  133. private DiameterAvp[] getExtensionAvpsInternal(AvpSet set) throws Exception {
  134. List<DiameterAvp> avps = new ArrayList<DiameterAvp>();
  135. for (Avp a : set) {
  136. AvpRepresentation avpRep = AvpDictionary.INSTANCE.getAvp(a.getCode(), a.getVendorId());
  137. if(avpRep != null) {
  138. if(avpRep.isGrouped()) {
  139. AvpSet grouped = a.getGrouped(); // warning, this changes getRaw to return byte[0] if successful
  140. GroupedAvpImpl gAVP = new GroupedAvpImpl(a.getCode(), a.getVendorId(),
  141. a.isMandatory() ? DiameterAvp.FLAG_RULE_MUST : DiameterAvp.FLAG_RULE_MUSTNOT, a.isEncrypted() ? DiameterAvp.FLAG_RULE_MUST : DiameterAvp.FLAG_RULE_MUSTNOT, a.getRaw());
  142. gAVP.setExtensionAvps(getExtensionAvpsInternal(grouped));
  143. avps.add(gAVP);
  144. }
  145. else {
  146. avps.add(new DiameterAvpImpl(a.getCode(), a.getVendorId(), a.isMandatory() ? DiameterAvp.FLAG_RULE_MUST : DiameterAvp.FLAG_RULE_MUSTNOT, a.isEncrypted() ? DiameterAvp.FLAG_RULE_MUST : DiameterAvp.FLAG_RULE_MUSTNOT, a.getRaw(), DiameterAvpType.fromString(avpRep.getType())));
  147. }
  148. }
  149. else { // we don't have it in dictionary
  150. try {
  151. AvpSet grouped = a.getGrouped(); // warning, this changes getRaw to return byte[0] if successful
  152. GroupedAvpImpl gAVP = new GroupedAvpImpl(a.getCode(), a.getVendorId(),
  153. a.isMandatory() ? DiameterAvp.FLAG_RULE_MUST : DiameterAvp.FLAG_RULE_MUSTNOT, a.isEncrypted() ? DiameterAvp.FLAG_RULE_MUST : DiameterAvp.FLAG_RULE_MUSTNOT, a.getRaw());
  154. gAVP.setExtensionAvps(getExtensionAvpsInternal(grouped));
  155. avps.add(gAVP);
  156. }
  157. catch (AvpDataException ade) {
  158. avps.add(new DiameterAvpImpl(a.getCode(), a.getVendorId(), a.isMandatory() ? DiameterAvp.FLAG_RULE_MUST : DiameterAvp.FLAG_RULE_MUSTNOT, a.isEncrypted() ? DiameterAvp.FLAG_RULE_MUST : DiameterAvp.FLAG_RULE_MUSTNOT, a.getRaw(), null));
  159. }
  160. }
  161. }
  162. return avps.toArray(new DiameterAvp[avps.size()]);
  163. }
  164. // AVP Utilities Proxy Methods
  165. protected Date getAvpAsTime(int code) {
  166. return AvpUtilities.getAvpAsTime(code, avpSet);
  167. }
  168. protected Date getAvpAsTime(int code, long vendorId) {
  169. return AvpUtilities.getAvpAsTime(code, vendorId, avpSet);
  170. }
  171. protected Date[] getAvpsAsTime(int code) {
  172. return AvpUtilities.getAvpsAsTime(code, avpSet);
  173. }
  174. protected Date[] getAvpsAsTime(int code, long vendorId) {
  175. return AvpUtilities.getAvpsAsTime(code, vendorId, avpSet);
  176. }
  177. protected void setAvpAsTime(int code, long vendorId, Date value, boolean isMandatory, boolean isProtected) {
  178. AvpUtilities.setAvpAsTime(this, code, vendorId, avpSet, isMandatory, isProtected, value);
  179. }
  180. protected float getAvpAsFloat32(int code) {
  181. return AvpUtilities.getAvpAsFloat32(code, avpSet);
  182. }
  183. protected float getAvpAsFloat32(int code, long vendorId) {
  184. return AvpUtilities.getAvpAsFloat32(code, vendorId, avpSet);
  185. }
  186. protected float[] getAvpsAsFloat32(int code) {
  187. return AvpUtilities.getAvpsAsFloat32(code, avpSet);
  188. }
  189. protected float[] getAvpsAsFloat32(int code, long vendorId) {
  190. return AvpUtilities.getAvpsAsFloat32(code, vendorId, avpSet);
  191. }
  192. protected void setAvpAsFloat32(int code, long vendorId, float value, boolean isMandatory, boolean isProtected) {
  193. AvpUtilities.setAvpAsFloat32(this, code, vendorId, avpSet, isMandatory, isProtected, value);
  194. }
  195. protected double getAvpAsFloat64(int code) {
  196. return AvpUtilities.getAvpAsFloat64(code, avpSet);
  197. }
  198. protected double getAvpAsFloat64(int code, long vendorId) {
  199. return AvpUtilities.getAvpAsFloat64(code, vendorId, avpSet);
  200. }
  201. protected double[] getAvpsAsFloat64(int code) {
  202. return AvpUtilities.getAvpsAsFloat64(code, avpSet);
  203. }
  204. protected double[] getAvpsAsFloat64(int code, long vendorId) {
  205. return AvpUtilities.getAvpsAsFloat64(code, vendorId, avpSet);
  206. }
  207. protected void setAvpAsFloat64(int code, long vendorId, float value, boolean isMandatory, boolean isProtected) {
  208. AvpUtilities.setAvpAsFloat64(this, code, vendorId, avpSet, isMandatory, isProtected, value);
  209. }
  210. protected byte[] getAvpAsGrouped(int code) {
  211. return AvpUtilities.getAvpAsGrouped(code, avpSet);
  212. }
  213. protected byte[] getAvpAsGrouped(int code, long vendorId) {
  214. return AvpUtilities.getAvpAsGrouped(code, vendorId, avpSet);
  215. }
  216. protected byte[][] getAvpsAsGrouped(int code) {
  217. return AvpUtilities.getAvpsAsGrouped(code, avpSet);
  218. }
  219. protected byte[][] getAvpsAsGrouped(int code, long vendorId) {
  220. return AvpUtilities.getAvpsAsGrouped(code, vendorId, avpSet);
  221. }
  222. protected AvpSet setAvpAsGrouped(int code, long vendorId, DiameterAvp[] childs, boolean isMandatory, boolean isProtected) {
  223. return AvpUtilities.setAvpAsGrouped(this, code, vendorId, avpSet, isMandatory, isProtected, childs);
  224. }
  225. protected int getAvpAsInteger32(int code) {
  226. return AvpUtilities.getAvpAsInteger32(code, avpSet);
  227. }
  228. protected int getAvpAsInteger32(int code, long vendorId) {
  229. return AvpUtilities.getAvpAsInteger32(code, vendorId, avpSet);
  230. }
  231. protected int[] getAvpsAsInteger32(int code) {
  232. return AvpUtilities.getAvpsAsInteger32(code, avpSet);
  233. }
  234. protected int[] getAvpsAsInteger32(int code, long vendorId) {
  235. return AvpUtilities.getAvpsAsInteger32(code, vendorId, avpSet);
  236. }
  237. protected void setAvpAsInteger32(int code, long vendorId, int value, boolean isMandatory, boolean isProtected) {
  238. AvpUtilities.setAvpAsInteger32(this, code, vendorId, avpSet, isMandatory, isProtected, value);
  239. }
  240. protected long getAvpAsInteger64(int code) {
  241. return AvpUtilities.getAvpAsInteger64(code, avpSet);
  242. }
  243. protected long getAvpAsInteger64(int code, long vendorId) {
  244. return AvpUtilities.getAvpAsInteger64(code, vendorId, avpSet);
  245. }
  246. protected long[] getAvpsAsInteger64(int code) {
  247. return AvpUtilities.getAvpsAsInteger64(code, avpSet);
  248. }
  249. protected long[] getAvpsAsInteger64(int code, long vendorId) {
  250. return AvpUtilities.getAvpsAsInteger64(code, vendorId, avpSet);
  251. }
  252. protected void setAvpAsInteger64(int code, long vendorId, long value, boolean isMandatory, boolean isProtected) {
  253. AvpUtilities.setAvpAsInteger64(this, code, vendorId, avpSet, isMandatory, isProtected, value);
  254. }
  255. protected long getAvpAsUnsigned32(int code) {
  256. return AvpUtilities.getAvpAsUnsigned32(code, avpSet);
  257. }
  258. protected long getAvpAsUnsigned32(int code, long vendorId) {
  259. return AvpUtilities.getAvpAsUnsigned32(code, vendorId, avpSet);
  260. }
  261. protected long[] getAvpsAsUnsigned32(int code) {
  262. return AvpUtilities.getAvpsAsUnsigned32(code, avpSet);
  263. }
  264. protected long[] getAvpsAsUnsigned32(int code, long vendorId) {
  265. return AvpUtilities.getAvpsAsUnsigned32(code, vendorId, avpSet);
  266. }
  267. protected void setAvpAsUnsigned32(int code, long vendorId, long value, boolean isMandatory, boolean isProtected) {
  268. AvpUtilities.setAvpAsUnsigned32(this, code, vendorId, avpSet, isMandatory, isProtected, value);
  269. }
  270. protected long getAvpAsUnsigned64(int code) {
  271. return AvpUtilities.getAvpAsUnsigned64(code, avpSet);
  272. }
  273. protected long getAvpAsUnsigned64(int code, long vendorId) {
  274. return AvpUtilities.getAvpAsUnsigned64(code, vendorId, avpSet);
  275. }
  276. protected long[] getAvpsAsUnsigned64(int code) {
  277. return AvpUtilities.getAvpsAsUnsigned64(code, avpSet);
  278. }
  279. protected long[] getAvpsAsUnsigned64(int code, long vendorId) {
  280. return AvpUtilities.getAvpsAsUnsigned64(code, vendorId, avpSet);
  281. }
  282. protected void setAvpAsUnsigned64(int code, long vendorId, long value, boolean isMandatory, boolean isProtected) {
  283. AvpUtilities.setAvpAsUnsigned64(this, code, vendorId, avpSet, isMandatory, isProtected, value);
  284. }
  285. protected String getAvpAsUTF8String(int code) {
  286. return AvpUtilities.getAvpAsUTF8String(code, avpSet);
  287. }
  288. protected String getAvpAsUTF8String(int code, long vendorId) {
  289. return AvpUtilities.getAvpAsUTF8String(code, vendorId, avpSet);
  290. }
  291. protected String[] getAvpsAsUTF8String(int code) {
  292. return AvpUtilities.getAvpsAsUTF8String(code, avpSet);
  293. }
  294. protected String[] getAvpsAsUTF8String(int code, long vendorId) {
  295. return AvpUtilities.getAvpsAsUTF8String(code, vendorId, avpSet);
  296. }
  297. protected void setAvpAsUTF8String(int code, long vendorId, String value, boolean isMandatory, boolean isProtected) {
  298. AvpUtilities.setAvpAsUTF8String(this, code, vendorId, avpSet, isMandatory, isProtected, value);
  299. }
  300. protected byte[] getAvpAsOctetString(int code) {
  301. return AvpUtilities.getAvpAsOctetString(code, avpSet);
  302. }
  303. protected byte[] getAvpAsOctetString(int code, long vendorId) {
  304. return AvpUtilities.getAvpAsOctetString(code, vendorId, avpSet);
  305. }
  306. protected byte[][] getAvpsAsOctetString(int code) {
  307. return AvpUtilities.getAvpsAsOctetString(code, avpSet);
  308. }
  309. protected byte[][] getAvpsAsOctetString(int code, long vendorId) {
  310. return AvpUtilities.getAvpsAsOctetString(code, vendorId, avpSet);
  311. }
  312. protected void setAvpAsOctetString(int code, long vendorId, String value, boolean isMandatory, boolean isProtected) {
  313. AvpUtilities.setAvpAsOctetString(this, code, vendorId, avpSet, isMandatory, isProtected, value);
  314. }
  315. protected byte[] getAvpAsRaw(int code) {
  316. return AvpUtilities.getAvpAsRaw(code, avpSet);
  317. }
  318. protected byte[] getAvpAsRaw(int code, long vendorId) {
  319. return AvpUtilities.getAvpAsRaw(code, vendorId, avpSet);
  320. }
  321. protected byte[][] getAvpsAsRaw(int code) {
  322. return AvpUtilities.getAvpsAsRaw(code, avpSet);
  323. }
  324. protected byte[][] getAvpsAsRaw(int code, long vendorId) {
  325. return AvpUtilities.getAvpsAsRaw(code, vendorId, avpSet);
  326. }
  327. protected void setAvpAsRaw(int code, long vendorId, byte[] value, boolean isMandatory, boolean isProtected) {
  328. AvpUtilities.setAvpAsRaw(this, code, vendorId, avpSet, isMandatory, isProtected, value);
  329. }
  330. protected Object getAvpAsCustom(int code, Class clazz) {
  331. return AvpUtilities.getAvpAsCustom(code, avpSet, clazz);
  332. }
  333. protected Object getAvpAsCustom(int code, long vendorId, Class clazz) {
  334. return AvpUtilities.getAvpAsCustom(code, vendorId, avpSet, clazz);
  335. }
  336. protected Object[] getAvpsAsCustom(int code, Class clazz) {
  337. return AvpUtilities.getAvpsAsCustom(code, avpSet, clazz);
  338. }
  339. protected Object[] getAvpsAsCustom(int code, long vendorId, Class clazz) {
  340. return AvpUtilities.getAvpsAsCustom(code, vendorId, avpSet, clazz);
  341. }
  342. protected DiameterIdentity getAvpAsDiameterIdentity(int code) {
  343. return AvpUtilities.getAvpAsDiameterIdentity(code, avpSet);
  344. }
  345. protected DiameterIdentity getAvpAsDiameterIdentity(int code, long vendorId) {
  346. return AvpUtilities.getAvpAsDiameterIdentity(code, vendorId, avpSet);
  347. }
  348. protected DiameterIdentity[] getAvpsAsDiameterIdentity(int code) {
  349. return AvpUtilities.getAvpsAsDiameterIdentity(code, avpSet);
  350. }
  351. protected DiameterIdentity[] getAvpsAsDiameterIdentity(int code, long vendorId) {
  352. return AvpUtilities.getAvpsAsDiameterIdentity(code, vendorId, avpSet);
  353. }
  354. protected DiameterURI getAvpAsDiameterURI(int code) {
  355. return AvpUtilities.getAvpAsDiameterURI(code, avpSet);
  356. }
  357. protected DiameterURI getAvpAsDiameterURI(int code, long vendorId) {
  358. return AvpUtilities.getAvpAsDiameterURI(code, vendorId, avpSet);
  359. }
  360. protected DiameterURI[] getAvpsAsDiameterURI(int code) {
  361. return AvpUtilities.getAvpsAsDiameterURI(code, avpSet);
  362. }
  363. protected DiameterURI[] getAvpsAsDiameterURI(int code, long vendorId) {
  364. return AvpUtilities.getAvpsAsDiameterURI(code, vendorId, avpSet);
  365. }
  366. protected Address getAvpAsAddress(int code) {
  367. return AvpUtilities.getAvpAsAddress(code, avpSet);
  368. }
  369. protected Address getAvpAsAddress(int code, long vendorId) {
  370. return AvpUtilities.getAvpAsAddress(code, vendorId, avpSet);
  371. }
  372. protected Address[] getAvpsAsAddress(int code) {
  373. return AvpUtilities.getAvpsAsAddress(code, avpSet);
  374. }
  375. protected Address[] getAvpsAsAddress(int code, long vendorId) {
  376. return AvpUtilities.getAvpsAsAddress(code, vendorId, avpSet);
  377. }
  378. protected Object getAvpAsEnumerated(int code, Class clazz) {
  379. return AvpUtilities.getAvpAsEnumerated(code, avpSet, clazz);
  380. }
  381. protected Object getAvpAsEnumerated(int code, long vendorId, Class clazz) {
  382. return AvpUtilities.getAvpAsEnumerated(code, vendorId, avpSet, clazz);
  383. }
  384. protected Object[] getAvpsAsEnumerated(int code, Class clazz) {
  385. return AvpUtilities.getAvpsAsEnumerated(code, avpSet, clazz);
  386. }
  387. protected Object[] getAvpsAsEnumerated(int code, long vendorId, Class clazz) {
  388. return AvpUtilities.getAvpsAsEnumerated(code, vendorId, avpSet, clazz);
  389. }
  390. protected IPFilterRule getAvpAsIPFilterRule(int code) {
  391. return AvpUtilities.getAvpAsIPFilterRule(code, avpSet);
  392. }
  393. protected IPFilterRule getAvpAsIPFilterRule(int code, long vendorId) {
  394. return AvpUtilities.getAvpAsIPFilterRule(code, vendorId, avpSet);
  395. }
  396. protected IPFilterRule[] getAvpsAsIPFilterRule(int code) {
  397. return AvpUtilities.getAvpsAsIPFilterRule(code, avpSet);
  398. }
  399. protected IPFilterRule[] getAvpsAsIPFilterRule(int code, long vendorId) {
  400. return AvpUtilities.getAvpsAsIPFilterRule(code, vendorId, avpSet);
  401. }
  402. protected void addAvp(String avpName, Object avp) {
  403. AvpUtilities.addAvp(this, avpName, avpSet, avp);
  404. }
  405. protected void addAvp(int avpCode, Object avp) {
  406. AvpUtilities.addAvp(this, avpCode, 0L, avpSet, avp);
  407. }
  408. protected void addAvp(int avpCode, long vendorId, Object avp) {
  409. AvpUtilities.addAvp(this, avpCode, vendorId, avpSet, avp);
  410. }
  411. protected boolean hasAvp(int code) {
  412. return AvpUtilities.hasAvp(code, 0L, avpSet);
  413. }
  414. protected boolean hasAvp(int code, long vendorId) {
  415. return AvpUtilities.hasAvp(code, vendorId, avpSet);
  416. }
  417. protected Object getAvp(int avpCode) {
  418. return getAvp(avpCode, 0L);
  419. }
  420. protected Object getAvp(String avpName) {
  421. AvpRepresentation avpRep = AvpDictionary.INSTANCE.getAvp(avpName);
  422. if(avpRep != null) {
  423. return getAvp(avpRep.getCode(), avpRep.getVendorId());
  424. }
  425. return null;
  426. }
  427. protected Object getAvp(int avpCode, long vendorId)
  428. {
  429. AvpRepresentation avpRep = AvpDictionary.INSTANCE.getAvp(avpCode, vendorId);
  430. if(avpRep != null)
  431. {
  432. int avpType = AvpRepresentation.Type.valueOf(avpRep.getType()).ordinal();
  433. switch (avpType)
  434. {
  435. case DiameterAvpType._ADDRESS:
  436. case DiameterAvpType._DIAMETER_IDENTITY:
  437. case DiameterAvpType._DIAMETER_URI:
  438. case DiameterAvpType._IP_FILTER_RULE:
  439. case DiameterAvpType._OCTET_STRING:
  440. case DiameterAvpType._QOS_FILTER_RULE:
  441. return getAvpAsOctetString(avpCode, vendorId);
  442. case DiameterAvpType._ENUMERATED:
  443. case DiameterAvpType._INTEGER_32:
  444. return getAvpAsInteger32(avpCode, vendorId);
  445. case DiameterAvpType._FLOAT_32:
  446. return getAvpAsFloat32(avpCode, vendorId);
  447. case DiameterAvpType._FLOAT_64:
  448. return getAvpAsFloat64(avpCode, vendorId);
  449. case DiameterAvpType._GROUPED:
  450. return getAvpAsGrouped(avpCode, vendorId);
  451. case DiameterAvpType._INTEGER_64:
  452. return getAvpAsInteger64(avpCode, vendorId);
  453. case DiameterAvpType._TIME:
  454. return getAvpAsTime(avpCode, vendorId);
  455. case DiameterAvpType._UNSIGNED_32:
  456. return getAvpAsUnsigned32(avpCode, vendorId);
  457. case DiameterAvpType._UNSIGNED_64:
  458. return getAvpAsUnsigned64(avpCode, vendorId);
  459. case DiameterAvpType._UTF8_STRING:
  460. return getAvpAsUTF8String(avpCode, vendorId);
  461. default:
  462. return getAvpAsRaw(avpCode, vendorId);
  463. }
  464. }
  465. return null;
  466. }
  467. public void addAvp(DiameterAvp avp) {
  468. AvpUtilities.addAvp(avp, avpSet);
  469. }
  470. @Override
  471. public boolean equals(Object other) {
  472. if(!(other instanceof GroupedAvpImpl)) {
  473. return false;
  474. }
  475. GroupedAvpImpl that = (GroupedAvpImpl) other;
  476. if(this.code != that.getCode() || this.vendorId != that.getVendorId()) {
  477. return false;
  478. }
  479. List<DiameterAvp> thisArray = Arrays.asList(this.getExtensionAvps());
  480. List<DiameterAvp> thatArray = Arrays.asList(that.getExtensionAvps());
  481. if(thisArray.size() != thatArray.size()) {
  482. return false;
  483. }
  484. for(DiameterAvp avp : thisArray) {
  485. if(!thatArray.contains(avp)) {
  486. return false;
  487. }
  488. }
  489. return true;
  490. }
  491. // I/O Methods for serialization -----------------------------------------------------------
  492. // methods for set/get value. Overwrite default from DiameterAvpImpl.
  493. //This will ensure proper byte[] is encoded via Externalize methods
  494. protected byte[] getValue() {
  495. return AvpUtilities.getParser().encodeAvpSet(this.avpSet);
  496. }
  497. protected void setValue(byte[] readValue) {
  498. //decode avpset
  499. try {
  500. this.avpSet = AvpUtilities.getParser().decodeAvpSet(readValue);
  501. } catch (Exception e) {
  502. throw new RuntimeException("Failed to decode AvpSet. ",e);
  503. }
  504. }
  505. }