<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4670964355147826480</id><updated>2011-12-14T12:53:40.953Z</updated><category term='team-building'/><category term='installation'/><category term='seagull'/><category term='documentation'/><category term='webservices'/><category term='mobicents'/><category term='tutorial'/><category term='community'/><category term='jopr'/><category term='cx/dx'/><category term='monitoring'/><category term='open source'/><category term='3gpp'/><category term='source'/><category term='gpl'/><category term='charging'/><category term='build'/><category term='leopard'/><category term='high-availability'/><category term='mac'/><category term='imac'/><category term='license'/><category term='lgpl'/><category term='jboss'/><category term='sip servlets'/><category term='educational'/><category term='release'/><category term='rhq'/><category term='media server'/><category term='traffic generator'/><category term='ims'/><category term='management'/><category term='diameter'/><category term='jainslee'/><title type='text'>Alexandre Mendonça</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ammendonca.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ammendonca.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alexandre Mendonça</name><uri>http://www.blogger.com/profile/09409638475629377312</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://4.bp.blogspot.com/_RvILlFOB9co/SqDi6dqwHgI/AAAAAAAAABM/GTvQAS3hSgI/S220/ammendonca.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4670964355147826480.post-4534923746888131193</id><published>2011-07-11T13:16:00.002+01:00</published><updated>2011-07-11T13:19:02.746+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='ims'/><category scheme='http://www.blogger.com/atom/ns#' term='3gpp'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='lgpl'/><category scheme='http://www.blogger.com/atom/ns#' term='diameter'/><category scheme='http://www.blogger.com/atom/ns#' term='mobicents'/><title type='text'>Mobicents Diameter 1.4.0.BETA2 is out!</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;It's been a while since the last Mobicents Diameter release, but it's&amp;nbsp;finally&amp;nbsp;here, the latest and greatest! This is a special release as it is the one with the most community contribution. Thanks to all the contributors for showing the value of open-source!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;- &lt;b&gt;Enhanced Stability&lt;/b&gt;: 30+ issues regarding stack functionality were&amp;nbsp;&amp;nbsp;identified and fixed, providing a more stable and usable stack;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;- &lt;b&gt;Improved Compliance&lt;/b&gt;: Better and stricter compliance to specifications,&amp;nbsp;resulting in a more compatible and strict stack;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;- &lt;b&gt;Gq' Application Support&lt;/b&gt;: Another valuable 3GPP application, Gq', is now&amp;nbsp;supported both in Diameter Stack and in Mobicents JAIN SLEE, with it's&amp;nbsp;Resource Adaptor. Thanks to Yulian Oifa for his contribution;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;- &lt;b&gt;Better Cluster Support&lt;/b&gt;: Improved cluster support by updating to the&amp;nbsp;latest Mobicents Cluster framework and fixed replication related issues;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;- &lt;b&gt;Experimental Agent Support&lt;/b&gt;: Initial support for experiments with&amp;nbsp;supporting RELAY, PROXY and REDIRECT agents;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&amp;nbsp;- &lt;b&gt;Extended Testsuite&lt;/b&gt;: Over 100 new JUnit tests were added to the testsuite&amp;nbsp;in order to guarantee the best compliance and continuous regression testing.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Note: This is a BETA release as there are API and deep core changes happening,&amp;nbsp;but it's been thoroughly tested, with the testsuite extended to cover more&amp;nbsp;than ever, including message flows for all applications both in standalone&amp;nbsp;and cluster mode!&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Full release notes &lt;a href="http://groups.google.com/group/mobicents-public/browse_thread/thread/a241f74bd9cba3e6?pli=1"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Visit Mobicents Diameter website &lt;a href="http://www.mobicents.org/diameter/"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4670964355147826480-4534923746888131193?l=ammendonca.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ammendonca.blogspot.com/feeds/4534923746888131193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ammendonca.blogspot.com/2011/07/mobicents-diameter-140beta2-is-out.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/4534923746888131193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/4534923746888131193'/><link rel='alternate' type='text/html' href='http://ammendonca.blogspot.com/2011/07/mobicents-diameter-140beta2-is-out.html' title='Mobicents Diameter 1.4.0.BETA2 is out!'/><author><name>Alexandre Mendonça</name><uri>http://www.blogger.com/profile/09409638475629377312</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://4.bp.blogspot.com/_RvILlFOB9co/SqDi6dqwHgI/AAAAAAAAABM/GTvQAS3hSgI/S220/ammendonca.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4670964355147826480.post-1577254265534743982</id><published>2011-03-02T12:16:00.000Z</published><updated>2011-03-02T12:16:58.585Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='sip servlets'/><category scheme='http://www.blogger.com/atom/ns#' term='open source'/><category scheme='http://www.blogger.com/atom/ns#' term='license'/><category scheme='http://www.blogger.com/atom/ns#' term='gpl'/><category scheme='http://www.blogger.com/atom/ns#' term='community'/><category scheme='http://www.blogger.com/atom/ns#' term='lgpl'/><category scheme='http://www.blogger.com/atom/ns#' term='jainslee'/><category scheme='http://www.blogger.com/atom/ns#' term='media server'/><category scheme='http://www.blogger.com/atom/ns#' term='diameter'/><category scheme='http://www.blogger.com/atom/ns#' term='mobicents'/><title type='text'>Mobicents is now LGPL 2.1</title><content type='html'>After several discussions and shared thoughts between the Mobicents team and the community, it has been decided to align the Mobicents license with the remaining JBoss projects, changing to the LGPL 2.1 Open Source license!&lt;br /&gt;&lt;br /&gt;Mobicents SIP Servlets was already using such license, but now it is applied to &lt;b&gt;ALL&lt;/b&gt; Mobicents Projects (Diameter, JAIN SLEE, Media Server, SS7, etc), effective March 1, 2011.&lt;br /&gt;&lt;br /&gt;We hope the community enjoys the change!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4670964355147826480-1577254265534743982?l=ammendonca.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ammendonca.blogspot.com/feeds/1577254265534743982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ammendonca.blogspot.com/2011/03/mobicents-is-now-lgpl-21.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/1577254265534743982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/1577254265534743982'/><link rel='alternate' type='text/html' href='http://ammendonca.blogspot.com/2011/03/mobicents-is-now-lgpl-21.html' title='Mobicents is now LGPL 2.1'/><author><name>Alexandre Mendonça</name><uri>http://www.blogger.com/profile/09409638475629377312</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://4.bp.blogspot.com/_RvILlFOB9co/SqDi6dqwHgI/AAAAAAAAABM/GTvQAS3hSgI/S220/ammendonca.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4670964355147826480.post-7485335074811812225</id><published>2011-01-24T15:01:00.003Z</published><updated>2011-01-26T14:39:49.358Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='charging'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='educational'/><category scheme='http://www.blogger.com/atom/ns#' term='source'/><category scheme='http://www.blogger.com/atom/ns#' term='diameter'/><category scheme='http://www.blogger.com/atom/ns#' term='mobicents'/><title type='text'>Developing an Offline Charging Application with Mobicents Diameter</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;u&gt;Introduction&lt;/u&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;A couple of months ago, the Mobicents Diameter Team decided to start a series of educational posts regarding Diameter development using Mobicents Diameter solution.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bartosz Baranowski has kicked-off with the "&lt;a href="http://baranowb.blogspot.com/2010/11/diameter-educational-series-creating.html"&gt;Creating a "Hello World" Application with Mobicents Diameter&lt;/a&gt;" article where two things were addressed:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Explaining some basics of the Diameter protocol such as Diameter Nodes, Realms, Applications, Messages, AVPs, Sessions and all those fundamental concepts that&amp;nbsp;hopefully&amp;nbsp;helps to make sense out of this;&lt;/li&gt;&lt;li&gt;A step-by-step example on how to create server and client instances for a Diameter Application (a&amp;nbsp;fictitious&amp;nbsp;Application was used to exemplify) using Mobicents Diameter. It includes detailed code explanation and it's a good read as a preparation for this one if you're new on the subject.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;In this second post, we will learn how easy it is to create an Offline Charging Application using Mobicents Diameter. Also, for those not familiar with what is Offline Charging (and Online Charging as well) a brief introduction will be provided.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Fasten your seatbelt, the ride is about to begin!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;u&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Offline and Online Charging. What's that about?&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Online Charging is the name used by 3GPP for pre-paid charging in the IMS scope. It is the charging which occurs in real-time, where the service cost is deducted from the user balance (which has been previously loaded by the user) while the service is going on. In IMS this is the Ro interface, and is defined by &lt;a href="http://ftp.3gpp.org/specs/html-info/32299.htm"&gt;3GPP TS 32.299&lt;/a&gt; (and extending&amp;nbsp;&lt;a href="http://tools.ietf.org/html/rfc4006"&gt;RFC 4006&lt;/a&gt; - Diameter Credit Control Application).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On the other hand, Offline Charging is the 3GPP name for post-paid charging, where the provided services are not paid at the time of their usage but rather in a periodic manner, such as at the end of each month. However, while the service is on course, it's usage is logged as a Call Detail Record (CDR) that will be processed later by a Billing system. This corresponds to the IMS&amp;nbsp;interface&amp;nbsp;Rf, defined also by &lt;a href="http://ftp.3gpp.org/specs/html-info/32299.htm"&gt;3GPP TS 32.299&lt;/a&gt; (inheriting from Diameter Base Accounting in &lt;a href="http://tools.ietf.org/html/rfc3588"&gt;RFC 3588&lt;/a&gt;).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The CDR generation is the responsibility of an Offline Charging Server.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Please keep in mind that while we are using the Online/Offline&amp;nbsp;terminology&amp;nbsp;introduced by 3GPP for IMS, this post does not intend to focus on IMS details, and so, we will only use the Diameter Base Accounting Application, allowing to simplify the exchanged messages and provide a more straightforward tutorial.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;u&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;The Messages and AVPs&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;The messages exchanged for offline charging, as defined in RFC 3588 - Section 9.7, are only two: Accounting-Request (ACR) and Accounting-Answer (ACA), with Command-Code 271.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While only a pair of Request/Answer is defined, it can be used with different purposes, depending on the value of the Accounting-Record-Type AVP (code 480). This AVP can have the following values:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;EVENT_RECORD (1) - Defines that this is charging for a one-time event, such as a sent SMS;&lt;/li&gt;&lt;li&gt;START_RECORD (2) - In a service with a measurable length (eg: voice call) this value defines that such service has started;&lt;/li&gt;&lt;li&gt;INTERIM_RECORD (3) - In a service with the above characteristics, this ACR type provides cumulative accounting information;&lt;/li&gt;&lt;li&gt;STOP_RECORD (4) - This is used to inform that a service with measurable length has terminated and to provide cumulative accounting information regarding it.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Another meaningful AVP is the Acct-Interim-Interval AVP (code 85) where it is specified the interval at which intermediate records should be&amp;nbsp;produced, by sending ACR messages with Accounting-Record-Type set to INTERIM_RECORD. The absence of it, or a value of 0, means that no intermedite records are needed.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;An important note is that Base Accounting does not define any service-specific AVPs, as it is not intended to be a usable Application but rather the base for the ones being defined. As such, we will 'abuse' from User-Name AVP, and piggyback the Subscription and Service identifiers into it, in the form "&lt;subscription-id&gt;.&lt;service-id&gt;@mobicents.org".&lt;/service-id&gt;&lt;/subscription-id&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;u&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Putting it all together!&lt;/span&gt;&lt;/u&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;Assuming you already know how to configure and set up the stack in your Java project (which has been explained by Bartosz on the &lt;a href="http://baranowb.blogspot.com/2010/11/diameter-educational-series-creating.html"&gt;first post of these educational series&lt;/a&gt;), let's start by defining the interface for our Charging Client enabler, to be used by the applications:&lt;br /&gt;&lt;pre class="brush: java"&gt;package org.mobicents.diameter.simulator.client;&lt;br /&gt;&lt;br /&gt;public interface OfflineChargingClient {&lt;br /&gt;&lt;br /&gt;  // Accounting-Record-Type Values --------------------------------------------&lt;br /&gt;  static final int ACCOUNTING_RECORD_TYPE_EVENT    = 1;&lt;br /&gt;  static final int ACCOUNTING_RECORD_TYPE_START    = 2;&lt;br /&gt;  static final int ACCOUNTING_RECORD_TYPE_INTERIM  = 3;&lt;br /&gt;  static final int ACCOUNTING_RECORD_TYPE_STOP     = 4;&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Sends an Accounting-Request with Accounting-Record-Type set to "2" and the &lt;br /&gt;   * corresponding Subscription-Id and Service-Id AVPs filled accordingly.&lt;br /&gt;   * &lt;br /&gt;   * @param subscriptionId the String value to be used for Subscription-Id AVP&lt;br /&gt;   * @param serviceId the String value to be used for Service-Id AVP&lt;br /&gt;   * @throws Exception&lt;br /&gt;   */&lt;br /&gt;  public abstract void startOfflineCharging(String subscriptionId, String serviceId)&lt;br /&gt;    throws Exception;&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Sends an Accounting-Request with Accounting-Record-Type set to "3" and the&lt;br /&gt;   * corresponding Subscription-Id and Service-Id AVPs filled accordingly.&lt;br /&gt;   * &lt;br /&gt;   * @param subscriptionId the String value to be used for Subscription-Id AVP&lt;br /&gt;   * @param serviceId the String value to be used for Service-Id AVP&lt;br /&gt;   * @throws Exception&lt;br /&gt;   */&lt;br /&gt;  public abstract void updateOfflineCharging(String subscriptionId, String serviceId)&lt;br /&gt;    throws Exception;&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Sends an Accounting-Request with Accounting-Record-Type set to "4" and the&lt;br /&gt;   * corresponding Subscription-Id and Service-Id AVPs filled accordingly.&lt;br /&gt;   * &lt;br /&gt;   * @param subscriptionId the String value to be used for Subscription-Id AVP&lt;br /&gt;   * @param serviceId the String value to be used for Service-Id AVP&lt;br /&gt;   * @throws Exception&lt;br /&gt;   */&lt;br /&gt;  public abstract void terminateOfflineCharging(String subscriptionId, String serviceId) &lt;br /&gt;    throws Exception;&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Sends an Accounting-Request with Accounting-Record-Type set to "1" and the&lt;br /&gt;   * corresponding Subscription-Id and Service-Id AVPs filled accordingly.&lt;br /&gt;   * &lt;br /&gt;   * @param subscriptionId the String value to be used for Subscription-Id AVP&lt;br /&gt;   * @param serviceId the String value to be used for Service-Id AVP&lt;br /&gt;   * @throws Exception&lt;br /&gt;   */&lt;br /&gt;  public abstract void eventOfflineCharging(String subscriptionId, String serviceId)&lt;br /&gt;    throws Exception;&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Sets the listener to receive the callbacks from this charging client. &lt;br /&gt;   * @param listener an OfflineChargingClientListener implementor to be the listener&lt;br /&gt;   */&lt;br /&gt;  public abstract void setListener(OfflineChargingClientListener listener);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Also, we will need the applications to implement the Listener interface, in order to receive the callbacks from the Offline Charging Enabler. The interface to be implemented is quite simple, with only one method for the callback:&lt;br /&gt;&lt;pre class="brush: java"&gt;package org.mobicents.diameter.simulator.client;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Listener interface to be implemented by applications &lt;br /&gt; * wanting to have Offline Accounting&lt;br /&gt; */&lt;br /&gt;public interface OfflineChargingClientListener {&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Callback method invoked by Offline Charging Client to deliver answers&lt;br /&gt;   * &lt;br /&gt;   * @param subscriptionId the String value identifying the user&lt;br /&gt;   * @param serviceId the String value identifying the service&lt;br /&gt;   * @param sessionId a String value identifying the accounting session&lt;br /&gt;   * @param accountingRecordType the type of Accounting Record the answer refers to&lt;br /&gt;   * @param accountingRecordNumber the Accounting Record number the answer refers to&lt;br /&gt;   * @param resultCode the Result-Code value obtained from the answer&lt;br /&gt;   * @param acctInterimInterval the interval in seconds to send updates&lt;br /&gt;   */&lt;br /&gt;  public void offlineChargingAnswerCallback(String subscriptionId, &lt;br /&gt;      String serviceId, String sessionId, int accountingRecordType, &lt;br /&gt;      long accountingRecordNumber, long resultCode, long acctInterimInterval);&lt;br /&gt;  &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;The implementation for the OfflineChargingClient (not complete, just the basics to understanding) is the following:&lt;br /&gt;&lt;pre class="brush: java"&gt;public class OfflineChargingClientImpl implements OfflineChargingClient, &lt;br /&gt;    NetworkReqListener, EventListener&amp;lt;Request, Answer&amp;gt;, &lt;br /&gt;    StateChangeListener&amp;lt;AppSession&amp;gt;, ClientAccSessionListener {&lt;br /&gt;&lt;br /&gt;  // Application Id -----------------------------------------------------------&lt;br /&gt;  private static final ApplicationId ACCOUNTING_APPLICATION_ID = &lt;br /&gt;    ApplicationId.createByAccAppId(0, 3);&lt;br /&gt;&lt;br /&gt;  // Configuration Values -----------------------------------------------------&lt;br /&gt;  private static final String SERVER_HOST = "127.0.0.1";&lt;br /&gt;&lt;br /&gt;  private static String REALM_NAME = "mobicents.org";&lt;br /&gt;&lt;br /&gt;  private SessionFactory sessionFactory;&lt;br /&gt;  private AccSessionFactoryImpl accountingSessionFactory;&lt;br /&gt;  private OfflineChargingClientListener listener;&lt;br /&gt;&lt;br /&gt;  private ConcurrentHashMap&amp;lt;String, ClientAccSession&amp;gt; acctSessions = &lt;br /&gt;    new ConcurrentHashMap&amp;lt;String, ClientAccSession&amp;gt;(); &lt;br /&gt;  private ConcurrentHashMap&amp;lt;String, Integer&amp;gt; acctRecNumberMap = &lt;br /&gt;    new ConcurrentHashMap&amp;lt;String, Integer&amp;gt;(); &lt;br /&gt;  &lt;br /&gt;  public OfflineChargingClientImpl() throws Exception {&lt;br /&gt;    // Initalize Stack&lt;br /&gt;    ...&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"&gt;At this point we just define some constants, configuration values and variables to be used later. We define two maps to allow us to keep sessions and Accounting-Record-Number values stored in the enabler. This could be moved client-side if desired.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;We will next define some auxiliary methods to assit in common operations, such as creating Accounting-Requests, retrieving the appropriate Accounting-Record-Number, etc.&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;// Aux Methods --------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Gets an accounting record number for the specified user+service id&lt;br /&gt;   * @param identifier the user+service identifier&lt;br /&gt;   * @param isStart indicates if it's an initial record, which should be set to 0&lt;br /&gt;   * @return the accounting record number to be used in the AVP&lt;br /&gt;   */&lt;br /&gt;  private int getAccountingRecordNumber(String sessionId, boolean isStart) {&lt;br /&gt;    // An easy way to produce unique numbers is to set the value to 0 for&lt;br /&gt;    // records of type EVENT_RECORD and START_RECORD, and set the value to 1&lt;br /&gt;    // for the first INTERIM_RECORD, 2 for the second, and so on until the &lt;br /&gt;    // value for STOP_RECORD is one more than for the last INTERIM_RECORD.&lt;br /&gt;    int accRecNumber = 0;&lt;br /&gt;    if(!isStart) {&lt;br /&gt;      accRecNumber = acctRecNumberMap.get(sessionId);&lt;br /&gt;      accRecNumber = accRecNumber++;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    acctRecNumberMap.put(sessionId, accRecNumber);&lt;br /&gt;    &lt;br /&gt;    return accRecNumber;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  /**&lt;br /&gt;   * Creates an Accounting-Request with the specified data.&lt;br /&gt;   * &lt;br /&gt;   * @param session the session to be used for creating the request &lt;br /&gt;   * @param accRecordType the type of Accounting Record (Event, Start, Interim, Stop)&lt;br /&gt;   * @param username the value to be used in the User-Name AVP&lt;br /&gt;   * @return an AccountRequest object with the needed AVPs filled&lt;br /&gt;   * @throws InternalException&lt;br /&gt;   */&lt;br /&gt;  private AccountRequest createAccountingRequest(ClientAccSession session, &lt;br /&gt;      int accRecordType, int accRecNumber, String username) throws InternalException {&lt;br /&gt;    AccountRequest acr = new AccountRequestImpl(session, accRecordType, accRecNumber,&lt;br /&gt;        REALM_NAME, SERVER_HOST);&lt;br /&gt;&lt;br /&gt;    // Let's 'abuse' from User-Name AVP and use it for identifying user@service&lt;br /&gt;    AvpSet avps = acr.getMessage().getAvps();&lt;br /&gt;    avps.addAvp(Avp.USER_NAME, username, false);&lt;br /&gt;&lt;br /&gt;    return acr;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  /**&lt;br /&gt;   * Method for creating and sending an Accounting-Request&lt;br /&gt;   * &lt;br /&gt;   * @param identifier the user+service identifier to be used in the User-Name AVP&lt;br /&gt;   * @param accRecType the type of Accounting Record (Event, Start, Interim, Stop)&lt;br /&gt;   * @throws Exception&lt;br /&gt;   */&lt;br /&gt;  private void sendAccountingRequest(ClientAccSession session, String identifier,&lt;br /&gt;      int accRecType, int accRecNumber) throws Exception {&lt;br /&gt;    // Create Accounting-Request&lt;br /&gt;    AccountRequest acr = createAccountingRequest(session, accRecType, accRecNumber, &lt;br /&gt;      identifier);&lt;br /&gt;    &lt;br /&gt;    // Send it&lt;br /&gt;    session.sendAccountRequest(acr);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Aux method for generating a unique identifier from subscription and service ids&lt;br /&gt;   * @param subscriptionId the subscription id to be used&lt;br /&gt;   * @param serviceId the service id to be used&lt;br /&gt;   * @return the generated unique identifier&lt;br /&gt;   */&lt;br /&gt;  private String getIdentifier(String subscriptionId, String serviceId) {&lt;br /&gt;    return subscriptionId + "." + serviceId + "@" + REALM_NAME;&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"&gt;And finally we can do the real implementation for the Offline Charging Client which, hopefully, became a bit simpler.&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;// Offline Charging Client Implementation -----------------------------------&lt;br /&gt;  &lt;br /&gt;  public void setListener(OfflineChargingClientListener listener) {&lt;br /&gt;    this.listener = listener;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void startOfflineCharging(String subscriptionId, String serviceId)&lt;br /&gt;      throws Exception {&lt;br /&gt;    // Create new session to send start record&lt;br /&gt;    ClientAccSession session = (ClientAccSession) accountingSessionFactory.&lt;br /&gt;      getNewSession(null, ClientAccSession.class, ACCOUNTING_APPLICATION_ID,&lt;br /&gt;      new Object[]{});&lt;br /&gt;&lt;br /&gt;    // Store it in the map&lt;br /&gt;    acctSessions.put(session.getSessionId(), session);&lt;br /&gt;    &lt;br /&gt;    // Get the account record number&lt;br /&gt;    int accRecNumber = getAccountingRecordNumber(session.getSessionId(), true);&lt;br /&gt;    &lt;br /&gt;    sendAccountingRequest(session, getIdentifier(subscriptionId, serviceId), &lt;br /&gt;        ACCOUNTING_RECORD_TYPE_START, accRecNumber);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void interimOfflineCharging(String subscriptionId, String serviceId, &lt;br /&gt;      String sessionId) throws Exception {&lt;br /&gt;    // Fetch existing session to send interim record&lt;br /&gt;    ClientAccSession session = this.acctSessions.get(sessionId);&lt;br /&gt;&lt;br /&gt;    // Get the account record number&lt;br /&gt;    int accRecNumber = getAccountingRecordNumber(session.getSessionId(), false);&lt;br /&gt;    &lt;br /&gt;    sendAccountingRequest(session, getIdentifier(subscriptionId, serviceId), &lt;br /&gt;        ACCOUNTING_RECORD_TYPE_INTERIM, accRecNumber);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void stopOfflineCharging(String subscriptionId, String serviceId,&lt;br /&gt;      String sessionId) throws Exception {&lt;br /&gt;    // Fetch existing session  (and remove it from map) to send stop record&lt;br /&gt;    ClientAccSession session = this.acctSessions.remove(sessionId);&lt;br /&gt;    &lt;br /&gt;    // Get the account record number (and remove)&lt;br /&gt;    int accRecNumber = getAccountingRecordNumber(session.getSessionId(), false);&lt;br /&gt;    this.acctRecNumberMap.remove(session.getSessionId());&lt;br /&gt;&lt;br /&gt;    sendAccountingRequest(session, getIdentifier(subscriptionId, serviceId), &lt;br /&gt;        ACCOUNTING_RECORD_TYPE_STOP, accRecNumber);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void eventOfflineCharging(String subscriptionId, String serviceId) &lt;br /&gt;      throws Exception {&lt;br /&gt;    // Create new session to send event record&lt;br /&gt;    ClientAccSession session = (ClientAccSession) accountingSessionFactory.&lt;br /&gt;      getNewSession(null, ClientAccSession.class, ACCOUNTING_APPLICATION_ID, &lt;br /&gt;      new Object[]{});&lt;br /&gt;&lt;br /&gt;    // No need to store Session or Accounting-Record-Number as it's a one-shot.&lt;br /&gt;&lt;br /&gt;    sendAccountingRequest(session, getIdentifier(subscriptionId, serviceId), &lt;br /&gt;        ACCOUNTING_RECORD_TYPE_EVENT, 0);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  // Client Acc Session Listener Implementation -------------------------------&lt;br /&gt;  &lt;br /&gt;  public void doAccAnswerEvent(ClientAccSession appSession, AccountRequest request, &lt;br /&gt;      AccountAnswer answer) throws InternalException, IllegalDiameterStateException,&lt;br /&gt;      RouteException, OverloadException {&lt;br /&gt;&lt;br /&gt;    // Extract interesting AVPs&lt;br /&gt;    AvpSet acaAvps = answer.getMessage().getAvps();&lt;br /&gt;    &lt;br /&gt;    String subscriptionId = null;&lt;br /&gt;    String serviceId = null;&lt;br /&gt;    try {&lt;br /&gt;      String username = acaAvps.getAvp(Avp.USER_NAME).getUTF8String();&lt;br /&gt;      // It's in form subscription.service@REALM_NAME&lt;br /&gt;      String[] identifiers = username.replaceFirst("@" + REALM_NAME, "").split("\\.");&lt;br /&gt;      subscriptionId = identifiers[0];&lt;br /&gt;      serviceId = identifiers[1];&lt;br /&gt;    }&lt;br /&gt;    catch (Exception e) {&lt;br /&gt;      e.printStackTrace();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Get the session-id value&lt;br /&gt;    String sessionId = appSession.getSessionId();&lt;br /&gt;&lt;br /&gt;    // We must be able to get this, it's mandatory&lt;br /&gt;    int accRecType = -1;&lt;br /&gt;    try {&lt;br /&gt;      accRecType = answer.getAccountingRecordType();&lt;br /&gt;    }&lt;br /&gt;    catch (Exception e) {&lt;br /&gt;      e.printStackTrace();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // We must be able to get this, it's mandatory&lt;br /&gt;    long accRecNumber = -1L;&lt;br /&gt;    try {&lt;br /&gt;      accRecNumber = answer.getAccountingRecordNumber();&lt;br /&gt;    }&lt;br /&gt;    catch (Exception e) {&lt;br /&gt;      e.printStackTrace();&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    // If we can't get it we'll fallback to DIAMETER_UNABLE_TO_COMPLY (5012)&lt;br /&gt;    long resultCode = 5012L;&lt;br /&gt;    try {&lt;br /&gt;      resultCode = answer.getResultCodeAvp().getUnsigned32();&lt;br /&gt;    }&lt;br /&gt;    catch (AvpDataException e) {&lt;br /&gt;      e.printStackTrace();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Here we fallback to 0, it means the same as omitting &lt;br /&gt;    long acctInterimInterval = 0;&lt;br /&gt;    try {&lt;br /&gt;      acctInterimInterval = acaAvps.getAvp(Avp.ACCT_INTERIM_INTERVAL).getUnsigned32();&lt;br /&gt;    }&lt;br /&gt;    catch (AvpDataException e) {&lt;br /&gt;      e.printStackTrace();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Invoke the callback to deliver the answer&lt;br /&gt;    listener.offlineChargingAnswerCallback(subscriptionId, serviceId, sessionId, &lt;br /&gt;        accRecType, accRecNumber, resultCode, acctInterimInterval);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void doOtherEvent(AppSession appSession, AppRequestEvent request, &lt;br /&gt;      AppAnswerEvent answer) throws InternalException, IllegalDiameterStateException, &lt;br /&gt;      RouteException, OverloadException {&lt;br /&gt;    // We can ignore this&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"&gt;Given the above implementation of what can be seen as the enabler for offline charging, now our Example Application should implement the following state machine using the enabler:&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_RvILlFOB9co/TT12LpqLeMI/AAAAAAAAAD4/wYekCZEAF6A/s1600/OCC_State_Machine.png" imageanchor="1" style="margin-left: 0.5em; margin-right: 0.5em;" rel="lightbox" title="Offline Charging Client Application State Machine"&gt;&lt;img border="0" height="309" src="http://1.bp.blogspot.com/_RvILlFOB9co/TT12LpqLeMI/AAAAAAAAAD4/wYekCZEAF6A/s640/OCC_State_Machine.png" width="600" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;So let's get our hands dirty with the example application implementation, which should implement the above specified listener interface:&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: java"&gt;package org.mobicents.diameter.simulator.client;&lt;br /&gt;&lt;br /&gt;import static org.mobicents.diameter.simulator.client.OfflineChargingClient.*;&lt;br /&gt;&lt;br /&gt;public class ExampleApplication implements OfflineChargingClientListener  {&lt;br /&gt;&lt;br /&gt;  // Internal Client State Machine --------------------------------------------&lt;br /&gt;  private static final int STATE_IDLE                  = 0;&lt;br /&gt;  private static final int STATE_START_ACR_SENT        = 2;&lt;br /&gt;  private static final int STATE_START_ACA_SUCCESS     = 4;&lt;br /&gt;  private static final int STATE_INTERIM_ACR_SENT      = 6;&lt;br /&gt;  private static final int STATE_INTERIM_ACA_SUCCESS   = 8;&lt;br /&gt;  private static final int STATE_STOP_ACR_SENT         = 10;&lt;br /&gt;  private static final int STATE_STOP_ACA_SUCCESS      = 12;&lt;br /&gt;  private static final int STATE_EVENT_ACR_SENT        = 14;&lt;br /&gt;  private static final int STATE_EVENT_ACA_SUCCESS     = 16;&lt;br /&gt;  private static final int STATE_END                   = 18;&lt;br /&gt;  private static final int STATE_ERROR                 = 99;&lt;br /&gt;&lt;br /&gt;  private int currentState = STATE_IDLE;&lt;br /&gt;&lt;br /&gt;  public static void main(String[] args) throws Exception {&lt;br /&gt;    ExampleApplication app = new ExampleApplication(new OfflineChargingClientImpl());&lt;br /&gt;    app.occ.startOfflineCharging("", "");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  private OfflineChargingClient occ;&lt;br /&gt;&lt;br /&gt;  public ExampleApplication(OfflineChargingClient occ) {&lt;br /&gt;    this.occ = occ;&lt;br /&gt;    occ.setListener(this);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void offlineChargingAnswerCallback(String subscriptionId, String serviceId, &lt;br /&gt;      String sessionId, int accountingRecordType, long accountingRecordNumber, &lt;br /&gt;      long resultCode, long acctInterimInterval) {&lt;br /&gt;    // Handle the EVENT situation&lt;br /&gt;    if(accountingRecordType == ACCOUNTING_RECORD_TYPE_EVENT) {&lt;br /&gt;      if(this.currentState == STATE_EVENT_ACR_SENT) {&lt;br /&gt;        if(resultCode == 2001) {&lt;br /&gt;          this.currentState = STATE_EVENT_ACA_SUCCESS;&lt;br /&gt;          System.out.println("(((o))) Event Offline Charging for user '"+ subscriptionId +&lt;br /&gt;              "' and service '" + serviceId + "' completed! (((o)))");&lt;br /&gt;          // and now just to be correct...&lt;br /&gt;          this.currentState = STATE_END;          &lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;      else {&lt;br /&gt;        this.currentState = STATE_ERROR;&lt;br /&gt;        throw new RuntimeException("Unexpected message received.");&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    // Handle START / INTERIM / STOP situation&lt;br /&gt;    else {&lt;br /&gt;      switch(this.currentState) {&lt;br /&gt;      // Receiving an Answer at any of these states is an error&lt;br /&gt;      case STATE_IDLE:&lt;br /&gt;      case STATE_EVENT_ACA_SUCCESS:&lt;br /&gt;      case STATE_START_ACA_SUCCESS:&lt;br /&gt;      case STATE_INTERIM_ACA_SUCCESS:&lt;br /&gt;      case STATE_STOP_ACA_SUCCESS:&lt;br /&gt;        // At any of these states we don't expect to receive an ACA, move to error.&lt;br /&gt;        this.currentState = STATE_ERROR;&lt;br /&gt;        break;&lt;br /&gt;        // We've sent ACR EVENT&lt;br /&gt;      case STATE_START_ACR_SENT:&lt;br /&gt;        if(accountingRecordType == ACCOUNTING_RECORD_TYPE_START) {&lt;br /&gt;          if(resultCode &amp;gt;= 2000 &amp;amp;&amp;amp; resultCode &amp;lt; 3000) {&lt;br /&gt;            // Our event charging has completed successfully. We're done!&lt;br /&gt;            System.err.println("(((o))) Offline Charging for user '" + subscriptionId +&lt;br /&gt;                "' and service '" + serviceId + "' started... (((o)))");&lt;br /&gt;&lt;br /&gt;            if(acctInterimInterval &amp;gt; 0) {&lt;br /&gt;              try {&lt;br /&gt;                // Let's sleep until next interim update...&lt;br /&gt;                Thread.sleep(acctInterimInterval * 1000);&lt;br /&gt;&lt;br /&gt;                // We send an update at the correct time&lt;br /&gt;                occ.interimOfflineCharging(subscriptionId, serviceId, sessionId);&lt;br /&gt;              }&lt;br /&gt;              catch (Exception e) {&lt;br /&gt;                this.currentState = STATE_ERROR;&lt;br /&gt;                throw new RuntimeException("Unable to schedule/send interim update.", e);&lt;br /&gt;              }&lt;br /&gt;            }&lt;br /&gt;          }&lt;br /&gt;          else {&lt;br /&gt;            // It failed&lt;br /&gt;            System.err.println("(((x))) Offline Charging for user '" + subscriptionId + &lt;br /&gt;                "' and service '" + serviceId + "' failed with Result-Code="+ resultCode +&lt;br /&gt;                "! (((x)))");&lt;br /&gt;          }&lt;br /&gt;        }&lt;br /&gt;        else {&lt;br /&gt;          this.currentState = STATE_ERROR;&lt;br /&gt;          throw new RuntimeException("Unexpected message received.");&lt;br /&gt;        }&lt;br /&gt;        break;&lt;br /&gt;        // We've sent ACR START&lt;br /&gt;      case STATE_INTERIM_ACR_SENT:&lt;br /&gt;        if(accountingRecordType == ACCOUNTING_RECORD_TYPE_INTERIM) {&lt;br /&gt;          if(resultCode &amp;gt;= 2000 &amp;amp;&amp;amp; resultCode &amp;lt; 3000) {&lt;br /&gt;            // Our offline charging has started successfully...&lt;br /&gt;            System.out.println("(((o))) Offline Charging for user '" + subscriptionId +&lt;br /&gt;                "' and service '" + serviceId + "' updated... (((o)))");&lt;br /&gt;&lt;br /&gt;            if(acctInterimInterval &amp;gt; 0) {&lt;br /&gt;              try {&lt;br /&gt;                // Let's sleep until next interim update...&lt;br /&gt;                Thread.sleep(acctInterimInterval);&lt;br /&gt;&lt;br /&gt;                // We send an update at the correct time&lt;br /&gt;                occ.interimOfflineCharging(subscriptionId, serviceId, sessionId);&lt;br /&gt;              }&lt;br /&gt;              catch (Exception e) {&lt;br /&gt;                this.currentState = STATE_ERROR;&lt;br /&gt;                throw new RuntimeException("Unable to schedule/send interim update.", e);&lt;br /&gt;              }&lt;br /&gt;            }&lt;br /&gt;          }&lt;br /&gt;          else {&lt;br /&gt;            // It failed, let's warn the application&lt;br /&gt;            System.out.println("(((x))) Offline Charging for user '" + subscriptionId +&lt;br /&gt;                "' and service '" + serviceId + "' failed to start with Result-Code=" +&lt;br /&gt;                resultCode + "! (((x)))");&lt;br /&gt;          }&lt;br /&gt;        }&lt;br /&gt;        else {&lt;br /&gt;          this.currentState = STATE_ERROR;&lt;br /&gt;          throw new RuntimeException("Unexpected message received.");&lt;br /&gt;        }&lt;br /&gt;        break;&lt;br /&gt;      case STATE_STOP_ACR_SENT:&lt;br /&gt;        if(accountingRecordType == ACCOUNTING_RECORD_TYPE_INTERIM) {&lt;br /&gt;          if(resultCode &amp;gt;= 2000 &amp;amp;&amp;amp; resultCode &amp;lt; 3000) {&lt;br /&gt;            // Our offline charging has started successfully...&lt;br /&gt;            System.out.println("(((o))) Offline Charging for user '" + subscriptionId +&lt;br /&gt;                "' and service '" + serviceId + "' stopped! (((o)))");&lt;br /&gt;          }&lt;br /&gt;          else {&lt;br /&gt;            // It failed, let's warn the application&lt;br /&gt;            System.out.println("(((x))) Offline Charging for user '" + subscriptionId +&lt;br /&gt;                "' and service '" + serviceId + "' failed to stop with Result-Code=" +&lt;br /&gt;                resultCode + "! (((x)))");&lt;br /&gt;          }&lt;br /&gt;        }&lt;br /&gt;        else {&lt;br /&gt;          this.currentState = STATE_ERROR;&lt;br /&gt;          throw new RuntimeException("Unexpected message received.");&lt;br /&gt;        }&lt;br /&gt;        break;&lt;br /&gt;      default:&lt;br /&gt;        this.currentState = STATE_ERROR;&lt;br /&gt;        throw new RuntimeException("Unexpected message received.");&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;span class="Apple-style-span"&gt;As it can be seen it turns to be really simple to implement such Application using Offline Charging in this way. The above application also provides an enhancement, which is to automatically wait and send the interim ACR updates (lines 73-85 and 107-119). That obviously is a design choice, which can be changed if control over that behavior is intended.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;u&gt;Conclusion&lt;/u&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;As this article was meant to demonstrate it's simple to add Offline Accounting to your applications using Mobicents Diameter solution. Several options (and scenarios) were simplified in order to keep the example easier to understand and follow the steps, as well as to give a better understanding of the Mobicents Diameter solution, while still rendering a completely functional solution.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;You can learn more about Mobicents Diameter at &lt;a href="http://www.mobicents.org/diameter/"&gt;http://www.mobicents.org/diameter/&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4670964355147826480-7485335074811812225?l=ammendonca.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ammendonca.blogspot.com/feeds/7485335074811812225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ammendonca.blogspot.com/2011/01/developing-offline-charging-application.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/7485335074811812225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/7485335074811812225'/><link rel='alternate' type='text/html' href='http://ammendonca.blogspot.com/2011/01/developing-offline-charging-application.html' title='Developing an Offline Charging Application with Mobicents Diameter'/><author><name>Alexandre Mendonça</name><uri>http://www.blogger.com/profile/09409638475629377312</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://4.bp.blogspot.com/_RvILlFOB9co/SqDi6dqwHgI/AAAAAAAAABM/GTvQAS3hSgI/S220/ammendonca.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_RvILlFOB9co/TT12LpqLeMI/AAAAAAAAAD4/wYekCZEAF6A/s72-c/OCC_State_Machine.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4670964355147826480.post-7255388737410105742</id><published>2010-10-16T00:28:00.001+01:00</published><updated>2010-10-18T16:06:53.454+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='high-availability'/><category scheme='http://www.blogger.com/atom/ns#' term='team-building'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='diameter'/><category scheme='http://www.blogger.com/atom/ns#' term='mobicents'/><title type='text'>Mobicents Team Meeting 2010 @ Antalya, Turkey</title><content type='html'>&lt;div style="clear: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_RvILlFOB9co/TLisaJC4iuI/AAAAAAAAADg/Xplhq_eqqJM/s1600/mobicents_antalya_1.jpg" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Yes, this paradisal venue (Alva Donna Resort &amp;amp; SPA at Belek, Antalya, Turkey) was where the 2010 Mobicents Face-to-Face Meeting was held, 24th - 30th September. Thanks to &lt;a href="http://emmartins.blogspot.com/"&gt;Eduardo Martins&lt;/a&gt; for arranging the trip, it was the best &lt;b&gt;_ever_&lt;/b&gt; for several reasons: It was the first time we managed to gather all the team together, ranging from a couple of hours travelling to some doing it in a day and half! But I'm sure it worth every minute!&lt;br /&gt;&lt;br /&gt;Also, this was the first (and certainly not the last!) time we had customers and community users joining our technical meetings and providing the most valuable feedback for our products and their roadmap. It's a whole new&amp;nbsp;perspective&amp;nbsp;and for that, we can only say: &lt;b&gt;Thank You!&lt;/b&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_RvILlFOB9co/TLjXYmMsvuI/AAAAAAAAADk/yFO_jlGPFF0/s1600/mobicents_antalya_2" /&gt;&lt;/div&gt;&lt;br /&gt;It was also the one we had more entertainment available, from the first day rafting to the resort's nightly shows, several swimming pools, sliders, jetski, bowling, etc etc. It sure was a lot of fun!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_RvILlFOB9co/TLjboNvnV5I/AAAAAAAAADo/phLmMh4W6Qc/s1600/mobicents_antalya_3" /&gt;&lt;/div&gt;&lt;br /&gt;But we had to work too (a lot :-)) between all this fun. We had presentations for the main Mobicents projects, mostly regarding the past, present and future of each project, ie, what we achieved in the last year, the current status of each project in terms of stability, performance and features and the plans for the upcoming year. Also we had some project-wide presentations, such as clustering which affects most of the projects.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_RvILlFOB9co/TLjd0ir5KYI/AAAAAAAAADs/w20KjjwJClQ/s1600/mobicents_antalya_4" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;For my main project, Mobicents Diameter, we had a crash course to give a quick introduction to what it is all about and it's role in the telco world (something to be explored here too, promised!) presented by &lt;a href="http://baranowb.blogspot.com/"&gt;Bartosz Baranowski&lt;/a&gt; and after, I did the presentation regarding the achievements and roadmap. In sum, this was a great year for Mobicents Diameter:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;8 Releases, 3 of them being major ones, with important features introduced (JBoss 5 support; JAIN SLEE 1.1 Resource Adaptors; High-Availability/Fault-Tolerant Stack and Resource Adaptors)&lt;/li&gt;&lt;li&gt;Management Console based on RHQ&lt;/li&gt;&lt;li&gt;400% Performance improvement ( &amp;gt; 800 requests/second )&lt;/li&gt;&lt;li&gt;Complete User Guide Documentation&lt;/li&gt;&lt;li&gt;.. and some more!&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;We had quite a good set of achievements, I would say! But we have a lot more to achieve in the future. We are focusing on the stability and performance of our solution, extend the testsuite and interop with other Diameter products to ensure complete compliance with the protocol and applications. We have defined two different goals:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Continue work on the 1.x.y series, providing it with stability and better performance;&lt;/li&gt;&lt;li&gt;Start a 2.x.y series, where we intend to change several internal components as well as redesigning the API to make it more easy and intuitive to work with, probably also providing a high-level abstraction to the Diameter protocol to provide simple charging. This is something to be discussed among the community to understand the direction to follow&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;You can find the Diameter presentation &lt;a href="https://docs.google.com/leaf?id=0AZBg4V7zCLK2ZGN4bmZ6dGNfNDZjcWZ0aHRoYw&amp;amp;sort=name&amp;amp;layout=list&amp;amp;num=50"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Regarding the other project where I participate, Mobicents JAIN SLEE, we had also an excellent year of work, with great achievements. You can read more in detail on Eduardo's &lt;a href="http://emmartins.blogspot.com/2010/10/mobicents-team-meeting-2010-antalya.html"&gt;post&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, this was it. It was a blast! Counting the days for the next meeting, looking forward to see even more community users joining us!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-right: 1em; text-align: left;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: left;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_RvILlFOB9co/TLjfKYKzmrI/AAAAAAAAADw/E6RDgWuw45M/s1600/mobicents_antalya_5" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;The Greatest (Vladimir and Tom are missing :-\) -- Görüşmek üzere! (See you soon, in Turkish ;-))&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4670964355147826480-7255388737410105742?l=ammendonca.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ammendonca.blogspot.com/feeds/7255388737410105742/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ammendonca.blogspot.com/2010/10/mobicents-team-meeting-2010-antalya.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/7255388737410105742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/7255388737410105742'/><link rel='alternate' type='text/html' href='http://ammendonca.blogspot.com/2010/10/mobicents-team-meeting-2010-antalya.html' title='Mobicents Team Meeting 2010 @ Antalya, Turkey'/><author><name>Alexandre Mendonça</name><uri>http://www.blogger.com/profile/09409638475629377312</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://4.bp.blogspot.com/_RvILlFOB9co/SqDi6dqwHgI/AAAAAAAAABM/GTvQAS3hSgI/S220/ammendonca.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_RvILlFOB9co/TLisaJC4iuI/AAAAAAAAADg/Xplhq_eqqJM/s72-c/mobicents_antalya_1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4670964355147826480.post-7146425337592717567</id><published>2010-09-16T20:25:00.000+01:00</published><updated>2010-09-16T20:25:41.013+01:00</updated><title type='text'>User Survey: Help improving Mobicents Platform!</title><content type='html'>As you (should) know a Mobicents Face-to-Face meeting is about to happen (you can still join us!) and we would like to have some input from our community on what Mobicents products they are using, what they think about them, what they would like to have in future versions, etc.&lt;br /&gt;&lt;br /&gt;It's a great chance for you to be able to participate in the future of Mobicents platform, don't miss it! How can you do that? By simply filling a quick 5-minute survey where you can make your opinion count and affect the roadmaps!&lt;br /&gt;&lt;br /&gt;Without further delays, head your browser to the survey at &lt;a href="https://spreadsheets.google.com/viewform?formkey=dHk2ZGVQZ21zSG9sbXVJRUJzX2dNaXc6MQ"&gt;https://spreadsheets.google.com/viewform?formkey=dHk2ZGVQZ21zSG9sbXVJRUJzX2dNaXc6MQ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Please provide information as accurate and detailed as possible.&lt;br /&gt;&lt;br /&gt;Thanks for your time and support!&lt;br /&gt;&amp;nbsp;&amp;nbsp;The Mobicents Team&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4670964355147826480-7146425337592717567?l=ammendonca.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ammendonca.blogspot.com/feeds/7146425337592717567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ammendonca.blogspot.com/2010/09/user-survey-help-improving-mobicents.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/7146425337592717567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/7146425337592717567'/><link rel='alternate' type='text/html' href='http://ammendonca.blogspot.com/2010/09/user-survey-help-improving-mobicents.html' title='User Survey: Help improving Mobicents Platform!'/><author><name>Alexandre Mendonça</name><uri>http://www.blogger.com/profile/09409638475629377312</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://4.bp.blogspot.com/_RvILlFOB9co/SqDi6dqwHgI/AAAAAAAAABM/GTvQAS3hSgI/S220/ammendonca.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4670964355147826480.post-4883205311647841245</id><published>2010-07-21T02:05:00.003+01:00</published><updated>2010-07-27T15:06:34.463+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='installation'/><category scheme='http://www.blogger.com/atom/ns#' term='rhq'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='jainslee'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='monitoring'/><category scheme='http://www.blogger.com/atom/ns#' term='diameter'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss'/><title type='text'>Installing Jopr/RHQ and Mobicents JAIN SLEE (or Diameter) Plugin</title><content type='html'>As it seems that some users don't find the task of installing and configuring Mobicents JAIN SLEE / Diameter Management consoles as plugins for Jopr/RHQ easy, I've decided to make a blog post explaining how to do it.&lt;br /&gt;&lt;br /&gt;But if an image worths more than 1.000 words, how many words can a video worth? :) Hopefully, a lot, because I've just recorded one that I hope it helps to better understand how it should be done.&lt;br /&gt;&lt;br /&gt;Still, I will point the main actions to be executed and the time they occur at the video, for faster reference.&lt;br /&gt;&lt;br /&gt;Here it is, right from the &lt;a href="http://vimeo.com/channels/mobicents"&gt;Mobicents Channel&lt;/a&gt; @ Vimeo:&lt;br /&gt;&lt;object height="250" width="400"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=13500737&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=13500737&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="250"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/13500737"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Installing Jopr/RHQ and Mobicents JAIN SLEE 2.x Plugin&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&amp;nbsp;(click to watch in HD)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;[00:00] Download RHQ Server from &lt;a href="http://www.rhq-project.org/"&gt;http://www.rhq-project.org/&lt;/a&gt; and&amp;nbsp;Unzip&amp;nbsp;rhq-server-3.0.0.zip to any directory of your choice;&lt;/li&gt;&lt;li&gt;[00:50] In a terminal, go to "rhq-server-3.0.0/bin" inside the extracted folder and run "&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;rhq-server.[bat|sh] console&lt;/span&gt;", depending on your OS;&lt;/li&gt;&lt;li&gt;[01:30] Go to &lt;a href="http://127.0.0.1:7080/"&gt;http://127.0.0.1:7080/&lt;/a&gt; and install the server (don't forget to select your database);&lt;/li&gt;&lt;li&gt;[03:15] Login with default credentials (rhqadmin/rhqadmin), go to Downloads and Download the "Agent Installer";&lt;/li&gt;&lt;li&gt;[04:00] In a new terminal, go to the directory where the Agent Installer was downloaded and issue the command "&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;java -jar rhq-enterprise-agent-3.0.0.jar --install&lt;/span&gt;" to install it;&lt;/li&gt;&lt;li&gt;[04:35] In the same terminal go to rhq-agent/bin (where it was installed) and run "&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;rhq-agent.[bat|sh] --clean&lt;/span&gt;" (use --clean to make sure you will use a fresh configuration). Default values should be fine;&lt;/li&gt;&lt;li&gt;[05:30] In the web interface, go to &lt;i&gt;Administration &amp;gt; System Configuration &amp;gt; Plugins&lt;/i&gt;, click "&lt;i&gt;Add&lt;/i&gt;" and browse to the Mobicents JAIN SLEE / Diameter Plugin location and click "&lt;i&gt;Upload&lt;/i&gt;". When done, click "&lt;i&gt;Scan for Updates&lt;/i&gt;";&lt;/li&gt;&lt;li&gt;[07:45] If not yet running, start yout JAIN SLEE / Diameter Server;&lt;/li&gt;&lt;li&gt;[09:30] In the RHQ Agent terminal, issue "&lt;i&gt;plugins update&lt;/i&gt;" to update the agent plugins (download the JAIN SLEE / Diameter plugin to the agent);&lt;/li&gt;&lt;li&gt;[11:10] Now that the plugins are updated, and with the JAIN SLEE / Diameter Server running, in the Agent terminal issue the "&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;discovery&lt;/span&gt;" command to find new resources;&lt;/li&gt;&lt;li&gt;[11:35] In the web interface, go to &lt;i&gt;Overview &amp;gt; Auto Discovery Queue&lt;/i&gt;, locate the Server, check it and click "&lt;i&gt;Import&lt;/i&gt;"&lt;/li&gt;&lt;li&gt;[12:45] Still at the webpage, head to &lt;i&gt;Resources &amp;gt; Servers&lt;/i&gt;. Click on the server entry to manage it. Enjoy!&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Simple, isn't it ? Hope it is now.. It's time to have fun, managing and monitoring Mobicents Servers via Jopr/RHQ ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For details on what you can do with these plugins, please refer to the documentation found in the binaries releases of the servers.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4670964355147826480-4883205311647841245?l=ammendonca.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ammendonca.blogspot.com/feeds/4883205311647841245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ammendonca.blogspot.com/2010/07/installing-joprrhq-and-mobicents-jain.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/4883205311647841245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/4883205311647841245'/><link rel='alternate' type='text/html' href='http://ammendonca.blogspot.com/2010/07/installing-joprrhq-and-mobicents-jain.html' title='Installing Jopr/RHQ and Mobicents JAIN SLEE (or Diameter) Plugin'/><author><name>Alexandre Mendonça</name><uri>http://www.blogger.com/profile/09409638475629377312</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://4.bp.blogspot.com/_RvILlFOB9co/SqDi6dqwHgI/AAAAAAAAABM/GTvQAS3hSgI/S220/ammendonca.png'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4670964355147826480.post-8750358624684649639</id><published>2010-02-26T11:49:00.004Z</published><updated>2010-02-26T11:57:13.381Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='monitoring'/><category scheme='http://www.blogger.com/atom/ns#' term='diameter'/><category scheme='http://www.blogger.com/atom/ns#' term='jopr'/><category scheme='http://www.blogger.com/atom/ns#' term='mobicents'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss'/><title type='text'>Mobicents Diameter 1.1.2.GA: Introducing Diameter Jopr Plugin</title><content type='html'>We've just released a new spin for Mobicents Diameter, v1.1.2.GA.&lt;br /&gt;&lt;br /&gt;It happened on 21st of February and along with the usual bug fixing and improvements, there's a great addition to the suite: The Mobicents Diameter Jopr Plugin.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jboss.org/jopr" target="_blank"&gt;Jopr&lt;/a&gt;&amp;nbsp;is an enterprise management solution which provides administration, monitoring, alerting, operational control and configuration in an enterprise setting with fine-grained security and an advanced extension model.&lt;br /&gt;&lt;br /&gt;The Mobicents Diameter Jopr Plugin provides the following functionalities:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Stack configuration and management&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Provides means of changing stack parameters, such as various timeout values, duplicate protection, accept undefined peers, thread pools size, etc.;&lt;/li&gt;&lt;li&gt;Start/Stop stack,&amp;nbsp;Enable/Disable validation&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Local peer configuration&amp;nbsp;and statistics&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Allows change of local peer IP Address and URI, Realm name, supported Application-Ids, etc.;&lt;/li&gt;&lt;li&gt;Real time statistics regarding memory usage&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Network Peers management and statistics&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Provides ability to add and remove Network Peers;&lt;/li&gt;&lt;li&gt;Statistics regarding requests/answer sent and/or received (total and per minute), Average time for message processing, Number of messages waiting on queue, number of messages failed to send/receive, etc.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Realms&amp;nbsp;configuration&amp;nbsp;and management&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Allow runtime realm configuration, ie, change realm name, Peers list, Application Ids, etc.;&lt;/li&gt;&lt;li&gt;Add and remove Realms&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;All these functionalities plus the added value by Jopr, which provides availability for each component (Stack, Local Peer, Network Peers and Realms), alert configuration, intuitive graphs and some more cool and intuitive features makes this a great companion for the Diameter suite!&lt;br /&gt;&lt;br /&gt;Regarding installation and configuration of Jopr and the plugin, while we are working at the documentation for it, you can follow &lt;a href="http://www.mobicents.org/slee/docs.html" target="_blank"&gt;JAIN SLEE Jopr Plugin User Guide&lt;/a&gt; (Installing Jopr and Mobicents JAIN SLEE Plugin chapter) since it's the exact same procedure.&lt;br /&gt;&lt;br /&gt;Here are some screenshots of the plugin in action:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_RvILlFOB9co/S4exRzPy4HI/AAAAAAAAACk/DaCPAv7PuRA/s1600-h/Diameter_LocalPeer_Main.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="123" src="http://3.bp.blogspot.com/_RvILlFOB9co/S4exRzPy4HI/AAAAAAAAACk/DaCPAv7PuRA/s200/Diameter_LocalPeer_Main.png" width="200" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://3.bp.blogspot.com/_RvILlFOB9co/S4eyF4zWsjI/AAAAAAAAACs/px0oYDjuWu0/s1600-h/Diameter_Stack_Configuration.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="123" src="http://3.bp.blogspot.com/_RvILlFOB9co/S4eyF4zWsjI/AAAAAAAAACs/px0oYDjuWu0/s200/Diameter_Stack_Configuration.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_RvILlFOB9co/S4ezZVKalrI/AAAAAAAAAC0/xsRHqb5PsGs/s1600-h/Diameter_Inventory.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="123" src="http://1.bp.blogspot.com/_RvILlFOB9co/S4ezZVKalrI/AAAAAAAAAC0/xsRHqb5PsGs/s200/Diameter_Inventory.png" width="200" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://3.bp.blogspot.com/_RvILlFOB9co/S4ezlEPNOnI/AAAAAAAAAC8/vR6iUP2j-D4/s1600-h/Diameter_NetworkPeer_Monitor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="123" src="http://3.bp.blogspot.com/_RvILlFOB9co/S4ezlEPNOnI/AAAAAAAAAC8/vR6iUP2j-D4/s200/Diameter_NetworkPeer_Monitor.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_RvILlFOB9co/S4e0gpEWclI/AAAAAAAAADE/mS4QWoyj-qo/s1600-h/Diameter_AverageMessageProcessing.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="123" src="http://2.bp.blogspot.com/_RvILlFOB9co/S4e0gpEWclI/AAAAAAAAADE/mS4QWoyj-qo/s200/Diameter_AverageMessageProcessing.png" width="200" /&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://4.bp.blogspot.com/_RvILlFOB9co/S4e0mnpktbI/AAAAAAAAADM/kib8Gty0g1E/s1600-h/Diameter_NetworkPeer_MultiGraphs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" height="123" src="http://4.bp.blogspot.com/_RvILlFOB9co/S4e0mnpktbI/AAAAAAAAADM/kib8Gty0g1E/s200/Diameter_NetworkPeer_MultiGraphs.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4670964355147826480-8750358624684649639?l=ammendonca.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ammendonca.blogspot.com/feeds/8750358624684649639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ammendonca.blogspot.com/2010/02/mobicents-diameter-112ga-introducing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/8750358624684649639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/8750358624684649639'/><link rel='alternate' type='text/html' href='http://ammendonca.blogspot.com/2010/02/mobicents-diameter-112ga-introducing.html' title='Mobicents Diameter 1.1.2.GA: Introducing Diameter Jopr Plugin'/><author><name>Alexandre Mendonça</name><uri>http://www.blogger.com/profile/09409638475629377312</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://4.bp.blogspot.com/_RvILlFOB9co/SqDi6dqwHgI/AAAAAAAAABM/GTvQAS3hSgI/S220/ammendonca.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_RvILlFOB9co/S4exRzPy4HI/AAAAAAAAACk/DaCPAv7PuRA/s72-c/Diameter_LocalPeer_Main.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4670964355147826480.post-1430758184092792686</id><published>2009-11-22T04:29:00.009Z</published><updated>2009-11-22T12:45:36.739Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='build'/><category scheme='http://www.blogger.com/atom/ns#' term='traffic generator'/><category scheme='http://www.blogger.com/atom/ns#' term='source'/><category scheme='http://www.blogger.com/atom/ns#' term='leopard'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='diameter'/><category scheme='http://www.blogger.com/atom/ns#' term='imac'/><category scheme='http://www.blogger.com/atom/ns#' term='seagull'/><title type='text'>Installing Seagull on Mac OS X</title><content type='html'>Ahh... Nothing like a rainy Saturday to get in the mood for some tasks that were delayed for too long!&lt;br /&gt;&lt;br /&gt;As I was getting ready to watch the soccer match between &lt;a href="http://www.fcporto.pt/"&gt;FC Porto&lt;/a&gt; (my team) and Oliveirense, at Oliveirense's stadium, the referee decided that there were no conditions (really bad pitch, also due to the rain) for the game to happen... well, I had to do something... :-)&lt;br /&gt;&lt;br /&gt;Installing &lt;a href="http://gull.sourceforge.net/"&gt;Seagull&lt;/a&gt; (the network traffic generator, useful for my Diameter tests) in my iMac was one of those tasks that I could never find the time, and today it seemed a good day. I knew it was not going to be a simple task, as I've tried sometime ago to install (ie, build from source) under Ubuntu or some other Linux distro and never made it... but I didn't tried hard either, as there are RHEL/Fedora binaries I just setup a VM with it.&lt;br /&gt;&lt;br /&gt;OK.. So, first step was to look for someone who had already done the job... couldn't find any, seems like Mac's are not chosen&amp;nbsp;as dev machines very often. No binaries, no instructions. I'm on my own.&lt;br /&gt;&lt;br /&gt;The INSTALL.TXT has some instructions on how to build it... the commands to run. I'll do it as I like to: run until it crashes and see what's wrong after. First instruction is:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Edit build.conf to fit your needs (default should be OK)&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;If it says it should be OK, it should be OK. Let's move on.&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;run "./build.ksh -target clean"&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Just to make sure everything is clean. Not a problem, no issues here. Next!&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;run "./build.ksh -target all"&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;This is where the "fun" began. It simply failed with some &amp;nbsp;generic failure message:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;[Begin Makefile generation phase]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;[Creating symbolic link: /Users/ammendonca/Desktop/seagull/bin]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;[Making directory: /Users/ammendonca/Desktop/seagull/work-1.8.1]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;[Making directory: /Users/ammendonca/Desktop/seagull/build-1.8.1]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;make: *** [/Users/ammendonca/Desktop/seagull/work-1.8.1/project.mk] Error 1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt; &amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;[Begin compilation phase]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;make: *** No rule to make target `all'. &amp;nbsp;Stop.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;Nice, isn't it? Not much clues of what and where it is failing. After running some pieces of the make script by itself, I got to &lt;span style="text-decoration: underline;"&gt;./work-1.8.1/&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;compiler.mk&lt;/span&gt;&amp;nbsp;file where it said &lt;b&gt;"Compiler variable for OS DARWIN not defined"&lt;/b&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For adding this information, it was needed to edit the &lt;span style="text-decoration: underline;"&gt;./&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;build.conf&lt;/span&gt; afterall :-). So I just copied all the (...)_LINUX entries and renamed them to _DARWIN, et voilá. It worked.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next ran, next failure:&lt;br /&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;[Compiling protocol-external/C_ProtocolExternal.cpp]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;[Compiling protocol-text/C_MessageText.cpp]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;cc1plus: warnings being treated as errors&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;protocol-text/C_MessageText.cpp: In member function 'C_ProtocolFrame::_msg_error_code C_MessageText::EncodeWithContentLength(int)':&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;protocol-text/C_MessageText.cpp:62: warning: format '%d' expects type 'int', but argument 4 has type 'size_t'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;make[1]: *** [/Users/ammendonca/Desktop/seagull/work-1.8.1/C_MessageText.o] Error 1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;make: *** [all_seagull] Error 2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;This was a pretty simple and obvious one. Just learned how size_t should be printed, it's with %Zd instead of the %d that is present. Made that change at line 62 of &lt;span style="text-decoration: underline;"&gt;./&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;protocol-text/C_MessageText.cpp&lt;/span&gt; and that's it!&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One step closer... but not there yet:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;[Compiling /Users/ammendonca/Desktop/seagull/work-1.8.1/y.tab.c]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;y.tab.c: In function 'int yyparse()':&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;y.tab.c:1349: error: 'yylex' was not declared in this scope&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;y.tab.c:1587: error: 'yyerror' was not declared in this scope&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;y.tab.c:1733: error: 'yyerror' was not declared in this scope&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;make[1]: *** [/Users/ammendonca/Desktop/seagull/work-1.8.1/y.tab.o] Error 1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;make: *** [all_seagull] Error 2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;Checking the referred y.tab.c I've checked it declared those methods only if some vars (__linux__ OR __CYGWIN__) were declared. This should be some compiler info as my friend grep didn't found any reference on the seagull sources. Googled a little bit and just &lt;a href="http://lists.debian.org/debian-devel/2001/01/msg00979.html"&gt;found what it was&lt;/a&gt;&amp;nbsp;and so I checked it should be __APPLE__ for my system.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A previous message showed that this&amp;nbsp;y.tab.c&amp;nbsp;file was being generated and, so, with the help of grep I managed to find out that it came from &lt;span style="text-decoration: underline;"&gt;./xml-parser/xml_definition.y&lt;/span&gt;, at line 38. Changed&lt;br /&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;#if defined(__linux__) || defined(__CYGWIN__)&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;to&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;#if defined(__linux__) || defined(__CYGWIN__)&lt;/span&gt;&lt;b&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt; || defined(__APPLE__)&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;It was almost there... got the binary seagull already linked in the ./bin folder! Good news, but still some required lib is failing to link:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;[Linking /Users/ammendonca/Desktop/seagull/build-1.8.1/libtrans_ip.so]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;Undefined symbols:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;&amp;nbsp;&amp;nbsp;"_main", referenced from:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;start in crt1.10.5.o&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;ld: symbol(s) not found&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;collect2: ld returned 1 exit status&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;make[1]: *** [/Users/ammendonca/Desktop/seagull/build-1.8.1/libtrans_ip.so] Error 1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span style="color: #ea9999;"&gt;make: *** [all_libtrans_ip.so] Error 2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Boooring! Thought this could be it... so much work and now some weird linkage error was going to throw it all away. Well.. can't give up, tried some own ideas... then went googling, nothing much useful, every linkage error seems to have this same output.&lt;br /&gt;&lt;br /&gt;Since it referred main, started looking for it.. no sign of it in the files being linked. Hmm.. that makes sense, it's a library, why would it need to have a main anyway? After checking the flags being used for compilation, just found out this one for compiling a library was not present: &lt;b&gt;-dynamiclib&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;So I added it to&amp;nbsp;&lt;b&gt;BUILD_LIB_LD_FLAGS_DARWIN&lt;/b&gt; in &lt;span style="text-decoration: underline;"&gt;./build.conf&lt;/span&gt; which now looked like this:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;BUILD_LIB_LD_FLAGS_DARWIN="-shared -fPIC -dynamiclib"&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;Yeah! Everything worked just fine! The install was completed successfully and all the binaries were in the bin folder. Hurray!&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This was a lengthy journey but in the end it was fruitful.. as always, when it works ;-) Seagull v1.8.1 running on Mac OS X 10.5.6 (Leopard)!&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Notes:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Apple Dev Tools are required to be installed prior to any of this being made. They can be found in &amp;nbsp;the Install DVD;&lt;/li&gt;&lt;li&gt;I had to run the commands with "sudo" as it required permissions for some operations;&lt;/li&gt;&lt;li&gt;Optionally you can run "./install.ksh" to copy Seagull binaries and config files as suggested in INSTALL.TXT and perform the remaining actions, if needed.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Please let me know if this has been useful for you and/or if something is inaccurate. This has been tested against Seagull 1.7.0 and 1.8.1 on Mac OS X 10.5.6 (Leopard).&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4670964355147826480-1430758184092792686?l=ammendonca.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ammendonca.blogspot.com/feeds/1430758184092792686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ammendonca.blogspot.com/2009/11/installing-seagull-in-mac-os-x.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/1430758184092792686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/1430758184092792686'/><link rel='alternate' type='text/html' href='http://ammendonca.blogspot.com/2009/11/installing-seagull-in-mac-os-x.html' title='Installing Seagull on Mac OS X'/><author><name>Alexandre Mendonça</name><uri>http://www.blogger.com/profile/09409638475629377312</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://4.bp.blogspot.com/_RvILlFOB9co/SqDi6dqwHgI/AAAAAAAAABM/GTvQAS3hSgI/S220/ammendonca.png'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4670964355147826480.post-8500629145370146236</id><published>2009-10-18T01:25:00.002+01:00</published><updated>2009-10-18T01:28:56.298+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cx/dx'/><category scheme='http://www.blogger.com/atom/ns#' term='documentation'/><category scheme='http://www.blogger.com/atom/ns#' term='release'/><category scheme='http://www.blogger.com/atom/ns#' term='diameter'/><category scheme='http://www.blogger.com/atom/ns#' term='mobicents'/><category scheme='http://www.blogger.com/atom/ns#' term='jboss'/><title type='text'>Mobicents Diameter v1.1.0.GA Released!</title><content type='html'>It was on Friday, 16th October 2009 that a shiny new release of Mobicents Diameter happened.&lt;br /&gt;&lt;br /&gt;It's v1.1.0.GA and along with the usual &lt;a href="http://code.google.com/p/mobicents/issues/list?can=7&amp;amp;q=Diameter+version%3D1.1.00"&gt;enhancements and bug fixes&lt;/a&gt;, the main new features are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JBoss AS 5 support&lt;/li&gt;&lt;li&gt;Stack configuration at runtime, via JMX&lt;/li&gt;&lt;li&gt;Educative Example for Cx/Dx application&lt;/li&gt;&lt;li&gt;Preview of the Mobicents Diameter User Guide&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;It can be downloaded from here: &lt;a href="https://sourceforge.net/projects/mobicents/files/Mobicents%20Diameter/mobicents-diameter-1.1.0.GA/"&gt;Mobicents Diameter v1.1.0.GA Downloads&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;Please note that the JBoss 5 version zip contains only the Stack and the Multiplexer, no JAIN SLEE Resource Adaptors or Examples are included. If you want to try the new Mobicents JAIN SLEE 2.x version (which runs on JBoss 5) and it's Diameter Resource Adaptors and Examples, you'll need to build them from source, which can be found in the &lt;/span&gt;&lt;/i&gt;&lt;a href="http://mobicents.googlecode.com/svn/trunk/servers/jain-slee/"&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;SVN trunk&lt;/span&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt;&lt;span style="font-size: small;"&gt;.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Summing it up, you now get a more stable Diameter in 2 flavors (JBoss 4 &amp;amp; JBoss 5), the ability to configure the stack in realtime (add/remove realms, add/remove peers, manage timeouts, etc...), a new example of how to play with Cx/Dx (which will be the basis for the HSS prototype) plus the user guide to help you play with all of it!&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A special thanks to Jared Morgan and Tom Wells for the extra effort on the documentation!&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4670964355147826480-8500629145370146236?l=ammendonca.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ammendonca.blogspot.com/feeds/8500629145370146236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ammendonca.blogspot.com/2009/10/mobicents-diameter-v110ga-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/8500629145370146236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/8500629145370146236'/><link rel='alternate' type='text/html' href='http://ammendonca.blogspot.com/2009/10/mobicents-diameter-v110ga-released.html' title='Mobicents Diameter v1.1.0.GA Released!'/><author><name>Alexandre Mendonça</name><uri>http://www.blogger.com/profile/09409638475629377312</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://4.bp.blogspot.com/_RvILlFOB9co/SqDi6dqwHgI/AAAAAAAAABM/GTvQAS3hSgI/S220/ammendonca.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4670964355147826480.post-4173310807950964831</id><published>2009-09-07T02:23:00.002+01:00</published><updated>2009-09-07T02:33:34.103+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ims'/><category scheme='http://www.blogger.com/atom/ns#' term='3gpp'/><category scheme='http://www.blogger.com/atom/ns#' term='high-availability'/><category scheme='http://www.blogger.com/atom/ns#' term='team-building'/><category scheme='http://www.blogger.com/atom/ns#' term='diameter'/><category scheme='http://www.blogger.com/atom/ns#' term='mobicents'/><category scheme='http://www.blogger.com/atom/ns#' term='webservices'/><title type='text'>Mobicents Meeting 2009 @ Brno</title><content type='html'>It was that time of the year again when the Mobicents Team meets face-2-face to discuss the achievements made through the current year, plan the roadmaps for the upcoming year and last but not the least, party a lot!&lt;br /&gt;&lt;br /&gt;This time it happened in Brno, the second largest city in Czech Republic, but at least for this week it was the funniest!&amp;nbsp;Only possible thanks to Pavel, who led us through Brno! Thank You!&lt;br /&gt;&lt;br /&gt;It had a quite troubled start, with the Portuguese members (me included) ending up by missing the plane due to issues with the airlines company (which suspended their operations since Sept. 1st). We made it anyway, missing the first day.&lt;br /&gt;&lt;br /&gt;Regarding Mobicents, the 2009 achievements were quite amazing:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mobicents SIP Servlets, Mobicents Diameter and Mobicents Media Server became GA.&lt;/li&gt;&lt;li&gt;Mobicents JAIN SLEE 2.x had it's first version, BETA1, which was certified for JAIN SLEE 1.1 (JSR 240),&amp;nbsp;being the first besides the specs leader, and still the only open source.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Although all this being accomplished, there's still much more to work on, and a lot of new projects to stabilize. One of the hottest topics was the High-Availability across all these servers, which as you can understand is not a trivial subject and had a quite intense discussion.&lt;br /&gt;&lt;br /&gt;On my side, I made a presentation regarding Diameter (available &lt;a href="http://mobicents.googlecode.com/files/diameter-brno-2009.pdf"&gt;here&lt;/a&gt;), the main project where I'm involved. For the achievements of 2009, we have highlighted the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Integration with Mobicents SIP Servlets;&lt;/li&gt;&lt;li&gt;Sh-Client/Server&amp;nbsp;Application support&amp;nbsp;(3GPP TS&amp;nbsp;29.328 &amp;amp; TS 29.329);&lt;/li&gt;&lt;li&gt;Credit Control&amp;nbsp;Application&amp;nbsp;support&amp;nbsp;(RFC 4006);&lt;/li&gt;&lt;li&gt;Ro/Rf&amp;nbsp;Application support&amp;nbsp;(3GPP TS 32.225 &amp;amp; TS 32.299);&lt;/li&gt;&lt;li&gt;Cx/Dx&amp;nbsp;Application support&amp;nbsp;(3GPP TS 29.228 &amp;amp; TS 29.229)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;This was a great improvement for an year! But we won't stop and will evolve it even further, with the following features being the most important ones:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;High-Availability;&lt;/li&gt;&lt;li&gt;Management Console (cross-server);&lt;/li&gt;&lt;li&gt;NAT (STUN/TURN/ICE) support;&lt;/li&gt;&lt;li&gt;WebServices support;&lt;/li&gt;&lt;li&gt;IMS Applications prototypes (HSS/x-CSCF)&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;So it's still a long road ahead of us, and now it's when the fun begins! And we are counting on the Mobicents Community for helping us out improving!&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Here's a picture taken at the end of my presentation:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_RvILlFOB9co/SqQ_JldGCpI/AAAAAAAAABw/J-6FHeAVVd0/s1600-h/mobicents-brno-2009-presentation.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_RvILlFOB9co/SqQ_JldGCpI/AAAAAAAAABw/J-6FHeAVVd0/s400/mobicents-brno-2009-presentation.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Left to right: Pavel, Bartosz, Amit, Jean, Vladimir, me, Ivelin, Luis and Eduardo.&lt;/div&gt;&lt;br /&gt;And the team warming up for dinner (Pavel is missing and I'm taking the picture):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_RvILlFOB9co/SqRCPuWTFKI/AAAAAAAAAB4/fPIMDPVtyWE/s1600-h/mobicents-brno-2009-cheers.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" target="_blank"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_RvILlFOB9co/SqRCPuWTFKI/AAAAAAAAAB4/fPIMDPVtyWE/s400/mobicents-brno-2009-cheers.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Left to right: Luis, Amit, Eduardo,&amp;nbsp;Bartosz, Vladimir, Ivelin and&amp;nbsp;Jean.&lt;/div&gt;&lt;br /&gt;Cheers for Mobicents team and hope for another successful year!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4670964355147826480-4173310807950964831?l=ammendonca.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ammendonca.blogspot.com/feeds/4173310807950964831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ammendonca.blogspot.com/2009/09/mobicents-meeting-2009-brno.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/4173310807950964831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/4173310807950964831'/><link rel='alternate' type='text/html' href='http://ammendonca.blogspot.com/2009/09/mobicents-meeting-2009-brno.html' title='Mobicents Meeting 2009 @ Brno'/><author><name>Alexandre Mendonça</name><uri>http://www.blogger.com/profile/09409638475629377312</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://4.bp.blogspot.com/_RvILlFOB9co/SqDi6dqwHgI/AAAAAAAAABM/GTvQAS3hSgI/S220/ammendonca.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_RvILlFOB9co/SqQ_JldGCpI/AAAAAAAAABw/J-6FHeAVVd0/s72-c/mobicents-brno-2009-presentation.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4670964355147826480.post-5979735403072763181</id><published>2009-09-05T03:32:00.000+01:00</published><updated>2009-09-05T03:39:38.593+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jainslee'/><category scheme='http://www.blogger.com/atom/ns#' term='diameter'/><category scheme='http://www.blogger.com/atom/ns#' term='mobicents'/><title type='text'>Welcome to a new era!</title><content type='html'>That's right! It's a complete new world for me now that I've started my own blog.&lt;br /&gt;&lt;br /&gt;First of all, let me introduce myself and the role of this blog:&lt;br /&gt;&lt;br /&gt;I'm a Software Engineer working for JBoss R&amp;amp;D on the open source telco framework &lt;a href="http://www.mobicents.org/"&gt;Mobicents&lt;/a&gt;. I've been using and developing services for it for almost 4 years, namely in JAIN SLEE server, and roughly 2 years ago I started to work on the core team, developing JAIN SLEE core and started from scratch along with &lt;a href="http://baranowb.blogspot.com/"&gt;Bartosz Baranowski&lt;/a&gt; the Diameter component for the project.&lt;br /&gt;&lt;br /&gt;It's been a wonderful experience so far, I've learned a lot from all the team members, all JBoss community and from work itself!&lt;br /&gt;&lt;br /&gt;Regarding the blog, it's been a project that I've always been delaying but I think the time has come and I hope I can keep it up! I expect to write on a regular basis, mainly with new announcements, some hints regarding my work... and whatever comes to my mind! :)&lt;br /&gt;&lt;br /&gt;See you soon!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4670964355147826480-5979735403072763181?l=ammendonca.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ammendonca.blogspot.com/feeds/5979735403072763181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ammendonca.blogspot.com/2009/09/welcome-to-new-era.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/5979735403072763181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4670964355147826480/posts/default/5979735403072763181'/><link rel='alternate' type='text/html' href='http://ammendonca.blogspot.com/2009/09/welcome-to-new-era.html' title='Welcome to a new era!'/><author><name>Alexandre Mendonça</name><uri>http://www.blogger.com/profile/09409638475629377312</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://4.bp.blogspot.com/_RvILlFOB9co/SqDi6dqwHgI/AAAAAAAAABM/GTvQAS3hSgI/S220/ammendonca.png'/></author><thr:total>0</thr:total></entry></feed>
