PageRenderTime 28ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 1ms

/servers/diameter/core/jdiameter/impl/src/main/java/org/jdiameter/client/impl/parser/AvpSetImpl.java

http://mobicents.googlecode.com/
Java | 689 lines | 543 code | 99 blank | 47 comment | 24 complexity | 6c7461163f9dabec222a7162cce8eead 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 2006, 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.jdiameter.client.impl.parser;
  23. /*
  24. * https://jdiameter.dev.java.net/
  25. *
  26. * License: GPL v3
  27. *
  28. * e-mail: erick.svenson@yahoo.com
  29. *
  30. */
  31. import java.net.InetAddress;
  32. import java.util.ArrayList;
  33. import java.util.Arrays;
  34. import java.util.Date;
  35. import java.util.Iterator;
  36. import java.util.List;
  37. import org.jdiameter.api.Avp;
  38. import org.jdiameter.api.AvpSet;
  39. import org.jdiameter.api.InternalException;
  40. import org.jdiameter.api.URI;
  41. import org.jdiameter.client.api.parser.ParseException;
  42. /**
  43. *
  44. * @author erick.svenson@yahoo.com
  45. * @author <a href="mailto:brainslog@gmail.com"> Alexandre Mendonca </a>
  46. * @author <a href="mailto:baranowb@gmail.com"> Bartosz Baranowski </a>
  47. */
  48. class AvpSetImpl implements AvpSet {
  49. // FIXME: by default 3588.4-1 says: 'M' should be set to true;
  50. // FIXME: by default 3588.x says: if grouped has at least on AVP with 'M' set, it also has to have 'M' set! - TODO: add backmapping.
  51. private static final long serialVersionUID = 1L;
  52. private static final ElementParser parser = new ElementParser();
  53. List<Avp> avps = new ArrayList<Avp>();
  54. AvpSetImpl() {
  55. }
  56. public Avp getAvp(int avpCode) {
  57. for (Avp avp : this.avps) {
  58. if (avp.getCode() == avpCode) {
  59. return avp;
  60. }
  61. }
  62. return null;
  63. }
  64. public Avp getAvpByIndex(int avpIndex) {
  65. return this.avps.get(avpIndex);
  66. }
  67. public Avp getAvp(int avpCode, long vendorId) {
  68. for (Avp avp : this.avps) {
  69. if (avp.getCode() == avpCode && avp.getVendorId() == vendorId) {
  70. return avp;
  71. }
  72. }
  73. return null;
  74. }
  75. public AvpSet getAvps(int avpCode) {
  76. AvpSet result = new AvpSetImpl();
  77. for (Avp avp : this.avps) {
  78. if (avp.getCode() == avpCode) {
  79. result.addAvp(avp);
  80. }
  81. }
  82. return result;
  83. }
  84. public AvpSet getAvps(int avpCode, long vendorId) {
  85. AvpSet result = new AvpSetImpl();
  86. for (Avp avp : this.avps) {
  87. if (avp.getCode() == avpCode && avp.getVendorId() == vendorId) {
  88. result.addAvp(avp);
  89. }
  90. }
  91. return result;
  92. }
  93. public AvpSet removeAvp(int avpCode) {
  94. return removeAvp(avpCode, 0);
  95. }
  96. public AvpSet removeAvp(int avpCode, long vendorId) {
  97. AvpSet result = new AvpSetImpl();
  98. // for (Avp avp : this.avps) {
  99. // if (avp.getCode() == avpCode) {
  100. // result.addAvp(avp);
  101. // this.avps.remove(avp);
  102. // }
  103. // }
  104. Iterator<Avp> it = this.avps.iterator();
  105. while(it.hasNext()) {
  106. Avp avp = it.next();
  107. if (avp.getCode() == avpCode && avp.getVendorId() == vendorId) {
  108. result.addAvp(avp);
  109. it.remove();
  110. }
  111. }
  112. return result;
  113. }
  114. public Avp removeAvpByIndex(int i) {
  115. return (i >= this.avps.size()) ? null : this.avps.remove(i);
  116. }
  117. public Avp[] asArray() {
  118. return this.avps.toArray(new Avp[avps.size()]);
  119. }
  120. public Avp addAvp(int avpCode, long value, boolean asUnsigned) {
  121. Avp res = new AvpImpl(avpCode, 0, 0, asUnsigned ? parser.intU32ToBytes(value) : parser.int64ToBytes(value));
  122. this.avps.add(res);
  123. return res;
  124. }
  125. public Avp addAvp(int avpCode, long value, boolean mFlag, boolean pFlag, boolean asUnsigned) {
  126. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  127. Avp res = new AvpImpl(avpCode, flags , 0, asUnsigned ? parser.intU32ToBytes(value) : parser.int64ToBytes(value));
  128. this.avps.add(res);
  129. return res;
  130. }
  131. public Avp addAvp(int avpCode, long value, long vndId, boolean mFlag, boolean pFlag, boolean asUnsigned) {
  132. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  133. Avp res = new AvpImpl(avpCode, flags, vndId, asUnsigned ? parser.intU32ToBytes(value) : parser.int64ToBytes(value));
  134. this.avps.add(res);
  135. return res;
  136. }
  137. public void insertAvp(int index, Avp... avps) {
  138. this.avps.addAll(index, Arrays.asList(avps));
  139. }
  140. public void insertAvp(int index, AvpSet avpSet) {
  141. this.avps.addAll(index, Arrays.asList(avpSet.asArray()));
  142. }
  143. public Avp insertAvp(int index, int avpCode, long value, boolean asUnsigned) {
  144. Avp res = new AvpImpl(avpCode, 0, 0, asUnsigned ? parser.intU32ToBytes(value) : parser.int64ToBytes(value));
  145. this.avps.add(index, res);
  146. return res;
  147. }
  148. public Avp insertAvp(int index, int avpCode, long value, boolean mFlag, boolean pFlag, boolean asUnsigned) {
  149. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  150. Avp res = new AvpImpl(avpCode, flags , 0, asUnsigned ? parser.intU32ToBytes(value) : parser.int64ToBytes(value));
  151. this.avps.add(index, res);
  152. return res;
  153. }
  154. public Avp insertAvp(int index, int avpCode, long value, long vndId, boolean mFlag, boolean pFlag, boolean asUnsigned) {
  155. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  156. Avp res = new AvpImpl(avpCode, flags, vndId, asUnsigned ? parser.intU32ToBytes(value) : parser.int64ToBytes(value));
  157. this.avps.add(res);
  158. return res;
  159. }
  160. public AvpSet insertGroupedAvp(int index, int avpCode) {
  161. AvpImpl res = new AvpImpl(avpCode, 0, 0, new byte[0]);
  162. res.groupedData = new AvpSetImpl();
  163. this.avps.add(index, res);
  164. return res.groupedData;
  165. }
  166. public int size() {
  167. return this.avps.size();
  168. }
  169. public void addAvp(AvpSet avpSet) {
  170. for (Avp a:avpSet) avps.add(a);
  171. }
  172. public void addAvp(Avp... avps) {
  173. for (Avp a : avps) {
  174. // No need to clone AVP, right?
  175. // Avp res = new AvpImpl(a);
  176. if(a != null) {
  177. this.avps.add(a);
  178. }
  179. }
  180. }
  181. public Avp addAvp(int avpCode, byte[] rawData) {
  182. Avp res = new AvpImpl(avpCode, 0, 0, rawData);
  183. this.avps.add(res);
  184. return res;
  185. }
  186. public Avp addAvp(int avpCode, byte[] rawData, boolean mFlag, boolean pFlag) {
  187. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  188. Avp res = new AvpImpl(avpCode, flags , 0, rawData);
  189. this.avps.add(res);
  190. return res;
  191. }
  192. public Avp addAvp(int avpCode, byte[] rawData, long vndId, boolean mFlag, boolean pFlag) {
  193. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  194. Avp res = new AvpImpl(avpCode, flags, vndId, rawData);
  195. this.avps.add(res);
  196. return res;
  197. }
  198. public Avp addAvp(int avpCode, int value) {
  199. Avp res = new AvpImpl(avpCode, 0, 0, parser.int32ToBytes(value));
  200. this.avps.add(res);
  201. return res;
  202. }
  203. public Avp addAvp(int avpCode, int value, boolean mFlag, boolean pFlag) {
  204. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  205. Avp res = new AvpImpl(avpCode, flags, 0, parser.int32ToBytes(value));
  206. this.avps.add(res);
  207. return res;
  208. }
  209. public Avp addAvp(int avpCode, int value, long vndId, boolean mFlag, boolean pFlag) {
  210. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  211. Avp res = new AvpImpl(avpCode, flags, vndId, parser.int32ToBytes(value));
  212. this.avps.add(res);
  213. return res;
  214. }
  215. public Avp addAvp(int avpCode, long value) {
  216. Avp res = new AvpImpl(avpCode, 0, 0, parser.int64ToBytes(value) );
  217. this.avps.add(res);
  218. return res;
  219. }
  220. public Avp addAvp(int avpCode, long value, boolean mFlag, boolean pFlag) {
  221. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  222. Avp res = new AvpImpl(avpCode, flags, 0, parser.int64ToBytes(value) );
  223. this.avps.add(res);
  224. return res;
  225. }
  226. public Avp addAvp(int avpCode, long value, long vndId, boolean mFlag, boolean pFlag) {
  227. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  228. Avp res = new AvpImpl(avpCode, flags, vndId, parser.int64ToBytes(value) );
  229. this.avps.add(res);
  230. return res;
  231. }
  232. public Avp addAvp(int avpCode, float value) {
  233. Avp res = new AvpImpl(avpCode, 0, 0, parser.float32ToBytes(value));
  234. this.avps.add(res);
  235. return res;
  236. }
  237. public Avp addAvp(int avpCode, float value, boolean mFlag, boolean pFlag) {
  238. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  239. Avp res = new AvpImpl(avpCode, flags, 0, parser.float32ToBytes(value));
  240. this.avps.add(res);
  241. return res;
  242. }
  243. public Avp addAvp(int avpCode, float value, long vndId, boolean mFlag, boolean pFlag) {
  244. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  245. Avp res = new AvpImpl(avpCode, flags, vndId, parser.float32ToBytes(value));
  246. this.avps.add(res);
  247. return res;
  248. }
  249. public Avp addAvp(int avpCode, double value) {
  250. Avp res = new AvpImpl(avpCode, 0, 0, parser.float64ToBytes(value));
  251. this.avps.add(res);
  252. return res;
  253. }
  254. public Avp addAvp(int avpCode, double value, boolean mFlag, boolean pFlag) {
  255. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  256. Avp res = new AvpImpl(avpCode, flags, 0, parser.float64ToBytes(value));
  257. this.avps.add(res);
  258. return res;
  259. }
  260. public Avp addAvp(int avpCode, double value, long vndId, boolean mFlag, boolean pFlag) {
  261. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  262. Avp res = new AvpImpl(avpCode, flags, vndId, parser.float64ToBytes(value));
  263. this.avps.add(res);
  264. return res;
  265. }
  266. public Avp addAvp(int avpCode, String value, boolean asOctetString) {
  267. try {
  268. Avp res = new AvpImpl(avpCode, 0, 0, asOctetString ? parser.octetStringToBytes(value) : parser.utf8StringToBytes(value)
  269. );
  270. this.avps.add(res);
  271. return res;
  272. } catch(Exception e) {
  273. throw new IllegalArgumentException(e);
  274. }
  275. }
  276. public Avp addAvp(int avpCode, String value, boolean mFlag, boolean pFlag, boolean asOctetString) {
  277. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  278. try {
  279. Avp res = new AvpImpl(avpCode, flags, 0, asOctetString ? parser.octetStringToBytes(value) : parser.utf8StringToBytes(value)
  280. );
  281. this.avps.add(res);
  282. return res;
  283. } catch(Exception e) {
  284. throw new IllegalArgumentException(e);
  285. }
  286. }
  287. public Avp addAvp(int avpCode, String value, long vndId, boolean mFlag, boolean pFlag, boolean asOctetString) {
  288. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  289. try {
  290. Avp res = new AvpImpl(avpCode, flags, vndId, asOctetString ? parser.octetStringToBytes(value) : parser.utf8StringToBytes(value)
  291. );
  292. this.avps.add(res);
  293. return res;
  294. } catch(Exception e) {
  295. throw new IllegalArgumentException(e);
  296. }
  297. }
  298. public Avp addAvp(int avpCode, URI value) {
  299. try {
  300. Avp res = new AvpImpl(avpCode, 0, 0, parser.octetStringToBytes(value.toString()));
  301. this.avps.add(res);
  302. return res;
  303. } catch (ParseException e) {
  304. throw new IllegalArgumentException(e);
  305. }
  306. }
  307. public Avp addAvp(int avpCode, URI value, boolean mFlag, boolean pFlag) {
  308. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  309. try {
  310. Avp res = new AvpImpl(avpCode, flags, 0, parser.octetStringToBytes(value.toString()));
  311. this.avps.add(res);
  312. return res;
  313. } catch (ParseException e) {
  314. throw new IllegalArgumentException(e);
  315. }
  316. }
  317. public Avp addAvp(int avpCode, URI value, long vndId, boolean mFlag, boolean pFlag) {
  318. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  319. try {
  320. Avp res = new AvpImpl(avpCode, flags, vndId, parser.octetStringToBytes(value.toString()));
  321. this.avps.add(res);
  322. return res;
  323. } catch (ParseException e) {
  324. throw new IllegalArgumentException(e);
  325. }
  326. }
  327. public Avp addAvp(int avpCode, InetAddress value) {
  328. Avp res = new AvpImpl(avpCode, 0, 0, parser.addressToBytes(value));
  329. this.avps.add(res);
  330. return res;
  331. }
  332. public Avp addAvp(int avpCode, InetAddress value, boolean mFlag, boolean pFlag) {
  333. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  334. Avp res = new AvpImpl(avpCode, flags, 0, parser.addressToBytes(value));
  335. this.avps.add(res);
  336. return res;
  337. }
  338. public Avp addAvp(int avpCode, InetAddress value, long vndId, boolean mFlag, boolean pFlag) {
  339. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  340. Avp res = new AvpImpl(avpCode, flags, vndId, parser.addressToBytes(value));
  341. this.avps.add(res);
  342. return res;
  343. }
  344. public Avp addAvp(int avpCode, Date value) {
  345. Avp res = new AvpImpl(avpCode, 0, 0, parser.dateToBytes(value));
  346. this.avps.add(res);
  347. return res;
  348. }
  349. public Avp addAvp(int avpCode, Date value, boolean mFlag, boolean pFlag) {
  350. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  351. Avp res = new AvpImpl(avpCode, flags, 0, parser.dateToBytes(value));
  352. this.avps.add(res);
  353. return res;
  354. }
  355. public Avp addAvp(int avpCode, Date value, long vndId, boolean mFlag, boolean pFlag) {
  356. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  357. Avp res = new AvpImpl(avpCode, flags, vndId, parser.dateToBytes(value));
  358. this.avps.add(res);
  359. return res;
  360. }
  361. public AvpSet addGroupedAvp(int avpCode) {
  362. AvpImpl res = new AvpImpl(avpCode, 0, 0, new byte[0] );
  363. res.groupedData = new AvpSetImpl();
  364. this.avps.add(res);
  365. return res.groupedData;
  366. }
  367. public AvpSet addGroupedAvp(int avpCode, boolean mFlag, boolean pFlag) {
  368. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  369. AvpImpl res = new AvpImpl(avpCode, flags, 0, new byte[0] );
  370. res.groupedData = new AvpSetImpl();
  371. this.avps.add(res);
  372. return res.groupedData;
  373. }
  374. public AvpSet addGroupedAvp(int avpCode, long vndId, boolean mFlag, boolean pFlag) {
  375. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  376. AvpImpl res = new AvpImpl(avpCode, flags, vndId, new byte[0] );
  377. res.groupedData = new AvpSetImpl();
  378. this.avps.add(res);
  379. return res.groupedData;
  380. }
  381. public Avp insertAvp(int index, int avpCode, byte[] value) {
  382. Avp res = new AvpImpl(avpCode, 0, 0, value);
  383. this.avps.add(index, res);
  384. return res;
  385. }
  386. public Avp insertAvp(int index, int avpCode, byte[] value, boolean mFlag, boolean pFlag) {
  387. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  388. Avp res = new AvpImpl(avpCode, flags, 0, value);
  389. this.avps.add(index, res);
  390. return res;
  391. }
  392. public Avp insertAvp(int index, int avpCode, byte[] value, long vndId, boolean mFlag, boolean pFlag) {
  393. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  394. Avp res = new AvpImpl(avpCode, flags, vndId, value);
  395. this.avps.add(index, res);
  396. return res;
  397. }
  398. public Avp insertAvp(int index, int avpCode, int value) {
  399. Avp res = new AvpImpl(avpCode, 0, 0, parser.int32ToBytes(value));
  400. this.avps.add(index, res);
  401. return res;
  402. }
  403. public Avp insertAvp(int index, int avpCode, int value, boolean mFlag, boolean pFlag) {
  404. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  405. Avp res = new AvpImpl(avpCode, flags, 0, parser.int32ToBytes(value));
  406. this.avps.add(index, res);
  407. return res;
  408. }
  409. public Avp insertAvp(int index, int avpCode, int value, long vndId, boolean mFlag, boolean pFlag) {
  410. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  411. Avp res = new AvpImpl(avpCode, flags, vndId, parser.int32ToBytes(value));
  412. this.avps.add(index, res);
  413. return res;
  414. }
  415. public Avp insertAvp(int index, int avpCode, long value) {
  416. Avp res = new AvpImpl(avpCode, 0, 0, parser.int64ToBytes(value));
  417. this.avps.add(index, res);
  418. return res;
  419. }
  420. public Avp insertAvp(int index, int avpCode, long value, boolean mFlag, boolean pFlag) {
  421. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  422. Avp res = new AvpImpl(avpCode, flags, 0, parser.int64ToBytes(value));
  423. this.avps.add(index, res);
  424. return res;
  425. }
  426. public Avp insertAvp(int index, int avpCode, long value, long vndId, boolean mFlag, boolean pFlag) {
  427. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  428. Avp res = new AvpImpl(avpCode, flags, vndId, parser.int64ToBytes(value));
  429. this.avps.add(index, res);
  430. return res;
  431. }
  432. public Avp insertAvp(int index, int avpCode, float value) {
  433. Avp res = new AvpImpl(avpCode, 0, 0, parser.float32ToBytes(value));
  434. this.avps.add(index, res);
  435. return res;
  436. }
  437. public Avp insertAvp(int index, int avpCode, float value, boolean mFlag, boolean pFlag) {
  438. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  439. Avp res = new AvpImpl(avpCode, flags, 0, parser.float32ToBytes(value));
  440. this.avps.add(index, res);
  441. return res;
  442. }
  443. public Avp insertAvp(int index, int avpCode, float value, long vndId, boolean mFlag, boolean pFlag) {
  444. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  445. Avp res = new AvpImpl(avpCode, flags, vndId, parser.float32ToBytes(value));
  446. this.avps.add(index, res);
  447. return res;
  448. }
  449. public Avp insertAvp(int index, int avpCode, double value) {
  450. Avp res = new AvpImpl(avpCode, 0, 0, parser.float64ToBytes(value));
  451. this.avps.add(index, res);
  452. return res;
  453. }
  454. public Avp insertAvp(int index, int avpCode, double value, boolean mFlag, boolean pFlag) {
  455. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  456. Avp res = new AvpImpl(avpCode, flags, 0, parser.float64ToBytes(value));
  457. this.avps.add(index, res);
  458. return res;
  459. }
  460. public Avp insertAvp(int index, int avpCode, double value, long vndId, boolean mFlag, boolean pFlag) {
  461. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  462. Avp res = new AvpImpl(avpCode, flags, vndId, parser.float64ToBytes(value));
  463. this.avps.add(index, res);
  464. return res;
  465. }
  466. public Avp insertAvp(int index, int avpCode, String value, boolean asOctetString) {
  467. try {
  468. Avp res = new AvpImpl(avpCode, 0, 0, asOctetString ? parser.octetStringToBytes(value) :
  469. parser.utf8StringToBytes(value));
  470. this.avps.add(index, res);
  471. return res;
  472. } catch(Exception e) {
  473. throw new IllegalArgumentException(e);
  474. }
  475. }
  476. public Avp insertAvp(int index, int avpCode, String value, boolean mFlag, boolean pFlag, boolean asOctetString) {
  477. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  478. try {
  479. Avp res = new AvpImpl(avpCode, flags, 0, asOctetString ? parser.octetStringToBytes(value) :
  480. parser.utf8StringToBytes(value));
  481. this.avps.add(index, res);
  482. return res;
  483. } catch(Exception e) {
  484. throw new IllegalArgumentException(e);
  485. }
  486. }
  487. public Avp insertAvp(int index, int avpCode, String value, long vndId, boolean mFlag, boolean pFlag, boolean asOctetString) {
  488. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  489. try {
  490. Avp res = new AvpImpl(avpCode, flags, vndId, asOctetString ? parser.octetStringToBytes(value) :
  491. parser.utf8StringToBytes(value));
  492. this.avps.add(index, res);
  493. return res;
  494. } catch(Exception e) {
  495. throw new IllegalArgumentException(e);
  496. }
  497. }
  498. public Avp insertAvp(int index, int avpCode, URI value) {
  499. try {
  500. Avp res = new AvpImpl(avpCode, 0, 0, parser.octetStringToBytes(value.toString()));
  501. this.avps.add(index, res);
  502. return res;
  503. } catch(Exception e) {
  504. throw new IllegalArgumentException(e);
  505. }
  506. }
  507. public Avp insertAvp(int index, int avpCode, URI value, boolean mFlag, boolean pFlag) {
  508. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  509. try {
  510. Avp res = new AvpImpl(avpCode, flags, 0, parser.octetStringToBytes(value.toString()));
  511. this.avps.add(index, res);
  512. return res;
  513. } catch(Exception e) {
  514. throw new IllegalArgumentException(e);
  515. }
  516. }
  517. public Avp insertAvp(int index, int avpCode, URI value, long vndId, boolean mFlag, boolean pFlag) {
  518. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  519. try {
  520. Avp res = new AvpImpl(avpCode, flags, vndId, parser.octetStringToBytes(value.toString()));
  521. this.avps.add(index, res);
  522. return res;
  523. } catch(Exception e) {
  524. throw new IllegalArgumentException(e);
  525. }
  526. }
  527. public Avp insertAvp(int index, int avpCode, InetAddress value) {
  528. Avp res = new AvpImpl(avpCode, 0, 0, parser.addressToBytes(value));
  529. this.avps.add(index, res);
  530. return res;
  531. }
  532. public Avp insertAvp(int index, int avpCode, InetAddress value, boolean mFlag, boolean pFlag) {
  533. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  534. Avp res = new AvpImpl(avpCode, flags, 0, parser.addressToBytes(value));
  535. this.avps.add(index, res);
  536. return res;
  537. }
  538. public Avp insertAvp(int index, int avpCode, InetAddress value, long vndId, boolean mFlag, boolean pFlag) {
  539. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  540. Avp res = new AvpImpl(avpCode, flags, vndId, parser.addressToBytes(value));
  541. this.avps.add(index, res);
  542. return res;
  543. }
  544. public Avp insertAvp(int index, int avpCode, Date value) {
  545. Avp res = new AvpImpl(avpCode, 0, 0, parser.dateToBytes(value));
  546. this.avps.add(index, res);
  547. return res;
  548. }
  549. public Avp insertAvp(int index, int avpCode, Date value, boolean mFlag, boolean pFlag) {
  550. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  551. Avp res = new AvpImpl(avpCode, flags, 0, parser.dateToBytes(value));
  552. this.avps.add(index, res);
  553. return res;
  554. }
  555. public Avp insertAvp(int index, int avpCode, Date value, long vndId, boolean mFlag, boolean pFlag) {
  556. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  557. Avp res = new AvpImpl(avpCode, flags, vndId, parser.dateToBytes(value));
  558. this.avps.add(index, res);
  559. return res;
  560. }
  561. public AvpSet insertGroupedAvp(int index, int avpCode, boolean mFlag, boolean pFlag) {
  562. int flags = ((mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  563. AvpImpl res = new AvpImpl(avpCode, flags, 0, new byte[0] );
  564. res.groupedData = new AvpSetImpl();
  565. this.avps.add(index, res);
  566. return res.groupedData;
  567. }
  568. public AvpSet insertGroupedAvp(int index, int avpCode, long vndId, boolean mFlag, boolean pFlag) {
  569. int flags = ((vndId !=0 ? 0x80:0) | (mFlag ? 0x40:0) | (pFlag ? 0x20:0));
  570. AvpImpl res = new AvpImpl(avpCode, flags, vndId, new byte[0] );
  571. res.groupedData = new AvpSetImpl();
  572. this.avps.add(index, res);
  573. return res.groupedData;
  574. }
  575. public boolean isWrapperFor(Class<?> aClass) throws InternalException {
  576. return false;
  577. }
  578. public <T> T unwrap(Class<T> aClass) throws InternalException {
  579. return null;
  580. }
  581. public Iterator<Avp> iterator() {
  582. // Iterator contract demands it to be able to remove items
  583. // return Collections.unmodifiableList(this.avps).iterator();
  584. return this.avps.iterator();
  585. }
  586. @Override
  587. public String toString() {
  588. return new StringBuffer("AvpSetImpl [avps=").append(avps).append("]@").append(super.hashCode()).toString();
  589. }
  590. }