Outline - Networks and Services Lab

telecommunication vs enterprise services ... Mobicents Platform is an open source project (LGPL License) .... Manages Listening Points and Providers.
2MB taille 69 téléchargements 294 vues
Outline • JAIN SLEE – Intro – Architecture – Features and Facilities

• SIP RA and JAIN SIP – JAIN SIP overview and architecture – SIP RA

• SIP Proxy call scenario – Demonstration – Wireshark capture – Advanced service (optional)

JAIN SLEE background • SLEE concept (Service Logic Execution Environment): – telecommunication vs enterprise services – Requirements: real time (high throughput and low latencies), high availability. – Event oriented – Service container that offers the non logical capabilities

• Java JAIN activity: SIP, SIP Servlet, SLEE • JAIN SLEE is a Java standard for SLEE as reported in JSR 22 (v.1.0) and JSR 240 (v.1.1) – It is a specification designed to meet stringent requirements for communication applications – It is the point of integration for multiple network resources and protocols

• Value-added services development: high level APIs & open source standard interfaces

Mobicents Platform • Mobicents Platform is an open source project (LGPL License) • The project is hosted on http://www.mobicents.org • Mobicents Platform includes: – – – – –

Mobicents JAIN SLEE Server Mobicents SIP Servlets Mobicents Media Server Mobicents SIP Presence Service Mobicents Diameter Server

• Mobicents JAIN SLEE Server: – Provides an open source implementation of a JSLEE container, compliant with JSR 22 - JSLEE 1.0 (Mobicents 2.xx is compliant with JSLEE 1.1) – Implemented as a Service inside the JBoss microkernel

JAIN SLEE architecture JAVA VM JBOSS AS

Management Interface (JMX)

JAIN SLEE Mobicents Service Container Service A

Facilities Service B

SBB A

SBB X

Trace Alarm Profiles

SBB B

SBB C

SBB Y

Event Router Resource Adaptors JCC, SIP, TCAP, Parlay/OSA, MGCP,…

Usage Timer

Component model • JSLEE defines different kind of components: – – – –

Services Service Building Blocks (SBBs) Events Resource Adaptors

• JSLEE defines how to compose components in order to create applications inside the container • JSLEE defines how to deploy components and a management interface to manage installed component – Service Activation – Service Versioning

• Every component has an XML descriptor that specifies its properties

SBB and Service • An SBB is a Service Building Block – Contains application and service logic (like an EJB) – Event handler, local interface, life cycle, callback method implementations

• A Service component inside JSLEE is composed by one SBB called Root SBB • A Root SBB can have child SBB Component, forming an SBB tree • Multiple SBBs belonging to the same Service can process events in parallel

Developing an SBB • The JAIN SLEE specification defines the Sbb Interface • SBB developer implements SBB abstract class by implementing SBB interface – Each SBB created provides an abstract class that implements the SBB interface – SBB abstract class contains the developer provided code for the life cycle callbacks, event handler methods, and abstract fire event methods

• The SLEE deployment tool generates the SBB concrete class by implementing the SBB abstract class – The SBB developer doesn't implement the SBB concrete class – The SBB concrete class is generated by the SLEE when the SBB is deployed into the container by extending the SBB developer provided SBB abstract class

Resource Adaptor • JAIN SLEE represents network resources as resource adaptors and each resource adaptor has a type – Resource adaptor type for SIP is ‘javax.sip’

• JAIN SLEE identifies Event by Event types – SIP Events are classified RequestEvents, ResponseEvents and TimeoutEvents, each of these classifications contains numerous types – For example the event type of a Request message of type ‘INVITE’ is javax.sip.RequestEvent.Request.INVITE’

• JAIN SLEE represents the flow of events as activities – Activity Objects in SIP are ClientTransactions (locally initiated) and ServerTransactions (remotely initiated)

Activity • Abstraction for a related stream of events • Examples: – Call object emitting call connected, disconnected, ... events – Mobile location report object emitting location update, ... Events

• Events are routed to SBB entity that are interested in them - An SBB Entity is an instance of an SBB

Overview: JAIN SIP • JAIN: Java APIs for Integrated Networks • Java-standard interface to a SIP signaling stack – Standardized the interface to the stack – Standardized the events and event semantics – Application portability - verified via the TCK

• Designed for the developer who requires powerful access to the SIP protocol • JAIN SIP can be utilized in a user agent, proxy, or embedded into a service container • Supported RFCs: – RFC 3261, 2976, 3262, – RFC 3265, 3311, 3428

JAIN SIP Architecture Application Listener SIP Messages

Listener SIP Events

SIP Messages

SIP Events

Provider

Provider

Listening Point

Listening Point

Stack

Stack Network

SipStack Interface • Manages Listening Points and Providers • SipStack associated with an IP address ─ Can Have multiple Listening points

• Application can have multiple SipStacks • Parses network messages and wrap them in objects • Manages retransmissions and fires timer events

SipProvider Interface • Send Request's either statefully via client transactions or statelessly • Send Response's to a recently received Requests either statefully via server transactions or statelessly • Register a SipListener to the SipProvider – Notifies Registered Listener of Events (Request/Response/Timeout)

• De-register a SipListener from the SipProvider – Once de-registered, no longer receives Events from SipProvider

• New Client and Server Transaction methods • Listening Point manipulation methods – Only one provider per listening point

SipListener Interface • Process Request's either statefully or statelessly dependent on application. • Process Response's to a recently sent Requests statefully. • Process Transaction timeouts and retransmits Timer events.

Responsibilities of the Application • Application registers an implementation of the SipListener interface to interact with the SIP Stack • Application MUST go via the SipProvider for all messaging with the stack – Application Sends messages and access stack objects via the SipProvider

• Application receives messages from the stack as Events via the SipListener interface.

SIP RA Service Container Service A

Service B

SBB A SBB B

SBB X SBB C

SBB Y

Listener Events Event Router

SIP RA Network

Provider Listening Point Stack

SIP

Services provided by SIP RA • Provide methods to format and send SIP messages • Parse incoming messages and enable services to access to fields via a standardized JAVA interface • Fires appropriate SLEE events during protocol operation (message arrivals, Transaction time-outs) • Provide Transaction support and manage Transaction state and lifetime on behalf of a user application • Provide Dialog support and manage Dialog state and lifetime on behalf on a user application

Demo

SIP Registrar

SIP Proxy

Proxy signaling flow

RTP Data

JSLEE ScratchCard signaling flow

Used Applications / Framework / Tools • Java Development Tools – – – –

Sun / Oracle JDK Eclipse Ant Maven

• JAIN SLEE Framework – Mobicents JAIN SLEE Application Server – Mobicents Media Server

• SIPp (SIP traffic generator) • Softphones (Kapanga / X-Lite) • Network Analyzer software (Wireshark)

References Sun / Oracle JDK

http://java.sun.com/javase/downloads/index.jsp

Eclipse

www.eclipse.org

Ant

http://ant.apache.org

Maven

http://maven.apache.org

NIST JAIN Sip

http://www-x.antd.nist.gov/proj/iptel/

Mobicents Platform www.mobicents.org - si consiglia di scaricare la versione 1.2.6.GA dal server SVN SIPp

http://sipp.sourceforge.net

Kapanga

www.kapanga.net

X-Lite

www.counterpath.com

Wireshark

www.wireshark.org

JSLEE UAS signaling flow JSLEE receives BYE

JSLEE sends BYE

SIP Transactions SIP transaction consists of a single request and any responses to that request.

Stateful proxy

Server transaction

Client transaction

Server transaction

Client transaction

UAC

UAS

Transaction Support • Transaction is created on incoming Request or may be created to send outgoing request. – When a Request is sent out statefully, application must request a ClientTransaction for the outgoing Request. – When a new Request arrives, Stack associates a ServerTransaction with Request and passes up to application.

• When a response arrives, the Stack possibly associates a previously created ClientTransaction with the response and passes up to the Application. • The JAIN SIP implementation manages the association between Transactions and Dialogs.

Support for Dialogs • A Dialog is a peer to peer association between communicating SIP endpoints. – Maintains Route Sets and Sequence Numbers.

• Dialog deletion may be under application control. • Transactions may belong to a Dialog – Dialog state changes as a result of changes in Transaction State

Addresses, Messaging and Headers • Defines support for Address/Header/Message Factories. • Address package contains a URI wrapper and defines URIs for SIP and Tel URIs. • Header package defines interfaces for all the supported headers. • Accessor (set/get) methods for SIP Header parameters. • Deep copy requirement for cloning Addresses, Headers and Messages for the benefit of proxies.

Application - Stack Creation Initialize Stack using SipFactory: try { Properties properties = new Properties(); properties.setProperty("javax.sip.IP_ADDRESS", "129.6.55.181"); properties.setProperty("javax.sip.OUTBOUND_PROXY", "129.6.55.182:5070/UDP"); ……// Other initialization properties. try { sipStack = sipFactory.createSipStack(properties);

} catch(SipException e) { System.exit(-1); } }

Application – Request Creation Initialize Request using Factories: try { SipURI requestURI = addressFactory.createSipURI (toUser, toSipAddress); // … Create other headers Request request = messageFactory.createRequest (requestURI, Request.INVITE, callIdHeader, cSeqHeader, fromHeader, toHeader, viaHeaders, maxForwards); }

Application - Sending Requests Send outgoing messages: try { // Create the client transaction ClientTransaction inviteTid = sipProvider.getNewClientTransaction(request); // send the request sipProvider.sendRequest(inviteTid,request); }

Application – Processing Requests Handle incoming messages as Events: try { public void processRequest(RequestEvent requestEvent) { Request request = requestReceivedEvent.getRequest(); ServerTransaction st = requestEvent.getTransaction(); // do request specific processing here } }