tag:blogger.com,1999:blog-49237301599920911072024-03-13T14:43:23.158-07:00Inside IMS/NGNMamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.comBlogger32125tag:blogger.com,1999:blog-4923730159992091107.post-41300473380347219292012-05-15T15:26:00.000-07:002012-05-15T15:26:35.007-07:00World's first HTML5 SIP clientAfter the world's first SIP video clients for Android and iOS (early
2009) we are proud to present <a href="http://www.sipml5.org">sipML5</a> Project.
sipML5 is the world's first open source HTML5 SIP client entirely
written in javascript for integration in social networks (FaceBook,
Twitter, Google+), online games, e-commerce websites... No extension,
plugin or gateway is needed. The media stack rely on <a href="http://en.wikipedia.org/wiki/WebRTC">WebRTC</a> project.
The client can be used to connect to any SIP or IMS network from your
preferred browser to make and receive audio/video calls and instant
messages. <br />
<p>Short but not exhaustive list of supported features:</p>
<ul>
<li>Audio / Video call</li>
<li>Instant messaging</li>
<li>Presence</li>
<li>Call Hold / Resume</li>
<li>Explicit Call transfer</li>
<li>Multi-line and multi-account</li>
<li>Dual-tone multi-frequency signaling (DTMF) using SIP INFO</li>
</ul>
For more information: <a href="http://www.sipml5.org">http://www.sipml5.org</a>
<hr />
<table>
<tr>
<td>
<iframe id="ytplayer" type="text/html" width="512" height="312"
src="http://www.youtube.com/embed/ro3FFNx7d-g?autoplay=0&origin=http://sipml5.org"
frameborder="0"> </iframe>
</td></tr>
<tr><td align="center"><i>Call between Google Chrome and iPad device</i></td>
</tr>
<tr>
<td>
<iframe id="Iframe1" type="text/html" width="512" height="312"
src="http://www.youtube.com/embed/7HEMyxAnATI?autoplay=0&origin=http://sipml5.org"
frameborder="0"> </iframe>
</td></tr>
<tr><td align="center"><i>Call between Google Chrome and Android device</i></td>
</tr>
</table>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com0tag:blogger.com,1999:blog-4923730159992091107.post-30891846537500302982011-09-20T01:24:00.000-07:002011-09-20T01:29:52.388-07:00iDoubs for MAC OS X<div style="text-align: left;">We are proud to announce the availability of the first alpha release of <a href="http://code.google.com/p/idoubs">iDoubs</a> for MAC OS X 10.6+ (Snow Leopard).</div>This alpha release (1.0.0) comes with many features:- IPv4 and IPv6<br />- UPD, TCP and TLS transports<br />- Audio codecs: G.722 HD audio, Speex, and G.711<br />- High quality audio: AEC (based on WebRTC), Noise suppression, Adaptive jitter buffer ...<br />- Video codecs: VP8, H.264, H.263 and MP4V-ES<br />- Multiline calls<br />- Hold/Resume<br />- Media update<br />- …and many other features<br /><br /><span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "><img src="http://idoubs.googlecode.com/svn/branches/2.0/screenshots/osx-history.png" border="0" alt="" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 344px; height: 519px; " /></span><div><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 562px; height: 570px;" src="http://idoubs.googlecode.com/svn/branches/2.0/screenshots/osx-videocall.png" border="0" alt="" /></div><br /><br />For more information: <a href="http://code.google.com/p/idoubs">http://code.google.com/p/idoubs</a><div><br /></div><div><br /></div>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com0tag:blogger.com,1999:blog-4923730159992091107.post-75028299133317827322011-02-15T09:45:00.000-08:002011-02-15T09:46:17.755-08:00OpenVCS - Open Source VideoConferencing ServerWe are proud to announce the availability of the first alpha release of <a href="http://code.google.com/p/openvcs/">OpenVCS</a>.<br /><strong>OpenVCS</strong> stands for Open Source Video Conferencing Server and uses SIP (RFC 3261, 3GPP TS 24.229) protocol.<br /><strong>OpenVCS</strong> is used as a <strong>Multipoint Control Unit</strong> (<a href="http://en.wikipedia.org/wiki/Multipoint_Control_Unit" rel="nofollow">MCU</a>) manager. The application can managed any number of MCU (a.k.a Bridge) where each Bridge can support up to 64 participants.<br /><br />The application can be used as a standalone SIP server or behind an IMS Core where each Bridge will be seen as an AS (Application Server).<br />You can use any SIP compliant device to connect to a bridge as long as the client is RFC 3261 compliant. For example, you can use <a href="http://code.google.com/p/imsdroid/" rel="nofollow">IMSDroid</a> on Android, <a href="http://code.google.com/p/idoubs/" rel="nofollow">iDoubs</a> on iOS (iPhone, iPod Touch or iPad), <a href="http://code.google.com/p/boghe/" rel="nofollow">Boghe</a> on Windows or <a href="http://www.linphone.org/" rel="nofollow">Linphone</a>/<a href="http://www.counterpath.com/bria.html" rel="nofollow">Bria</a> on MAC OS X or Linux.<br /><br /><iframe title="YouTube video player" src="http://www.youtube.com/embed/uSw1Ag2Pht4" allowfullscreen="" frameborder="0" height="390" width="480"></iframe><br /><br />For more information: <a href="http://code.google.com/p/openvcs/">http://code.google.com/p/openvcs/</a>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com4tag:blogger.com,1999:blog-4923730159992091107.post-86923409354897942032010-12-20T00:18:00.001-08:002011-09-20T00:37:52.428-07:00Boghe - IMS/RCS Client for WindowsWe are proud to announce the availability of the first alpha release of <a href="http://code.google.com/p/boghe/">Boghe</a>, our IMS/RCS client for Windows XP, Vista and 7.<br /><br /><a href="http://boghe.googlecode.com/svn/trunk/screenshots/eab.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 450px; height: 690px;" src="http://boghe.googlecode.com/svn/branches/2.0/boghe/screenshots/eab.jpg" alt="" border="0" /></a><br /><br />For more information: <a href="http://code.google.com/p/boghe/">http://code.google.com/p/boghe/</a>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com0tag:blogger.com,1999:blog-4923730159992091107.post-38104804766439748852010-07-28T13:36:00.000-07:002010-07-30T17:42:07.383-07:00IMSDroid - SIP/IMS Client for Android (Beta)We are proud to announce the availability of the first fully featured open source IMS Client for Android devices (1.5 and later).<br />The main purpose of the project (codename <a href="http://code.google.com/p/imsdroid">IMSDroid</a>) is to exhibit <a href="http://doubango.org/" rel="nofollow">doubango</a>'s features and to offer an IMS client to the open source community.<br /><br />The current version of <a href="http://code.google.com/p/imsdroid">IMSDroid</a> partially implements <a href="http://www.gsmworld.com/our-work/mobile_lifestyle/rcs/index.htm" rel="nofollow">GSMA Rich Communication Suite release 3</a> and <a href="http://news.vzw.com/OneVoiceProfile.pdf" rel="nofollow">The One Voice profile V1.0.0</a> (LTE/4G, also known as <a href="http://www.gsmworld.com/our-work/mobile_broadband/VoLTE.htm" rel="nofollow">GSMA VoLTE</a>) specifications. Missing features will be implemented in the next releases. <strong>Stay tuned</strong>.<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://imsdroid.googlecode.com/svn/trunk/qr_code.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 164px; height: 164px;" src="http://imsdroid.googlecode.com/svn/trunk/qr_code.png" alt="" border="0" /></a><br /><span style="font-weight: bold;font-size:180%;" ><a name="Highlights">Highlights</a></span><ul><li>SIP(RFC 3261, 3GPP TS 24.229 Rel-9) </li><li>Signaling Compression, SigComp<span style="text-decoration: underline;"> </span>(RFC 3320, 3485, 4077, 4464, 4465, 4896, 5049, 5112 and 1951) </li><li><br /></li><li>Enhanced Address Book (XCAP storage, authorizations, presence, ...) </li><li>Partial supports for <a href="http://www.gsmworld.com/our-work/mobile_lifestyle/rcs/index.htm" rel="nofollow">GSMA Rich Communication Suite release 3</a> </li><li>Partial supports for <a href="http://news.vzw.com/OneVoiceProfile.pdf" rel="nofollow">One Voice Profile V1.0.0 (GSMA VoLTE)</a> </li><li>Partial supports for MMTel UNI (used by GSMA RCS and GSMA VoLTE) </li><li><br /></li><li>IMS-AKA registration (both AKA-v1 and AKA-v2), Digest MD5, Basic </li><li>3GPP Early IMS Security (3GPP TS 33.978) </li><li>Proxy-CSCF discovery using DNS NAPTR+SRV </li><li>Private extension headers for 3GPP </li><li>Service Route discovery </li><li>Subscription to reg event package (Honoring network initiated (re/de/un)-registration events) </li><li><br /></li><li>3GPP SMS Over IP (3GPP TS 23.038, 24.040, 24.011, 24.341 and 24.451) </li><li>Voice Call (AMR-NB, GSM, PCMA, PCMU, Speex-NB, iLBC) </li><li>Video Call (H264, Theora, H.263, H.263-1998, H.261) </li><li>DTMF (RFC 4733) </li><li>QoS negotiation using Preconditions (RFC 3312, 4032 and 5027) </li><li>SIP Session Timers (RFC 4028) </li><li>Provisional Response Acknowledgments (PRACK) </li><li>Communication Hold (3GPP TS 24.610) </li><li>Message Waiting Indication (3GPP TS 24.606) </li><li>Calling E.164 numbers by using ENUM protocol (RFC 3761) </li><li>NAT Traversal using STUN2 (RFC 5389) with possibilities to automatically discover the server by using DNS SRV (TURN already implemented and ICE is under tests) </li></ul><p> Many other features are supported by the underlying framework but not exposed to the user interface (in progress). For more information please refer to <a href="http://doubango.org/" rel="nofollow">doubango website</a>.<br />These features include: IPv6, OMA Large IM Message (MSRP), File Transfer (MSRP), Image Sharing (IR.79), Video Sharing (IR.74), TLS and IPSec Security Agreement (RFC 3329), Proxy-CSCF discovery using DHCPv4/v6, TURN, ... </p>For more information: <a href="http://code.google.com/p/imsdroid">http://code.google.com/p/imsdroid</a>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com2tag:blogger.com,1999:blog-4923730159992091107.post-35355816809248430522010-03-18T09:58:00.000-07:002010-07-28T14:02:15.492-07:00SDP Offer/Answer (SOA)<meta equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CMamadou%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml> <w:worddocument> <w:view>Normal</w:View> <w:zoom>0</w:Zoom> <w:punctuationkerning/> <w:validateagainstschemas/> <w:saveifxmlinvalid>false</w:SaveIfXMLInvalid> <w:ignoremixedcontent>false</w:IgnoreMixedContent> <w:alwaysshowplaceholdertext>false</w:AlwaysShowPlaceholderText> <w:compatibility> <w:breakwrappedtables/> <w:snaptogridincell/> <w:wraptextwithpunct/> <w:useasianbreakrules/> <w:dontgrowautofit/> </w:Compatibility> <w:browserlevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:latentstyles deflockedstate="false" latentstylecount="156"> </w:LatentStyles> </xml><![endif]--><style> <!-- /* Font Definitions */ @font-face {font-family:"Lucida Sans Unicode"; panose-1:2 11 6 2 3 5 4 2 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-2147476737 14699 0 0 63 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:none; mso-hyphenate:none; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Lucida Sans Unicode"; mso-font-kerning:.5pt; mso-ansi-language:FR; mso-fareast-language:#00FF;} @page Section1 {size:612.0pt 792.0pt; margin:70.85pt 70.85pt 70.85pt 70.85pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--> <p class="MsoNormal"><span lang="FR">SDP stands for Session Description Protocol and has been specified by the IETF in RFC 4566. It was previously defined in RFC 2327, which is now obsolete.</span></p> <p class="MsoNormal"><span lang="FR"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="FR">In order to understand this post, the reader MUST have a basic knowledge of how SIP (Session Initiation Protocol) works and how sessions are setted up and teared down.</span></p> <p class="MsoNormal"><span lang="FR"><o:p> </o:p></span></p> <p class="MsoNormal"><span lang="FR">The goal of this post is to explain (Highlights) how to implement a robust SOA (SDP Offer/Answer) machine. This can apply to both basic SIP equipment and 3GPP NGN/IMS nodes with MMTel extensions.</span></p><p class="MsoNormal"><span lang="FR">
<br /></span></p> <p class="MsoNormal"><span lang="FR"><o:p> </o:p></span></p> <p style="font-style: italic;" class="MsoNormal"><span lang="FR">Related RFCs (Highlights): 3261, 3262 (100rel; PRACK), 3264 (Offer/Answer model), 3311 (UPDATE), 3312 (Preconditions/QoS), 3960 (Early Media and Ringing Tone Generation) and draft-ietf-sipping-sip-offeranswer-12.
<br /></span></p><p style="font-style: italic;" class="MsoNormal">
<br /></p><meta equiv="CONTENT-TYPE" content="text/html; charset=utf-8"><title></title><meta name="GENERATOR" content="OpenOffice.org 2.3 (Win32)"><style type="text/css"> <!-- @page { size: 21cm 29.7cm; margin: 2cm } TD P { margin-bottom: 0cm } P { margin-bottom: 0.21cm } --> </style> <table style="page-break-before: always; page-break-after: auto; page-break-inside: avoid;" width="100%" border="1" bordercolor="#000000" cellpadding="4" cellspacing="0" frame="BELOW" rules="GROUPS"> <col width="37*"> <col width="22*"> <col width="21*"> <col width="24*"> <col width="81*"> <col width="71*"> <tbody> <tr valign="TOP"> <td width="14%"> <p>
<br /> </p> </td> <td bg="" style="color: rgb(255, 255, 0);" width="9%"> <p align="CENTER"><span style="color: rgb(0, 0, 0);"><b><span style="background: transparent none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">Alice</span></b></span></p> </td> <td bg="" style="color: rgb(255, 255, 0);" width="8%"> <p align="CENTER"><span style="color: rgb(0, 0, 0);"><b><span style="background: transparent none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">Bob</span></b></span></p> </td> <td width="9%" bgcolor="#ffff00"> <p align="CENTER">
<br /> </p> </td> <td width="32%" bgcolor="#ffff00"> <p align="CENTER">
<br /> </p> </td> <td width="28%" bgcolor="#ffff00"> <p align="CENTER">
<br /> </p> </td> </tr> <tr valign="TOP"> <td width="14%"> <p>
<br /> </p> </td> <td width="9%" bgcolor="#c0c0c0"> <p align="CENTER"><b>SDP Offer</b></p> </td> <td width="8%" bgcolor="#c0c0c0"> <p align="CENTER"><b>SDP Answer</b></p> </td> <td width="9%" bgcolor="#c0c0c0"> <p align="CENTER"><b>RFC</b></p> </td> <td width="32%" bgcolor="#c0c0c0"> <p align="CENTER"><b>Callflow</b></p> </td> <td width="28%" bgcolor="#c0c0c0"> <p align="CENTER"><b>Note</b></p> </td> </tr> <tr valign="TOP"> <td width="14%"> <p>
<br /> </p> </td> <td width="9%"> <p align="CENTER">
<br /> </p> </td> <td width="8%"> <p align="CENTER">
<br /> </p> </td> <td width="9%"> <p align="CENTER">
<br /> </p> </td> <td width="32%"> <p>
<br /> </p> </td> <td width="28%"> <p>
<br /> </p> </td> </tr> </tbody> <tbody> <tr valign="TOP"> <td width="14%"> <p style="background: transparent none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><span style="font-size:85%;"><b>1- Basic Call</b></span></p> <p style="background: transparent none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><span style="font-size:85%;"><b>[[Alice ==> Bob]]</b></span></p> </td> <td width="9%"> <p align="CENTER"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><b>INVITE</b></span></span></p> </td> <td width="8%"> <p align="CENTER"><span style="color: rgb(255, 66, 14);"><span style="font-size:85%;"><b>2xx INVITE</b></span></span></p> </td> <td width="9%"> <p align="CENTER"><span style="font-size:85%;"><i><u>3261</u></i></span></p> </td> <td width="32%"> <ul><li value="1"><p><span style="font-size:85%;"><span style="text-decoration: none;"><span style="font-style: normal;"><span style="">Alice sends the initial offer in the INVITE (or reINVITE if session is already established)</span></span></span></span></p> </li><li><p><span style="font-size:85%;"><span style="text-decoration: none;"><span style="font-style: normal;"><span style="">Bob's answer is sent in the 2xx INVITE response</span></span></span></span></p> </li></ul> </td> <td width="28%"> <ul><li><p><span style="font-size:85%;">If a reINVITE fails, the session parameters in effect prior to the reINVITE MUST remain unchanged</span></p> <p></p> </li></ul> <ul><li><p style="text-decoration: none;"><span style="font-size:85%;">To reject the offer, Bob should send a 488 INVITE response with a warning header field indicating the reason. If this was a reINVITE, a failure response should not be sent if media has already been exchanged.</span></p> </li></ul> </td> </tr> </tbody> <tbody> <tr valign="TOP"> <td width="14%"> <p style="background: transparent none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><span style="font-size:85%;"><b>2- Bodiless INVITE (without 100rel extension)</b></span></p> <p style="background: transparent none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"><span style="font-size:85%;"><b>[[Bob ==> Alice]]</b></span></p> </td> <td width="9%"> <p align="CENTER"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><b>ACK</b></span></span></p> </td> <td width="8%"> <p align="CENTER"><span style="color: rgb(255, 66, 14);"><span style="font-size:85%;"><b>2xx INVITE</b></span></span></p> </td> <td width="9%"> <p align="CENTER"><span style="font-size:85%;"><i><u>3261</u></i></span></p> </td> <td width="32%"> <ol><li value="1"><p style="margin-bottom: 0cm; font-style: normal; text-decoration: none;" align="LEFT"> <span style="font-family:Times New Roman,serif;"><span style="font-size:85%;">Alice sends initial INVITE without offer</span></span></p> </li><li><p style="margin-bottom: 0cm; font-style: normal; text-decoration: none;" align="LEFT"> <span style="font-family:Times New Roman,serif;"><span style="font-size:85%;">Bob's offer is sent in the 2xx INVITE response</span></span></p> </li><li><p style="font-style: normal; text-decoration: none;" align="LEFT"> <span style="font-family:Times New Roman,serif;"><span style="font-size:85%;">Alice's answer is sent in the ACK request</span></span></p> </li></ol> </td> <td width="28%"> <ul><li><p><span style="font-size:85%;">The initial INVITE has no SDP offer</span></p> </li><li><p><span style="font-size:85%;">As there is no offer in the initial offer, the first reliable non-failure message MUST have an Offer. As we suppose that 100rel extension is not supported then the offer MUST be in the 2xx response.</span></p> <p></p> </li></ul> <ul><li><p style="text-decoration: none;"><span style="font-size:85%;">To reject /update the offer, Alice should first send her answer in the ACK response. Once the ACK is sent, Alice can send another offer or hangup the call.</span></p> </li></ul> </td> </tr> </tbody> <tbody> <tr valign="TOP"> <td width="14%"> <p><span style="font-size:85%;"><b>3- Provisional response</b></span></p> <p><span style="font-size:85%;"><b>[[Alice ==> Bob]]</b></span></p> </td> <td width="9%"> <p align="CENTER"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><b>INVITE</b></span></span></p> </td> <td width="8%"> <p align="CENTER"><span style="color: rgb(255, 66, 14);"><span style="font-size:85%;"><b>1xx-rel INVITE</b></span></span></p> </td> <td width="9%"> <p align="CENTER"><span style="font-size:85%;"><i><u>3262</u></i></span></p> </td> <td width="32%"> <ol><li value="1"><p style="margin-bottom: 0cm; font-style: normal; text-decoration: none;" align="LEFT"> <span style="font-family:Times New Roman,serif;"><span style="font-size:85%;">Alice sends the initial offer in the INVITE</span></span></p> </li><li><p style="font-style: normal; text-decoration: none;" align="LEFT"> <span style="font-family:Times New Roman,serif;"><span style="font-size:85%;">Bob's answer is sent in the first reliable provisional response, in this case it's a 1xx response</span></span></p> </li></ol> </td> <td width="28%"> <ul><li><p><span style="font-size:85%;">Both clients MUST support 100rel extension</span></p> </li><li><p><span style="font-size:85%;">As the first realiable provisional response contains a SDP, and is the first to do so, then that SDP is the answer to the offer and cannot be updated in subsequent reliable responses (200 to 600).</span></p> </li><li><p><span style="font-size:85%;">If an unreliable response precedes a reliable response it's considered as a "preview" of the answer that will be coming, and hence may be treated like an answer until the actual one arrives.</span></p> </li></ul> <p>
<br /> </p> <ul><li><p style="text-decoration: none;"><span style="font-size:85%;">To reject the offer, Bob should send a 488 INVITE response with a warning header field indicating the reason.</span></p> </li></ul> </td> </tr> </tbody> <tbody> <tr valign="TOP"> <td width="14%"> <p><span style="font-size:85%;"><b>4- Bodiless INVITE (with 100rel extension)</b></span></p> <p><span style="font-size:85%;"><b>[[Bob ==> ALice]]</b></span></p> </td> <td width="9%"> <p align="CENTER"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><b>PRACK
<br /></b></span></span></p> </td> <td width="8%"> <p align="CENTER"><span style="color: rgb(255, 66, 14);"><span style="font-size:85%;"><b>1xx-rel INVITE</b></span></span></p> </td> <td width="9%"> <p align="CENTER"><span style="font-size:85%;"><i><u>3262</u></i></span></p> </td> <td width="32%"> <ol><li value="1"><p style="margin-bottom: 0cm; font-style: normal; text-decoration: none;" align="LEFT"> <span style="font-family:Times New Roman,serif;"><span style="font-size:85%;">Alice sends an initial INVITE without offer</span></span></p> </li><li><p style="margin-bottom: 0cm;" align="LEFT"><span style="font-family:Times New Roman,serif;"><span style="font-size:85%;"><span style="text-decoration: none;"><span style="font-style: normal;"><span style="">Bob's answer is sent in the first reliable provisional response, in this case it's a 1xx INVITE response</span></span></span></span></span></p> </li><li><p align="LEFT"><span style="font-family:Times New Roman,serif;"><span style="font-size:85%;"><span style="text-decoration: none;"><span style="font-style: normal;"><span style="">Alice's answer is sent in the PRACK response</span></span></span></span></span></p> </li></ol> </td> <td width="28%"> <ul><li><p><span style="font-size:85%;">Both clients MUST support 100rel extension</span></p> </li><li><p><span style="font-size:85%;">As there is no offer in the initial INVITE, the first reliable non-failure message MUST have an offer. As we suppose that 100rel extension is supported by both endpoints then the offer MUST be in the first 1xx-rel response.</span></p> </li></ul> <p>
<br /> </p> <ul><li><p style="text-decoration: none;"><span style="font-size:85%;">To reject/update the offer, Alice should first send her answer in the PRACK request. Once the 2xx PRACK is received, Alice can send another offer (reINVITE or UPDATE) or hangup the session.</span></p> </li></ul> </td> </tr> </tbody> <tbody> <tr valign="TOP"> <td width="14%"> <p><span style="font-size:85%;"><b>5- Two rounds</b></span></p> <p><span style="font-size:85%;"><b>[[Alice ==> Bob]]</b></span></p> </td> <td width="9%"> <p align="CENTER"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><b>PRACK</b></span></span></p> </td> <td width="8%"> <p align="CENTER"><span style="color: rgb(255, 66, 14);"><span style="font-size:85%;"><b>200 PRACK</b></span></span></p> </td> <td width="9%"> <p align="CENTER"><span style="font-size:85%;"><i><u>3262</u></i></span></p> </td> <td width="32%"> <ol><li value="1"><p style="margin-bottom: 0cm; font-style: normal; text-decoration: none;" align="LEFT"> <span style="font-family:Times New Roman,serif;"><span style="font-size:85%;">Alice sends an initial INVITE with or without offer (case 3 or 4 respectively)</span></span></p> </li><li><p style="margin-bottom: 0cm; font-style: normal; text-decoration: none;" align="LEFT"> <span style="font-family:Times New Roman,serif;"><span style="font-size:85%;">Bob's answer or offer (case 3 or 4 respectively) is sent in the first reliable provisional response</span></span></p> </li><li><p style="margin-bottom: 0cm; font-style: normal; text-decoration: none;" align="LEFT"> <span style="font-family:Times New Roman,serif;"><span style="font-size:85%;">As the first provisional response contains a SDP then, Alice can send another offer in the PRACK request</span></span></p> </li><li><p style="font-style: normal; text-decoration: none;" align="LEFT"> <span style="font-family:Times New Roman,serif;"><span style="font-size:85%;">Bob sends his second answer in the 200 PRACK</span></span></p> </li></ol> </td> <td width="28%"> <ul><li><p style="text-decoration: none;"><span style="font-size:85%;">To reject/update the offer, Bob should first send his answer in the 200 PRACK response. Once the PRACK is sent, Bob can send another offer (reINVITE or UPDATE) or hangup the call.</span></p> </li></ul> </td> </tr> </tbody> <tbody> <tr valign="TOP"> <td width="14%"> <p><span style="font-size:85%;"><b>6 – UPDATE</b></span></p> <p><span style="font-size:85%;"><b>[[Alice ==> Bob]]</b></span></p> </td> <td width="9%"> <p align="CENTER"><span style="color: rgb(0, 0, 255);"><span style="font-size:85%;"><b>UPDATE</b></span></span></p> </td> <td width="8%"> <p align="CENTER"><span style="color: rgb(255, 66, 14);"><span style="font-size:85%;"><b>2xx UPDATE</b></span></span></p> </td> <td width="9%"> <p align="CENTER"><span style="font-size:85%;"><i><u>3311</u></i></span></p> </td> <td width="32%"> <ol><li value="1"><p style="margin-bottom: 0cm; font-style: normal; text-decoration: none;" align="LEFT"> <span style="font-family:Times New Roman,serif;"><span style="font-size:85%;">The initial offer/answer could be made by using any of the above use cases</span></span></p> </li><li><p style="margin-bottom: 0cm; font-style: normal; text-decoration: none;" align="LEFT"> <span style="font-family:Times New Roman,serif;"><span style="font-size:85%;">Alice sends an UPDATE request with an offer to update the previous negociated SDP session</span></span></p> </li><li><p style="font-style: normal; text-decoration: none;" align="LEFT"> <span style="font-family:Times New Roman,serif;"><span style="font-size:85%;">Bob's answer is included in the 2xx UPDATE</span></span></p> </li></ol> </td> <td width="28%"> <ul><li><p style="text-decoration: none;"><span style="font-size:85%;">Both clients MUST support UPDATE</span></p> <p style="text-decoration: none;"></p> </li></ul> <ul><li><p style="text-decoration: none;"><span style="font-size:85%;">To reject the offer, Bob should send a 488 UPDATE response with a warning header field indicating the reason.In this case the session parameters in effect prior to the UPDATE MUST remain unchanged and the session is not teared down.</span></p> </li></ul> <p style="text-decoration: none;">
<br /> </p> <ul><p style="text-decoration: none;"></p></ul> </td> </tr> </tbody> </table>
<br />
<br />
<br /><meta equiv="CONTENT-TYPE" content="text/html; charset=utf-8"><title></title><meta name="GENERATOR" content="OpenOffice.org 2.3 (Win32)"><style type="text/css"> <!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } --></style><span style="font-size:130%;"><b>SDP</b></span> <p style="margin-bottom: 0cm;">== SDP offer can be in:</p> <ul><li><p style="margin-bottom: 0cm;">Any reliable non-failure response (1xx-rel or 2xx),</p></li><li>INVITE, PRACK and ACK requests. PRACK request contains an offer only if the reliable response which it acknoledges contains an answer to the previous offer/answer exchange (draft-ietf-sipping-sip-offeranswer-12 subclause 2.1)</li></ul> <p style="margin-bottom: 0cm;">== In a SDP pmessage, some lines in each description are REQUIRED and some are OPTIONAL, but all MUST appear in exactly the order given in RFC 4566 subclause 5.<span style="font-size:130%;"><b>
<br /></b></span></p><p style="margin-bottom: 0cm;"><span style="font-size:130%;"><b>Generating an Answer</b></span></p> <p style="margin-bottom: 0cm;">== SDP message in the unreliable responses to the INVITE request must be identical to the answer which is included in the reliable response. A session description in an unreliable response that precedes a reliable response can be considered a "preview" of the answer that will be coming, and hence may be treated like an answer until the actual one arrives (draft-ietf-sipping-sip-offeranswer-12 subclause 3.1).</p><p style="margin-bottom: 0cm;">== An offered stream MAY be rejected in the answer, for any reason. If a stream is rejected, the offerer and answerer MUST NOT generate media (or RTCP packets) for that stream. To reject an offered stream, the port number in the corresponding stream in the answer MUST be set to zero (RFC 3264 subclause 6).
<br /></p> <p style="margin-bottom: 0cm;">== For each "m=" line in the offer, there MUST be a corresponding "m=" line in the answer. The answer MUST contain exactly the same number of "m=" lines as the offer. This allows for streams to be matched up based on their order. This implies that if the offer contained zero "m=" lines, the answer MUST contain zero "m=" lines (RFC 3264 subclause 6).</p> <p style="margin-bottom: 0cm;">== UAS should send an SDP answer reliably (if possible) before it starts sending media. And, if neither the UAC nor the UAS support 100rel, the UAS should send a preview of the answer before it starts sending media (draft-ietf-sipping-sip-offeranswer-12 subclause 3.1).</p> <p style="margin-bottom: 0cm;"> == When a UAS has received an initial INVITE without an offer, it must include an offer in the first reliable response to the INVITE (draft-ietf-sipping-sip-offeranswer-12 subclause 5.2.2).</p> <p style="margin-bottom: 0cm;">== The answer to an offered session description is based on the offered session description. If the answer is different from the offer in any way (different IP addresses, ports, etc.), the origin line MUST be different in the answer, since the answer is generated by a different entity. In that case, the version number in the "o=" line of the answer is unrelated to the version number in the o line of the offer (RFC 3264 subclause 6).</p> <p style="margin-bottom: 0cm;">== The "t=" line in the answer MUST be equal that of the offer. The time of the session cannot be negotiated (RFC 3264 subcaluse 6).</p> <p style="margin-bottom: 0cm;">== When a UAC does not include an SDP body in the INVITE request, it expects the offer to be received with the first reliable response.</p> <p style="margin-bottom: 0cm;">== The UAC will send the answer in the request to acknowledge the response, i.e. PRACK or ACK request of the reliable response (draft-ietf-sipping-sip-offeranswer-12 subclause 3.1.2)<span style="font-size:130%;"><b>
<br /></b></span></p><p style="margin-bottom: 0cm;"><span style="font-size:130%;"><b>Modifying the Session</b></span></p> <p style="margin-bottom: 0cm;">== Both the re-INVITE and UPDATE methods can be used in an established dialog to update the session (draft-ietf-sipping-sip-offeranswer-12 subclause 3.3).</p> <p style="margin-bottom: 0cm;">== When both UAs support the 100rel extension, they can UPDATE the session in the early dialog once the first offer/answer exchange has been completed (draft-ietf-sipping-sip-offeranswer-12 subclause 3.2).</p> <p style="margin-bottom: 0cm;">== When issuing an offer that modifies the session, the "o=" line of the new SDP MUST be identical to that in the previous SDP, except that the version in the origin field MUST increment by one from the previous SDP. If the version in the origin line does not increment, the SDP MUST be identical to the SDP with that version number. The answerer MUST be prepared to receive an offer that contains SDP with a version that has not changed; this is effectively a no-op. If the previous SDP had N "m=" lines, the new SDP (in the UPDATE or reINVITE) MUST have at least N "m=" lines. The i-th media stream in the previous SDP, counting from the top, matches the i-th media stream in the new SDP, counting from the top. (RFC 3264 subcaluse 8).</p> <p style="margin-bottom: 0cm;">
<br /></p> <p style="margin-bottom: 0cm;">== New media streams are created by new additional media descriptions below the existing ones, or by reusing the "slot" used by an old media stream which had been disabled by setting its port to zero. Reusing its slot means that the new media description replaces the old one, but retains its positioning relative to other media descriptions in the SDP. New media descriptions MUST appear below any existing media sections (RFC 3264 subcaluse 8.1).</p> <p style="margin-bottom: 0cm;">== Existing media streams are removed by creating a new SDP with the port number for that stream set to zero. The stream description MAY omit all attributes present previously, and MAY list just a single media format (RFC 3264 subclause 8.2).</p> <p style="margin-bottom: 0cm;">== The list of media formats used in the session MAY be changed (RFC 3264 subcaluse 8.3.2).</p> <p style="margin-bottom: 0cm;">== The Address, Port or Transport for a stream MAY be changed (RFC 3264 subclause 8.3.1).</p> <p style="margin-bottom: 0cm;">== The media type (audio, video, etc.) for a stream MAY be changed (RFC 3264 subclause 8.3.3).</p> <p style="margin-bottom: 0cm;">== Any other attributes in a media description MAY be updated in an offer or answer (RFC 3264 subclause 8.3.4).</p> <p style="margin-bottom: 0cm;">== If a reINVITE fails, the session parameters in effect prior to the reINVITE MUST remain unchanged, as if no re-INVITE had been issued (draft-ietf-sipping-sip-offeranswer-12 subclause 3.4 which reference RFC 3261 section 14.1).</p><p style="margin-bottom: 0cm;">== At any time, either agent MAY generate a new offer that updates the session. However, it MUST NOT generate a new offer if it has received an offer which it has not yet answered or rejected. It MUST NOT generate a new offer if it has generated a prior offer for which it has not yet received an answer or a rejection (draft-ietf-sipping-sip-offeranswer-12 subclause 4).<span style="font-size:130%;"><b>
<br /></b></span></p><p style="margin-bottom: 0cm;"><span style="font-size:130%;"><b>Holding media</b></span></p> <p style="margin-bottom: 0cm;">== "HOLD" should be indicated in an established session by sending a new offer containing "a=sendonly" for each media stream to be held. An answerer is then to respond with "a=recvonly" to acknowledge that the hold request has been understood (RFC 3264 subclause 5.1). That is, the directionality of the media stream has no impact on the RTCP usage.</p> <p style="margin-bottom: 0cm;">If UA2 has previously been "placed on hold" by UA1, via receipt of "a=sendonly", then it may initiate its own hold by sending a new offer containing "a=sendonly" to UA1. Upon receipt of that, UA1 will answer with "a=inactive" because that is the only valid answer that reflects its desire not to receive media (draft-ietf-sipping-sip-offeranswer-12 subclause 5.3).</p> <p style="margin-bottom: 0cm;">== An agent MUST be capable of receiving SDP with a connection address of 0.0.0.0, in which case it means that neither RTP nor RTCP should be sent to the peer (RFC 3264 subclause 8.4).<span style="font-size:130%;"><b>
<br /></b></span></p> <p style="margin-bottom: 0cm;"><span style="font-size:130%;"><b>Indicating Capabilities</b></span></p><p style="margin-bottom: 0cm;">== An SDP constructed to indicate media capabilities is structured as follows (RFC 3264 subclause 9):</p><ul><li>It MUST be a valid SDP, except that it MAY omit both "e=" and "p=" lines. The "t=" line MUST be equal to "0 0"</li><li>For each media type supported by the agent, there MUST be a corresponding media description of that type</li><li>The session ID in the origin field MUST be unique for each SDP constructed to indicate media capabilities</li></ul>
<br /><p style="font-style: italic;" class="MsoNormal"></p>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com2tag:blogger.com,1999:blog-4923730159992091107.post-63160446357699308422010-01-28T15:00:00.000-08:002010-05-17T08:02:14.924-07:00Building/Debugging android native C applications<style> p{color : #242424} .codebox {background-color : #FFF8C6; font-family : mono, Consolas, Courier, serif; color: #121212; border : 1px solid #F87431; padding : 3px 12px; font-size : 14px; font-weight : bold; width : 85%; border-left : 5px solid #F87431; line-height : 15px;} .title {font-size : 25px;font-weight : lighter; text-align : center;text-transform : capitalize;} .ulheading{border-bottom-style : solid}></style><div style="text-align: justify;">In this post I will explain how to compile, install and debug an Android native "<span style="font-style: italic;font-family:courier new;" >C</span>" application.<br />If you are reading this post just because you have googled the magic keywords ("<span style="font-style: italic;font-family:courier new;" >android</span>" + "<span style="font-style: italic;font-family:courier new;" >native code</span>") then you should know that there is an easier way to build native applications using android makefiles ("<span style="font-style: italic;font-family:courier new;" >Android.mk</span>" and "<span style="font-style: italic;font-family:courier new;" >Application.mk</span>").<br />The method I'm describing here is only useful if you want to understand how things work in order to create more complex<span style="font-style: italic;font-family:arial;" > </span><span style="font-family:courier new;"><span style="font-family:arial;">standard </span></span><span style="font-style: italic;font-family:courier new;" >GNU</span> <span style="font-style: italic;font-family:courier new;" >makefile</span>s. This is also useful if you would like to create your own <span style="font-style: italic;font-family:courier new;" >GNU autotools</span> wrappers to compile projects using <span style="font-style: italic;font-family:courier new;" >GNU configure</span>.<br />I'm using Windows Vista as host machine but any other supported platforms (e.g. linux-x86 or darwin-x86) should work.<br /></div><br />I have tested both the NDK (1.6) and SDK (2.1) on:<br /><ul><li>Windows XP (32-bit) and Vista (64-bit)<br /></li><li>Mac OS X Snow Leopard<br /></li><li>Ubuntu Intrepid<br /></li></ul><span style="font-weight: bold;font-size:180%;" >Installing Android SDK</span><br /><br /><div style="text-align: justify;">To download the latest Android SDK, visit this address <a href="http://developer.android.com/sdk/index.html">http://developer.android.com/sdk/index.html</a>.<br />If you need information on how to install the SDK, visit this address <a href="http://developer.android.com/sdk/installing.html">http://developer.android.com/sdk/installing.html</a>.<br />If the "SDK setup" fail to update the installed packages you can change the remote site URL from <a href="https://dl-ssl.google.com/android/repository/repository.xml">https://dl-ssl.google.com/android/repository/repository.xml </a>to <a href="http://dl-ssl.google.com/android/repository/repository.xml">http://dl-ssl.google.com/android/repository/repository.xml</a> (change the URL scheme from HTTPS to HTTP) or try to disable your anti-virus or firewall.<br /><br />I have installed the SDK version <span style="font-weight: bold;">2.1</span> under <span style="font-weight: bold;">c:/android-sdk</span> (a.r.a /cygdrive/c/android-sdk).<br />Add an environment variable named <span style="font-weight: bold; color: rgb(102, 0, 0);">ANDROID_SDK_ROOT</span><span style="color: rgb(0, 0, 0);font-size:100%;" > pointing </span>to the SDK root directory.<br /></div><br /><span style="font-size:130%;"><span style="font-weight: bold; color: rgb(204, 0, 0);">Important:</span></span> You should add <span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" >"$ANDROID_SDK_ROOT/tools" </span><span style="color: rgb(0, 0, 0);font-family:arial;" >directory</span><span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" > </span><span style="color: rgb(0, 0, 0);font-family:arial;" >to th</span><span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" ><span style="font-family:arial;">e</span> $PATH<span style="font-family:arial;"> </span></span><span style="color: rgb(0, 0, 0);font-family:arial;" >environment variable.</span><span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" ><br /></span><span style="color: rgb(0, 0, 0);font-family:arial;" >Under *nix:</span><span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" ><br /><dl class="codebox"><br />export PATH=$<span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" >ANDROID_SDK_ROOT/tools:$PATH</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>Under Cygwin: Open <span style="font-style: italic;font-family:courier new;" >C:\Cygwin\Cygwin.bat</span> and add<span style="font-style: italic;">:</span><span style="font-style: italic;font-family:courier new;" ><br /><dl class="codebox"><br />set PATH=%ANDROID_SDK_TOOLS%;<span style="font-style: italic;font-family:courier new;" >%PATH%</span><br /><span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" ></span></dl></span><span style="font-size:180%;"><span style="font-weight: bold;">Installing Cygwin</span></span><br /><br />If you are using Windows XP or Vista as host machine then you MUST install Cygwin Devel package with GNU Make (3.81 or later) before installing the NDK.<br />It should also work with MinGW.<br /><br /><span style="font-size:180%;"><span style="font-weight: bold;">Installing the Android NDK</span></span><br /><br /><div style="text-align: justify;">To download the latest Android NDK, visit this address <a href="http://developer.android.com/sdk/ndk/1.6_r1/index.html"><span style="text-decoration: underline;">http://developer.android.com/sdk/ndk/1.6_r1/index.html</span></a>.<br />I have uncompressed the NDK version <span style="font-weight: bold;">1.6</span> under <span style="font-weight: bold;">c:/android-ndk</span> (a.r.a /cygdrive/c/android-ndk).<br />Add an environment variable named <span style="font-weight: bold; color: rgb(102, 0, 0);">ANDROID_NDK_ROOT</span><span style="color: rgb(0, 0, 0);font-size:100%;" > pointing </span>to the NDK root directory.<br />To install the NDK:<br /></div><span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" ><dl class="codebox"><br />cd $ANDROID_NDK_ROOT<br /><span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" >build/host-setup.sh</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>If all is OK then the console will print <span style="font-style: italic;font-family:courier new;" >Host setup complete</span>.<br /><div style="text-align: justify;">To test that the toolchain has been correctly installed you can try to build the <span style="font-weight: bold;">hello-jni</span> sample which comes with the NDK by doing this:<br /></div><span style="font-style: italic;"><dl class="codebox"><br /><span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" >cd $ANDROID_NDK_ROOT<br />make -APP=hello-jni<br /></span></dl></span><div style="text-align: justify;"><span style="color: rgb(0, 0, 0);font-family:arial;" >If all is OK then the console will print:</span><br /><span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" >Android NDK: Building for application 'hello-jni'</span><br /><span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" >Compile thumb : hello-jni <= sources/samples/hello-jni/hello-jni.c SharedLibrary : libhello-jni.so Install : libhello-jni.so => apps/hello-jni/project/libs/armeabi</span><br /><span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" ></span></dl></span><span style="color: rgb(0, 0, 0);font-family:arial;" >This mean that your native shared library (</span><span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" >libhello-jni.so</span><span style="color: rgb(0, 0, 0);font-family:arial;" >) have been successfully generated under </span><span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" >$ANDROID_NDK_ROOT/apps/hello-jni/project/libs/armeabi </span><span style="color: rgb(0, 0, 0);font-family:arial;" >folder.</span><br /></div><br /><span style="font-size:180%;"><span style="font-weight: bold;font-family:arial;" >Creating an AVD</span></span><br /><br />AVD stands for <span style="font-weight: bold;">A</span>ndroid <span style="font-weight: bold;">V</span>irtual <span style="font-weight: bold;">D</span>evice and can be seen as a device profile (keyboard, dialing pad, skin, screen dimensions, appearance ...) to load into your emulator. You can create as many AVDs as you need.<br />To create an AVD named "<span style="font-style: italic;font-family:courier new;" >avdtest</span>" targeting platform <span style="font-style: italic;font-family:courier new;" >2.1 </span><span style="font-family:arial;">(targetID=</span><span style="font-style: italic;font-family:courier new;" >android-7</span><span style="font-family:arial;">):</span><br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >android create avd -n avdtest -t android-7</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>If all is OK the console will print:<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >Created AVD 'avdtest' based on Android 2.1, with the following hardware config: hw.lcd.density=160</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span><span style="font-weight: bold;font-size:180%;" >Create test.c</span><br /><br />Here I will create a basic <span style="font-style: italic;font-family:courier new;" >test.c</span> file under <span style="font-style: italic;font-family:courier new;" >C:\tmp</span> with the following content:<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >#include <stdio.h> <stdio.h>// printf</stdio.h></span><br /><span style="font-style: italic;font-family:courier new;" ></span><br /><span style="font-style: italic;font-family:courier new;" >int main(int argc, char **argv)</span><br /><span style="font-style: italic;font-family:courier new;" >{</span><br /><span style="font-style: italic;font-family:courier new;" > int i = 1;</span><br /><span style="font-style: italic;font-family:courier new;" > i+=2;</span><br /><span style="font-style: italic;font-family:courier new;" > </span><br /><span style="font-style: italic;font-family:courier new;" > printf("Hello, world (i=%d)!\n", i);</span><br /><br /><span style="font-style: italic;font-family:courier new;" ></span><span style="font-style: italic;font-family:courier new;" > return 0;</span><br /><span style="font-style: italic;font-family:courier new;" >}</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span><span style="font-weight: bold;font-family:arial;font-size:180%;" >Create makefile</span><br /><br />Just create an empty file named <span style="font-style: italic;font-family:arial;" >makefile</span> (without any extension) under <span style="font-style: italic;font-family:courier new;" >C:\tmp </span><span style="font-family:courier new;">(</span><span style="font-family:arial;">which is the same directory as</span><span style="font-style: italic;font-family:courier new;" > test.c</span><span style="font-family:arial;">)</span>.<br />Now We will fill the <span style="font-style: italic;font-family:courier new;" >makefile</span> step by step.<span style="font-weight: bold;"><br /><br /></span>Add application name, $ROOT directory, install directory and the NDK platform version:<span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >APP := test</span><br /><span style="font-style: italic;font-family:courier new;" >ROOT:=/cygdrive/c</span><br /><span style="font-style: italic;font-family:courier new;" >NDK_PLATFORM_VER := 1.5</span><br /><span style="font-style: italic;font-family:courier new;" >INSTALL_DIR := /data/tmp</span></dl></span>Add useful environment vars:<span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >ANDROID_NDK_ROOT:=$(ROOT)/android-ndk</span><br /><span style="font-style: italic;font-family:courier new;" >ANDROID_NDK_HOST:=windows</span><br /><span style="font-style: italic;font-family:courier new;" >ANDROID_SDK_ROOT:=$(ROOT)/android-sdk</span><br /><span style="font-style: italic;font-family:courier new;" >PREBUILD:=$(ANDROID_NDK_ROOT)/build/prebuilt/$(ANDROID_NDK_HOST)/arm-eabi-4.2.1</span><br /><span style="font-style: italic;font-family:courier new;" >BIN := $(PREBUILD)/bin</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>You MUST change <span style="font-style: italic;font-family:courier new;" >ANDROID_NDK_HOST </span><span style="font-family:courier new;"><span style="font-family:arial;">value from</span></span><span style="font-style: italic;font-family:courier new;" > windows </span><span style="font-family:arial;">to</span><span style="font-style: italic;font-family:courier new;" > linux-x86 </span><span style="font-family:arial;">if you are under</span><span style="font-style: italic;font-family:courier new;" > </span><span style="font-family:courier new;"><span style="font-family:arial;">*nix</span></span><span style="font-style: italic;font-family:courier new;" > </span><span style="font-family:arial;">or</span><span style="font-style: italic;font-family:courier new;" > darwin-x86 </span><span style="font-family:arial;">on</span><span style="font-style: italic;font-family:courier new;" > </span><span style="font-family:arial;">MAC OS X</span><span style="font-style: italic;font-family:courier new;" >.</span><span style="font-family:arial;"><span style="font-weight: bold;"><br /><br /></span>Add <span style="font-style: italic;">GCC</span> options:</span><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br />CPP := $(BIN)/arm-eabi-g++<br />CC := $(BIN)/arm-eabi-gcc<br />CFLAGS :=<br />LDFLAGS := -Wl<br /></dl></span><span style=";font-family:arial;font-size:100%;" ><span>Add targets</span></span><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><dt>all: $(APP)<br /><br /></dt><dt>OBJS += $(APP).o<br /><br /></dt><dt>$(APP): $(OBJS)<br /></dt><dd> $(CPP) $(LDFLAGS) -o $@ $^<br /><br /></dd><dt>%.o: %.c<br /></dt><dd> $(CC) -c $(INCLUDE) $(CFLAGS) $< -o $@ </dd><dt>install: $(APP)<br /></dt><dd> $(ANDROID_SDK_ROOT)/tools/adb push $(APP) $(INSTALL_DIR)/$(APP) </dd><dd> $(ANDROID_SDK_ROOT)/tools/adb shell chmod 777 $(INSTALL_DIR)/$(APP)<br /><br /></dd><dt>shell:<br /></dt><dd> $(ANDROID_SDK_ROOT)/tools/adb shell<br /><br /></dd><dt>run:<br /></dt><dd> $(ANDROID_SDK_ROOT)/tools/adb shell $(INSTALL_DIR)/$(APP)<br /><br /></dd><dt>clean:<br /></dt><dd> @rm -f $(APP).o $(APP)<br /></dd></dl> </span><span style="font-weight: bold;font-size:180%;" ><span style="font-family:arial;">Building the application</span></span><span style="font-style: italic;font-family:courier new;" ><br /><br /></span><span style="font-family:arial;">To build the application, switch to the directory where you have created both files and then:</span><span style="font-style: italic;font-family:courier new;" ><br /><dl class="codebox"><br />make<br /></dl></span><span style="font-family:arial;">At the output of the console you will get many errors</span><span style="font-family:courier new;"> <span style="font-family:arial;">saying that it's impossible to find</span></span><span style="font-style: italic;font-family:courier new;" > stdlib.h, stdio.h <span style="font-family:arial;">etc etc.<br /></span></span><span style="font-family:arial;">To resolve this issue, add the Bionic header files to </span><span style="font-style: italic;font-family:courier new;" ><span style="font-family:arial;">$CFLAGS</span></span><span style="font-family:courier new;"><span style="font-family:arial;"> variable like this:</span></span><span style="font-style: italic;font-family:courier new;" ><span style="font-family:arial;"><br /></span><span style="font-family:courier new;"><dl class="codebox"><br />CFLAGS := <span style="color: rgb(102, 0, 0);">-I$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/include</span><br /></dl></span></span><span style="font-family:arial;">If you retry (<span style="font-style: italic;font-family:courier new;" >make</span>)</span><span style="font-style: italic;font-family:courier new;" ><span style="font-family:courier new;"> </span></span><span style="font-family:arial;">you will now get this link error:</span><span style="font-style: italic;font-family:courier new;" ><span style="font-family:courier new;"><br /><dl class="codebox"><br />crt0.o: No such file: No such file or directory<br /></dl></span></span><span style="font-family:arial;">To avoid directly linking against the</span><span style="font-style: italic;font-family:courier new;" ><span style="font-family:courier new;"> "C runtime" </span></span><span style="font-family:arial;">you must add</span><span style="font-style: italic;font-family:courier new;" ><span style="font-family:courier new;"> "-nostdlib" </span></span><span style="font-family:arial;">flag to the link options like this:</span><span style="font-style: italic;font-family:courier new;" ><span style="font-family:courier new;"><br /><dl class="codebox"><br />LDFLAGS := -Wl <span style="color: rgb(102, 0, 0);">-nostdlib</span><br /></dl></span></span><span style="font-family:arial;">If you retry (<span style="font-style: italic;font-family:courier new;" >make</span>)</span><span style="font-style: italic;font-family:courier new;" ><span style="font-family:courier new;"> </span></span><span style="font-family:arial;">you will now get these link errors:</span><span style="font-style: italic;font-family:courier new;" ><span style="font-family:courier new;"><br /><dl class="codebox"><br />test.c:(.text+0x34): undefined reference to `printf'<br />test.c:(.text+0x3c): undefined reference to `exit'<br /></dl></span></span>You get these errors because Bionic <span style="font-style: italic;font-family:courier new;" >libc</span> is missing. To add <span style="font-style: italic;font-family:courier new;" >libc</span> you MUST change <span style="font-style: italic;font-family:courier new;" >$LDFLAGS</span> like this:<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >LDFLAGS := -Wl <span style="color: rgb(102, 0, 0);">-L$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib</span><br />LDFLAGS += -nostdlib <span style="color: rgb(102, 0, 0);">-lc</span></span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span><span style="font-family:arial;">If you retry (<span style="font-style: italic;font-family:courier new;" >make</span>)</span><span style="font-style: italic;font-family:courier new;" ><span style="font-family:courier new;"> </span></span><span style="font-family:arial;">you will now get this link error:</span><span style="font-style: italic;font-family:courier new;" ><span style="font-family:courier new;"><br /><dl class="codebox"><br />/cygdrive/c/android-ndk/build/platforms/android-1.5/arch-arm/usr<span style="font-family:courier new;">/lib/libc.so: undefined reference to `dl_unwind_find_exidx'</span><span style="font-family:courier new;"><br /></span></dl></span></span>To resolve this issue you MUST specify the first set of directories into which to search the system shared libraries (*.so) . This is done by adding the "<span style="font-style: italic;font-family:courier new;" >-rpath-link</span>" option to the link options like this:<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >LDFLAGS := -Wl,<span style="color: rgb(153, 0, 0);">-rpath-link=$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib</span> -L$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span><span style="font-family:arial;">If you retry (<span style="font-style: italic;font-family:courier new;" >make</span>)</span><span style="font-style: italic;font-family:courier new;" ><span style="font-family:courier new;"> </span></span><span style="font-family:arial;">you will now get this warning:</span><span style="font-style: italic;font-family:courier new;" ><span style="font-family:courier new;"><br /></span><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >/cygdrive/c/android-ndk/build/prebuilt/windows/arm-eabi-4.2.1/bin/../lib/gcc/arm</span><br /><span style="font-style: italic;font-family:courier new;" >-eabi/4.2.1/../../../../arm-eabi/bin/ld: warning: cannot find entry symbol _start; defaulting to 000082c8</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>This is an Android known issue. You have this warning because the linker search "<span style="font-style: italic;font-family:courier new;" >_start</span>" as entry point. You can resolve this issue by renaming your <span style="font-style: italic;font-family:courier new;" >main</span> function. But the elegant way to resolve this issue is to specify the entry point in the link options like this:<br /><dl class="codebox"><br />LDFLAGS := -Wl,<span style="color: rgb(102, 0, 0);">--entry=main</span>,-rpath-link=$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib -L$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib<br />LDFLAGS += -nostdlib -lc<br /></dl>Now When you retry (<span style="font-style: italic;font-family:courier new;" >make</span>) your application will successfully build without any errors or warnings.<br /><br /><span style="font-size:180%;"><span style="font-weight: bold;">Testing your application</span></span><br /><br />Before testing your application you MUST run the emulator like this:<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >emulator -avd avdtest</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>where "<span style="font-style: italic;">avdtest</span>" is the name of the previously created avd (see "creating an avd" section).<br />To install the application on the emulator, open a new console and go to to directory where you have created <span style="font-style: italic;font-family:courier new;" >test.c</span> and <span style="font-style: italic;font-family:courier new;" >makefile</span>. Install your application on the emulator like this:<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >make install</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>If all is OK the console will print:<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >/cygdrive/c/android-sdk/tools/adb push test /data/tmp/test</span><br /><span style="font-style: italic;font-family:courier new;" >304 KB/s (2493 bytes in 0.008s)</span><br /><span style="font-style: italic;font-family:courier new;" >/cygdrive/c/android-sdk/tools/adb shell chmod 777 /data/tmp/test</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>To run the application type:<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >make run</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>You will probably get an error message saying:<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >/cygdrive/c/android-sdk/tools/adb shell /data/tmp/test</span><br /><span style="font-style: italic;font-family:courier new;" >/data/tmp/test: not found</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>This error message is a bit confusing because if you browse the <span style="font-style: italic;font-family:courier new;" >/data/tmp</span> directory you will notice that the executable is here. The question is why?<br />I spent hours searching and I found that this error happens because the loader fails to load the application because it cannot found a proper linker.<br />To specify a search directory for the dynamic linker (at run time) you MUST change the link options like this:<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >LDFLAGS := -Wl,--entry=main,-rpath-link=$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib,</span><span style="color: rgb(102, 0, 0); font-style: italic;font-family:courier new;" >-dynamic-linker=/system/bin/linker </span><span style="font-style: italic;font-family:courier new;" >-L$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib</span><br /><span style="font-style: italic;font-family:courier new;" >LDFLAGS += -nostdlib -lc</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>Now rebuild and install your application (<span style="font-style: italic;font-family:courier new;" >make clean && make && make install</span>) then run it again (<span style="font-style: italic;font-family:courier new;" >make run</span>).<br />The console will print the expected result ("<span style="font-style: italic;font-family:courier new;" >hello, world (i=3)!</span>") but just after we have an segmentation fault error <span style="font-style: italic;font-family:courier new;" >("[1] Segmentation fault /data/tmp/test"</span>).<br />To resolve this issue you can <span style="font-style: italic;font-family:courier new;" >exit</span> the program (<span style="font-style: italic;font-family:courier new;" >exit(0);</span>) just before the main function <span style="font-style: italic;font-family:courier new;" >return</span>s (<span style="font-style: italic;font-family:courier new;" >return 0;</span>). You should also <span style="font-style: italic;font-family:courier new;" >include <stdlib.h></stdlib.h></span><span style="font-style: italic;font-family:courier new;" ><stdlib.h></stdlib.h></span><<span style="font-style: italic;font-family:courier new;" >stdlib.h</span>>.<br />If you retry the <span style="font-style: italic;font-family:courier new;" >build</span>&&<span style="font-style: italic;font-family:courier new;" >run</span> process (<span style="font-style: italic;font-family:courier new;" >make clean && make && make install && make run</span>) then you should have:<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic; color: rgb(0, 51, 0); font-weight: bold;font-family:courier new;" >/cygdrive/c/android-sdk/tools/adb shell /data/tmp/test</span><br /><span style="font-style: italic; color: rgb(0, 51, 0); font-weight: bold;font-family:courier new;" >Hello, world (i=3)!</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>which is the expected result.<br /><br /><span style="font-size:180%;"><span style="font-weight: bold;font-family:arial;" >Debugging your application<br /></span></span> Before doing anything you MUST copy the <span style="font-style: italic;font-family:courier new;" >gdbserver</span> file to the emultor.<span style="font-size:180%;"><span style="font-weight: bold;font-family:arial;" ><br /></span></span>This file is under <span style="font-style: italic;font-family:courier new;" >$BIN</span> (<span style="font-style: italic;font-family:courier new;" >$ANDROID_NDK_ROOT/build/prebuilt/$ANDROID_NDK_HOST/arm-eabi-4.2.1/bin</span>)<span style="font-size:180%;"><span style="font-weight: bold;font-family:arial;" >.<br /></span></span>Copy <span style="font-style: italic;font-family:courier new;" >gdbserver</span> to the emulator like this:<span style="font-size:180%;"><span style="font-weight: bold;font-family:arial;" ><br /></span></span><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >adb push gdbserver $INSTALL_DIR/gdbserver</span><br /><span style="font-style: italic;font-family:courier new;" >adb shell chmod 777 $INSTALL_DIR/gdbserver</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>where <span style="font-style: italic;font-family:courier new;" >$INSTALL_DIR </span><span style="font-family:courier new;"><span style="font-family:arial;">is the directory where you have installed your application (it's not mandatory to copy it in this directory)</span></span><span style="font-style: italic;font-family:courier new;" >.<br /></span><div style="text-align: left;"><span style="font-family:arial;">Before </span>running the server on port <span style="font-weight: bold;">1234 </span>you MUST redirect all tcp connection to this port like this:<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >adb forward tcp:1234: tcp:1234</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>it's not mandatory to forward connections to the same port number.<br />Now it's time to run the server:<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >adb shell $INSTALL_DIR/gdbserver :1234 $INSTALL_DIR/$APP</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>note that only the server port is specified (no host).<br />If all is OK the the server will print something like this:<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >Process /data/tmp/test created; pid = 246</span><br /><span style="font-style: italic;font-family:courier new;" >Listening on port 1234</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>Now to debug our application we will change the <span style="font-style: italic;font-family:courier new;" >makefile</span> by adding a new <span style="font-style: italic;font-family:courier new;" >debug</span> target like this.<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >GDB_CLIENT := $(BIN)/arm-eabi-gdb</span><br /><span style="font-style: italic;font-family:courier new;" ><br /><dt>debug:</dt></span><span style="font-style: italic;font-family:courier new;" ><dd>$(GDB_CLIENT) $(APP)</dd></span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>To launch the application in debug mode type "<span style="font-style: italic;font-family:courier new;" >make debug"</span> (after <span style="font-style: italic;font-family:courier new;" >make clean && make && make insta<span style="font-family:courier new;">l</span>l</span> of course). If you do this, you will see a warning message saying that "<span style="font-style: italic;font-family:courier new;" >no debugging symbols found</span>". No symbols ==> no debug.<br />To generate debug symbols you MUST change the <span style="font-style: italic;font-family:courier new;" >makefile</span> like this (should not be hard coded like this):<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="color: rgb(102, 0, 0); font-style: italic;font-family:courier new;" >DEBUG = -g</span><br /><span style="font-style: italic;font-family:courier new;" >CFLAGS := </span><span style="color: rgb(102, 0, 0); font-style: italic;font-family:courier new;" >$(DEBUG) </span><span style="font-style: italic;font-family:courier new;" >-I$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/include</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>Now rebuild and install your application (<span style="font-style: italic;font-family:courier new;" >make clean && make && make install</span>) then run it again (<span style="font-style: italic;font-family:courier new;" >make debug</span>). This (<span style="font-style: italic;font-family:courier new;" >make debug</span>) should open gdb invite command(<span style="font-style: italic;font-family:courier new;" >(gdb)</span>) on the same console.<br />Connect to the server (from the same console) like this:<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >target remote :1234</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span>Set a breakpoint on the main function and execute step by step (commands above are informational and you can use any gdb commands):<br /><span style="font-style: italic;font-family:courier new;" ><dl class="codebox"><br /><span style="font-style: italic;font-family:courier new;" >b main</span><br /><span style="font-style: italic;font-family:courier new;" ></span><span style="font-style: italic;font-family:courier new;" >c</span><br /><span style="font-style: italic;font-family:courier new;" >n</span><br /><span style="font-style: italic;font-family:courier new;" >p i </span><br /><span style="font-style: italic;font-family:courier new;" >#$1 = 1</span><br /><span style="font-style: italic;font-family:courier new;" >n</span><br /><span style="font-style: italic;font-family:courier new;" >#9 printf("Hello, world (i=%d)!\n", i);</span><br /><span style="font-style: italic;font-family:courier new;" >p i </span><br /><span style="font-style: italic;font-family:courier new;" >#$2 = 3</span><br /><span style="font-style: italic;font-family:courier new;" >c</span><br /><span style="font-style: italic;font-family:courier new;" >#Program exited normally.</span><br /><span style="font-style: italic;font-family:courier new;" ></span></dl></span><br /><span style="font-style: italic; color: rgb(0, 0, 0); font-weight: bold;">The final </span><span style="color: rgb(0, 0, 0); font-style: italic;font-family:courier new;" >makefile</span><span style="font-style: italic; color: rgb(0, 0, 0); font-weight: bold;"> and </span><span style="font-style: italic; color: rgb(0, 0, 0);font-family:courier new;" >test.c</span><span style="font-style: italic; color: rgb(0, 0, 0); font-weight: bold;"> files are shown below:</span><br /><dl class="codebox"><br /><dt><u>makefile</u></dt><br />APP := test<br />ROOT:=/cygdrive/c<br />INSTALL_DIR := /data/tmp<br />NDK_PLATFORM_VER := 1.5<br /><br />ANDROID_NDK_ROOT:=$(ROOT)/android-ndk<br />ANDROID_NDK_HOST:=windows<br />ANDROID_SDK_ROOT:=$(ROOT)/android-sdk<br />PREBUILD:=$(ANDROID_NDK_ROOT)/build/prebuilt/$(ANDROID_NDK_HOST)/arm-eabi-4.2.1<br />BIN := $(PREBUILD)/bin<br />GDB_CLIENT := $(BIN)/arm-eabi-gdb<br /><br />DEBUG = -g<br /><br />CPP := $(BIN)/arm-eabi-g++<br />CC := $(BIN)/arm-eabi-gcc<br />CFLAGS := $(DEBUG) -I$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/include<br />LDFLAGS := -Wl,--entry=main,-rpath-link=$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib,-dynamic-linker=/system/bin/linker -L$(ANDROID_NDK_ROOT)/build/platforms/android-$(NDK_PLATFORM_VER)/arch-arm/usr/lib<br />LDFLAGS += -nostdlib -lc<br /><br />all: $(APP)<br /><br /><dt>OBJS += $(APP).o<br /></dt><dt>$(APP): $(OBJS)<br /></dt><dd> $(CPP) $(LDFLAGS) -o $@ $^<br /></dd><dt>%.o: %.c<br /></dt><dd> $(CC) -c $(INCLUDE) $(CFLAGS) $< -o $@ </dd><dt>install: $(APP)<br /></dt><dd> $(ANDROID_SDK_ROOT)/tools/adb push $(APP) $(INSTALL_DIR)/$(APP)<br /></dd><dd> $(ANDROID_SDK_ROOT)/tools/adb shell chmod 777 $(INSTALL_DIR)/$(APP)<br /></dd><dt>shell:<br /></dt><dd> $(ANDROID_SDK_ROOT)/tools/adb shell<br /></dd><dt>run:<br /></dt><dd> $(ANDROID_SDK_ROOT)/tools/adb shell $(INSTALL_DIR)/$(APP)<br /></dd><dt>debug:<br /></dt><dd> $(GDB_CLIENT) $(APP)<br /></dd><dt>clean:<br /></dt><dd> @rm -f $(APP).o $(APP)<br /><br /></dd></dl><br /><dl class="codebox"><dt><u>test.c</u></dt><br />#include <stdio.h><stdio.h> // printf<br />#include <stdlib.h><stdlib.h> //exit<br /><br />int main(int argc, char **argv)<br />{<br />int i = 1;<br />i+=2;<br /><br />printf("Hello, world (i=%d)!\n", i);<br /><br />exit(0);<br />return 0;<br />}<br /></stdlib.h></stdio.h></dl><br /></div><input id="gwProxy" type="hidden"><!--Session data--><input onclick="jsCall();" id="jsProxy" type="hidden"><div id="refHTML"></div><input id="gwProxy" type="hidden"><!--Session data--><input onclick="jsCall();" id="jsProxy" type="hidden"><div id="refHTML"></div><input id="gwProxy" type="hidden"><!--Session data--><input onclick="jsCall();" id="jsProxy" type="hidden"><div id="refHTML"></div><input id="gwProxy" type="hidden"><!--Session data--><input onclick="jsCall();" id="jsProxy" type="hidden"><div id="refHTML"></div><input id="gwProxy" type="hidden"><!--Session data--><input onclick="jsCall();" id="jsProxy" type="hidden"><div id="refHTML"></div>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com27tag:blogger.com,1999:blog-4923730159992091107.post-47284439878878073622010-01-19T08:32:00.000-08:002010-05-05T13:49:52.709-07:00SIP/IMS and NAT traversal (Part 1)This is the first part of a three-part series about NAT traversal solutions for SIP/IMS. I will begin from simple solutions (e.g. "rport" extension) and end with some more complex one (e.g ICE).
<br />
<br />Today most Internet users are in a private network behind one or several NATs. This is not a problem for your browser (HTTP, FTP...) or email client (SMTP, POP...) because they use protocols that can operate behind NATs. The problem comes when you try to use your SIP phone to REGISTER or place a call to another softphone in different private network through Internet (Public network).
<br />The problem with SIP is that IP addresses and Ports where to contact/respond an agent (e.g. PC, Box or mobile phone) are embedded in the SIP message itself.
<br />
<br />For example, when you REGISTER to a registrar (e.g Serving-CSCF through Proxy-CSCF) you add a contact header (IP address and Port - <span style="color: rgb(0, 0, 0); font-weight: bold;">Contact: <sip:alice@192.168.16.108:27208;transport=udp></span>) where the registrar should send all your incoming calls(INVITEs). This address is called Address-Of-Record (a.k.a AOR).
<br />If you are in a private network you will add your private IP address and port in this header (Contact) and the problem is that this AOR is not visible to the elements outside your private network.
<br />This mean that INVITE requests will never reach your agent.
<br />You will have the same problem when you are the caller, as you will add in your SDP the IP addresses and ports where RTP packets shall be sent to you.
<br />
<br />So, NAT problem concern both signaling (SIP/SDP) and media (RTP/RTCP) plans.
<br /><meta equiv="CONTENT-TYPE" content="text/html; charset=utf-8"><title></title><meta name="GENERATOR" content="OpenOffice.org 2.3 (Win32)"><style type="text/css"> <!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } --> </style> <p style="margin-bottom: 0cm; color: rgb(0, 0, 0); font-weight: bold;"><span style="font-size:180%;">rport</span></p> <p style="margin-bottom: 0cm;">This is the simplest way to deal with NATs problem at signalling (SIP only) plan for connectionless protocols (e.g. UDP). rport has been defined in <span style="font-weight: bold;">RFC 3581</span> and apply to both connectionless (e.g. UDP) and connection-oriented (e.g. TCP, TLS, SCTP) protocols.</p> <p style="margin-bottom: 0cm;">Because connection-oriented protocols such as TCP are bidirectional it is easier to deal with NAT traversal (all responses will be sent back using the same connection from which the request has been received from).</p> <p style="margin-bottom: 0cm;">The philosophy (of rport) is that when you add this attribute (rport) in your requests (<span style="background: rgb(255, 255, 0) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">Via: SIP/2.0/UDP 192.168.16.108:27208;branch=z9hG4bK1234;<span style="font-weight: bold;">rport</span></span>) then all responses will be sent back to the ip:port from which the request has been received from. This parameter MUST be added in the top most Via header.</p> <p style="margin-bottom: 0cm;">The response will contain a new parameter (« received ») containing the IP address from which the request has been received and the rport value will be filled with the mapped (public?) source port. In this way the client/caller (the sender of the request) can learn it's public/reflexive IP address and port (<span style="background: rgb(255, 255, 0) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">Via: SIP/2.0/UDP 192.168.16.108:27208;branch=z9hG4bK1234;<span style="font-weight: bold;">rport=1234;received=10.1.1.1</span></span>).</p> <p style="margin-bottom: 0cm;">By examining the response the client can know if it's behind a NAT or not.</p> <p style="margin-bottom: 0cm;">The problem with this solution is that it only deals with SIP messages and cannot be used for RTP/RTCP packets as the SDP will contain wrong IP addresses and ports. A solution to this issue could be using Symmetric RTP/RTCP (see above).</p><p style="margin-bottom: 0cm;"><meta equiv="CONTENT-TYPE" content="text/html; charset=utf-8"><title></title><meta name="GENERATOR" content="OpenOffice.org 2.3 (Win32)"><style type="text/css"> <!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } --> </style> </p><p style="margin-bottom: 0cm; color: rgb(0, 0, 0);"><span style="font-size:180%;"><b>Symmetric RTP / RTP Control Protocol (RTCP)</b></span></p> <p style="margin-bottom: 0cm;">As we have seen above (rport), we cannot use « rport » to deal with RTP/RTCP packets which are almost always transported using UDP. A solution to this problem could be using « Symetric RTP/RTCP » as per <span style="font-weight: bold;">RFC 4961</span>. This solution is a bit like using « rport ».</p> <p style="margin-bottom: 0cm;">In this case the caller (INVITE originator) will create the request as per RFC 3261 as usual. When the 2xx (with SDP) or 1xx (with SDP) is received, the caller will ignore the IP addresses and ports defined in the response and send RTP/RTCP packets to IPs/Ports from which the RTP/RTCP packets have been sent (like rport).</p> <p style="margin-bottom: 0cm;">To summarize: </p> <p></p><ol><li>Bob sends an INVITE to Alice</li><li>Alice sends back a 2xx (with SDP) or 1xx (with SDP) to Bob</li><li>Bob waits for first RTP/RTCP packets to come from Alice</li><li>Alice send first RTP/RTCP packest from IP-a and Port-a to IP-b and Port-b (Bob address and port defined in the SDP).</li><li>Instead of sending RTP/RTCP packets to IP-asdp and Port-asdp as sepecified in the Alice's SDP, Bob will begin sending media stream to IP-a and Port-a.</li></ol><p style="margin-bottom: 0cm;"> </p><p style="margin-bottom: 0cm;">As you can imagine this solution only work for only some NATs.</p><p style="margin-bottom: 0cm;"><meta equiv="CONTENT-TYPE" content="text/html; charset=utf-8"><title></title><meta name="GENERATOR" content="OpenOffice.org 2.3 (Win32)"><style type="text/css"> <!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } --> </style> </p><p style="margin-bottom: 0cm; font-weight: bold;"><span style="font-size:180%;">Session border controller</span></p> <p style="margin-bottom: 0cm;">As its name says, it controls (both media and SIP packets) sessions (SIP calls) and is in the border (between two networks) of the networks. </p> <p style="margin-bottom: 0cm;">In our case (NAT traversal) the role of SBC will be to inspect/control all outgoing and incoming SIP/RTP/RTCP packets. All SIP packets will be inspected and IP addresses and ports within the packet will be rewritten (e.g from private IP to public IP).</p><p></p><p style="margin-bottom: 0cm;">This solution has several problems: </p><ul><li><span style="color: rgb(0, 0, 0);">Very expensive (€€$$££)</span>
<br /></li><li><p style="margin-bottom: 0cm;">As the SBC operates on the SIP packets then it MUST be aware of all headers (or functions) in order to know what should be changed and what should not be changed. This mean that the SBC MUST always be up to date in order to efficiently handle SIP packets</p> </li><li><p style="margin-bottom: 0cm;">Most SBCs can only handle well-know protocols such as SIP, RTP or RTCP and will drop all unknown protocols
<br /></p> </li><li><p style="margin-bottom: 0cm;">There is also many problems when End-to-End encryption (e.g. TLS, SRTP or IPSec) is used unless the SBC has the key (which is a bad idea)</p> </li><li><p style="margin-bottom: 0cm;">As the SBC will be used to relay all RTP/RTCP packets then this will introduce additional delay (dad sound quality)
<br /></p> </li><li><p style="margin-bottom: 0cm;">When unreliable transport is used this (relaying packets) could also increase packet loss (QoS problem)
<br /></p> </li></ul> <p style="margin-bottom: 0cm;">In the 3GPP IMS context the SBC is in most case bundled with the Proxy-CSCF (P-CSCF plus IMS-ALG) and this could resolve the security issue (SIP-IPSec).</p> <p></p><p style="margin-bottom: 0cm;"><meta equiv="CONTENT-TYPE" content="text/html; charset=utf-8"><title></title><meta name="GENERATOR" content="OpenOffice.org 2.3 (Win32)"><style type="text/css"> <!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } --> </style> </p><p style="margin-bottom: 0cm; font-weight: bold;"><span style="font-size:180%;">STUN</span></p> <p style="margin-bottom: 0cm;">STUN was previously defined in <span style="font-weight: bold;">RFC 3489</span> and updated by <span style="font-weight: bold;">RFC 5389</span>. STUN stands for « <span style="font-weight: bold;">S</span>ession <span style="font-weight: bold;">T</span>raversal <span style="font-weight: bold;">U</span>tilities for <span style="font-weight: bold;">N</span>AT » and is a client-server protocol (request <-> response) as SIP.</p> <p style="margin-bottom: 0cm;">There is also « indication requests » that don't generate responses like « binding requests ».</p> <p style="margin-bottom: 0cm;">Both reliable (e.g. UDP) and unreliable (e.g TCP, TLS or SCTP) are supported.</p> <p style="margin-bottom: 0cm;">Like SIP, when unreliable transoport is used there is the notion of transctions and retransmissions.</p> <p style="margin-bottom: 0cm;">When STUN is used the client learn its public IP address and port (a.k.a reflexive transport address) by sending a binding request to the STUN server (default UDP/TCP port:3478 and default TLS port: 5349). The server will in some case challenge (401) the client which should resend its request with all credentials (HTTP digest authentication). </p> <p style="margin-bottom: 0cm;">If the request is suceessfuly autheticated by the server, then a success binding response is sent back to the client. This response contains a STUN attribute (XOR-MAPPED-ADDRESS)</p> <p style="margin-bottom: 0cm;">with the client's public IP address, family and port. This is also called the « reflexive transport address ».</p> <p style="margin-bottom: 0cm;">Once this reflexive transport address is know then the client can for example begin REGISTERing using this address and port as AOR.</p><p style="margin-bottom: 0cm; font-style: italic; color: rgb(0, 0, 0); font-weight: bold;">====== Step 1: Sending binding request ======</p><p style="margin-bottom: 0cm; font-style: italic; color: rgb(0, 0, 0);"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://doubango.googlecode.com/svn/trunk/images/STUN/stun_bindingrequest.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 593px; height: 334px;" src="http://doubango.googlecode.com/svn/trunk/images/STUN/stun_bindingrequest.PNG" alt="" border="0" /></a></p><p style="margin-bottom: 0cm;">In this request I send my STUN request from "<span style="font-weight: bold;">192.168.16.108:1115</span>" to the server in order to get the public IP address and port associated to this local socket/Private address (file descriptor).</p>
<br /><span style="font-weight: bold;">====== Step 2 Success binding response ======</span>
<br />
<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://doubango.googlecode.com/svn/trunk/images/STUN/stun_bindingresponse.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 793px; height: 479px;" src="http://doubango.googlecode.com/svn/trunk/images/STUN/stun_bindingresponse.PNG" alt="" border="0" /></a>In step 2 the STUN client receive an response from the server with its public IP address and port. To match the response with the request we compare the transaction IDs.
<br />As some routers rewrite the content of the packets the IP address and port are not sent "as is" but in XOR format (into the <span style="font-weight: bold;">XOR-MAPPED-ADDRESS</span> attribute).
<br />To retrieve the port:
<br /> <span style="font-style: italic; color: rgb(0, 0, 0);">uint16_t port = ntohs(*((uint16_t*)payloadPtr));</span>
<br /><span style="font-style: italic; color: rgb(0, 0, 0);"> port ^= 0x2112; /* First two bytes of the STUN2 magic cookie. */</span>
<br />To retrive the IPv4 address:
<br /> <span style="font-style: italic; color: rgb(51, 51, 51);">uint32_t addr = ntohl(*((uint32_t*)payloadPtr));</span>
<br /><span style="font-style: italic; color: rgb(51, 51, 51);"> addr ^= 0x2112A442; /* The STUN2 magic cookie */</span>
<br />
<br /><span style="font-weight: bold;">====== Step 3 Sending first SIP request ======</span>
<br />
<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://doubango.googlecode.com/svn/trunk/images/STUN/stun_sipregister.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 1151px; height: 323px;" src="http://doubango.googlecode.com/svn/trunk/images/STUN/stun_sipregister.PNG" alt="" border="0" /></a>
<br />From step 1 and 2 the sip agent can assert that [192.168.16.108:1159] is mapped to [89.127.73.39:1115] (take care to the port mapping).
<br />In step 3 when sending it's first REGISTER request it will use this pulic IP address and port to build its AOR. As <span style="font-weight: bold;">rport</span> option is used then you could keep the Via IP address and port inchanged (or not).
<br /><p style="margin-bottom: 0cm;">The major problem with STUN is that it could not be used behind bi-directional NATs. In the next parts I will explain how to overcome this problem by using TURN and ICE.</p> <p></p><input id="gwProxy" type="hidden"><!--Session data--><input onclick="jsCall();" id="jsProxy" type="hidden"><div id="refHTML"></div>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com0tag:blogger.com,1999:blog-4923730159992091107.post-25048329953713944302009-10-02T02:31:00.000-07:002012-08-10T13:59:14.455-07:00SMS over 3GPP IMS Network<span style="color: black;">SMS stands for Short Message Service or Silent Messaging Service and is a communication service standardized in the GSM mobile communication system, using standardized communications protocols allowing the interchange of short text messages between mobile telephone devices.</span> <br />
<div style="color: black; text-align: justify;">
<br />
SMS technology has been specified by the ETSI in GSM 03.40 and 03.38 documents (3GPP TS 23.040 and 3GPP TS 23.038 respectively). These documents only describe how to use SMS over mobile networks (nothing for IP networks).
<br />
In real world there are two way to receive SMS messages over mobile networks: <span style="font-weight: bold;">Binary</span> (PDU) and <span style="font-weight: bold;">Text</span> mode.
<br />
In this post I will explain how to use SMS technology over IP within the IP Multimedia (IM) Core Network (CN) subsystem based on the Session Initiation Protocol (SIP) and SIP Events as defined in 3GPP TS 24.229.
<br />
Note: In the coming chapters, « SMS over IMS Network » and « SMS over IP Network » have the same meaning.
</div>
<br />
<span style="color: red; font-size: 130%;"><span style="font-weight: bold;">Text mode</span></span>
<br />
<br />
<span style="color: black;">The message payload is transfered « as is ». This mode is out of scope.</span>
<br />
<br />
<span style="color: red; font-size: 130%; font-weight: bold;">Binary mode </span>
<br />
<br />
<div style="color: black; text-align: justify;">
Also know as PDU (Protocol Data Unit) mode, it is use to encode the payload of the SMS sent over IMS networks. In this case the payload only contains a sequence of <span style="font-weight: bold;">hexa-decimal</span> <span style="font-weight: bold;">octets</span> or <span style="font-weight: bold;">decimal semi-octets</span> strings. The overall PDU string contains some useful information (SMSC address, Service center time stamp, sender number, message reference ...) plus the actual message.
<br />
<br />
<div style="text-align: justify;">
The message length can be up to 160 characters where each character represent 7bits [160/7bits], [140/8bits] or [70/16bits]. By default, each character represent 7bits encoded as per GSM 03.38.
</div>
</div>
<div style="text-align: justify;">
<span style="color: black;">For IMS Networks, SMS message shall be encapsulated in RPDUs (Relay Protocol Data Unit) data string as defined in 3GPP TS 24.011, subclause 7.3. The RPDU data is transfered from SM entity to SM entity using SIP MESSAGE requests. These SIP requests shall use the MIME type "<span style="font-weight: bold;">application/vnd.3gpp.sms</span>" for this purpose.</span>
</div>
<br />
<span style="color: red; font-size: 130%; font-weight: bold;">GSM 7 bit Default Alphabet</span>
<br />
<br />
<span style="color: black;">Each character represent 7bits. For more information see 3GPP TS 23.038 or ETSI GSM 03.38.</span>
<br />
<br />
<div style="text-align: center;">
<a href="http://doubango.googlecode.com/svn/branches/1.0/images/sms//gsm_alphabet_7bits.PNG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://doubango.googlecode.com/svn/branches/1.0/images/sms//gsm_alphabet_7bits.PNG" style="cursor: pointer; display: block; height: 740px; margin: 0px auto 10px; text-align: center; width: 726px;" /></a><title></title></div>
<style type="text/css"> <!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } --></style><span style="color: black; font-size: 85%; font-style: italic;">Figure 1: GSM 7bit alphabet</span><span style="color: black; font-weight: bold;"></span>
<br /><span style="font-weight: bold;"></span><br />
<div align="left" style="color: red; font-weight: bold; margin-bottom: 0cm;">
<span style="font-size: 130%;"><span style="font-family: Times New Roman,serif;">3GPP IMS Registration</span></span></div>
<br />
<div style="text-align: justify;">
<span style="color: black;">On sending a REGISTER request, the IMS Client shall indicate its capability to receive traditional short messages over IMS network by including a "</span><span style="color: black; font-style: italic; font-weight: bold;">+g.3gpp.smsip</span><span style="color: black;">" parameter into the Contact header according to RFC 3840.</span>
</div>
<br />
<div style="text-align: center;">
<a href="http://doubango.googlecode.com/svn/branches/1.0/images/sms//sip_register.PNG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://doubango.googlecode.com/svn/branches/1.0/images/sms//sip_register.PNG" style="cursor: pointer; display: block; height: 228px; margin: 0px auto 10px; text-align: center; width: 1019px;" /></a><span style="color: red; font-size: 130%;"><span style="color: black; font-size: 85%; font-style: italic;">Figure 2: SIP/IMS registration</span></span> <span style="font-size: 85%;"><span style="font-style: italic;">request</span></span>
</div>
<span style="color: red; font-size: 130%;"><span style="font-weight: bold;">
<br />Mobile-Originated SMS (MO-SMS)</span></span>
<br />
<br />
<div style="text-align: justify;">
<span style="color: black;">The IMS Client sender shall build and populate RP-DATA message (RPDU encapsulating TPDU data string), containing all the information that a mobile station submitting an SMS message according to 3GPP TS 24.011 would place, for successful delivery. The sender shall</span> <span style="color: black;">parse and interpret RP- DATA, RP-ACK and RP-ERROR messages, containing all the information that a mobile station receiving an SM according to 3GPP TS 24.011 would see, in a SM submission or status report.</span>
</div>
<br />
<br />
<a href="http://doubango.googlecode.com/svn/branches/1.0/images/sms//sms-over-ip-sender.PNG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://doubango.googlecode.com/svn/branches/1.0/images/sms//sms-over-ip-sender.PNG" style="cursor: pointer; display: block; height: 617px; margin: 0px auto 10px; text-align: center; width: 739px;" /></a>
<br />
<div style="text-align: center;">
<span style="font-size: 85%; font-style: italic;">Figure 3: Signaling flows demonstrating successful UE originated SM submit procedure over IP as per 3GPP TS 24.341</span>
</div>
<br />
<span style="color: #330033; font-size: 100%; font-style: italic; font-weight: bold;">** [1,2,4] RP-DATA (SMS-SUBMIT)</span>
<br />
<br />
<div style="text-align: justify;">
<span style="color: black;">Below is represented the first request (RP-DATA(SMS-SUBMIT)) sent from the IMS Client to the P-CSCF.</span>
</div>
<br />
<div style="text-align: center;">
<a href="http://doubango.googlecode.com/svn/branches/1.0/images/sms//sip_sms-over-ip-sender.PNG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://doubango.googlecode.com/svn/branches/1.0/images/sms//sip_sms-over-ip-sender.PNG" style="cursor: pointer; display: block; height: 227px; margin: 0px auto 10px; text-align: center; width: 513px;" /></a><span style="font-size: 85%; font-style: italic;">Figure 4: RP-DATA(SMS-SUBMIT) from Mercuro to the P-CSCF</span>
</div>
<br />
<div style="text-align: justify;">
<span style="color: black;">The SIP MESSAGE (</span><span style="color: black; font-size: 85%; font-style: italic;">Figure 4</span><span style="color: black;">) request sent from the IMS client to the P-SCSF carry the RP-DATA (Mobile station to IMS Network) message encoded as per 3GPP TS 24.011 chapter 7.3.1.2.</span>
</div>
<br />
<div style="text-align: center;">
<a href="http://doubango.googlecode.com/svn/branches/1.0/images/sms//rp-data-mston-format.PNG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://doubango.googlecode.com/svn/branches/1.0/images/sms//rp-data-mston-format.PNG" style="cursor: pointer; display: block; height: 118px; margin: 0px auto 10px; text-align: center; width: 753px;" /></a><span style="font-size: 85%;"><span style="font-style: italic;">Figure 5: RP-DATA (Mobile Station to Network) as per 3GPP TS 24.011 subclause 7.3.1.2</span> </span></div>
<br />
<div style="text-align: justify;">
<span style="color: black;">The SIP MESSAGE content (</span><span style="color: black; font-size: 85%;"><span style="font-style: italic;">Figure 4</span></span><span style="color: black;">) can be dissected as following:</span>
</div>
<span style="font-size: 85%;">
</span><br />
<div style="text-align: justify;">
<span style="font-size: 85%;"><span style="font-family: courier new; font-size: 100%;"><span style="color: black; font-weight: bold;">RP-MESSAGE:</span> <span style="color: #990000; font-weight: bold;">000000069133010000F019</span><span style="color: #666666; font-weight: bold;">069133010000F011000A9133163254760000AA05F330BB4E07</span></span></span>
<br />
<span style="font-size: 85%;"><span style="font-family: courier new; font-size: 100%;"><span style="color: black; font-weight: bold;">RPDU:</span><span style="color: #990000; font-weight: bold;">000000069133010000F019</span></span></span>
</div>
<span style="font-size: 85%;"><span style="font-family: courier new; font-size: 100%;"><span style="font-weight: bold;"><span style="color: black;">TPDU (SMS-SUBMIT):</span><span style="color: #666666;">069133010000F011000A9133163254760000AA05F330BB4E07</span></span></span></span>
<br />
<br />
<div style="text-align: justify;">
<span style="color: black;">The RP-MESSAGE can be dissected as follow (<span style="font-style: italic;">Figure 6</span>):</span>
</div>
<br />
<div style="text-align: center;">
<a href="http://doubango.googlecode.com/svn/branches/1.0/images/sms//rp-data-submit.PNG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://doubango.googlecode.com/svn/branches/1.0/images/sms//rp-data-submit.PNG" style="cursor: pointer; display: block; height: 761px; margin: 0px auto 10px; text-align: center; width: 776px;" /></a><span style="font-size: 85%;"><span style="font-style: italic;">Figure 6: </span></span><span style="font-size: 85%; font-style: italic;">RP-DATA (Mobile Station to Network) content dissection</span>
</div>
<br />
<span style="color: #330033; font-style: italic; font-weight: bold;">** [9,10,11] RP-ACK(SMS-SUBMIT-REPORT)</span>
<br />
<br />
<div style="text-align: justify;">
<span style="color: black;">The SIP MESSAGE payload includes the RP-ACK message. Its RP-User-Data information element includes a TPDU of type SMS-SUBMIT-REPORT.</span>
</div>
<br />
<div style="text-align: center;">
<a href="http://doubango.googlecode.com/svn/branches/1.0/images/sms//rp-ack-format.PNG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://doubango.googlecode.com/svn/branches/1.0/images/sms//rp-ack-format.PNG" style="cursor: pointer; display: block; height: 77px; margin: 0px auto 10px; text-align: center; width: 738px;" /></a><span style="font-size: 85%;"><span style="font-style: italic;">Figure 7: RP-ACK as per 3GPP TS 24.011</span></span> subclause 7.3.3
<br />
<br /></div>
<span style="color: black; font-family: courier new; font-size: 100%; font-weight: bold;">RP-MESSAGE:</span><span style="color: #990000; font-family: courier new; font-size: 100%; font-weight: bold;">020009</span><span style="color: #666666; font-family: courier new; font-size: 100%; font-weight: bold;">069133163254760080</span>
<br />
<br />
<div style="text-align: justify;">
<span style="color: black;">For more information, see 3GPP TS 24.011 subclause 7.3.3 for RPDU (RP-ACK) data and 3GPP TS 23.040 subclause 9.2.2.2a for TPDU (SMS-SUBMIT-REPORT) encoding. </span> <span style="color: black;">If error occurs when decoding the message, RP-ERROR (3GPP TS 24.011 subclause 7.3.4) message is sent instead of RP-ACK.</span>
</div>
<br />
<span style="color: red; font-size: 130%;"><span style="font-weight: bold;">Mobile-Terminated SMS (MT-SMS)</span></span>
<br />
<div style="text-align: left;">
<br />
<div style="text-align: center;">
<a href="http://doubango.googlecode.com/svn/branches/1.0/images/sms//sms-over-ip-receiver.PNG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://doubango.googlecode.com/svn/branches/1.0/images/sms//sms-over-ip-receiver.PNG" style="cursor: pointer; display: block; height: 746px; margin: 0px auto 10px; text-align: center; width: 738px;" /></a><span style="font-size: 85%;"><span style="font-style: italic;">Figure 8: UE originated SM deliver procedure over IP signaling as per 3GPP TS 24.341</span></span>
</div>
</div>
<br />
<span style="color: #330033; font-weight: bold;">** [2,3,4] RP-DATA(SMS-DELIVER)</span>
<br />
<br />
<br />
<title></title><style type="text/css"> <!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } --> </style> <div style="color: black; text-align: justify;">
This request sent from the IP-SM-GW includes a <span style="font-weight: bold;">vnd.3gpp.sms</span> payload that includes the short message and routing information for the S-CSCF to forward the short message.
<br />
<br />
The payload includes the RP-DATA message. Its RP-User-Data information element includes a TPDU of type SMS-DELIVER.
<br />
<br />
<div style="text-align: center;">
<a href="http://doubango.googlecode.com/svn/branches/1.0/images/sms//rp-data-ntoms-format.PNG" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img alt="" border="0" src="http://doubango.googlecode.com/svn/branches/1.0/images/sms//rp-data-ntoms-format.PNG" style="cursor: pointer; display: block; height: 105px; margin: 0px auto 10px; text-align: center; width: 732px;" /></a><span style="font-size: 85%;"><span style="font-style: italic;">Figure 9: RP-DATA (Network to </span></span><span style="font-size: 85%;"><span style="font-style: italic;">Mobile Station </span></span><span style="font-size: 85%;"><span style="font-style: italic;">) as per 3GPP TS 24.011 subclause 7.3.1.1</span></span></div>
</div>
<br />
<span style="font-weight: bold;"><span style="color: black; font-family: courier new; font-size: 100%;">RP-MESSAGE: </span><span style="font-family: courier new;"><span style="color: #990000;">0100069133010000F0001E</span><span style="color: #666666;">069133010000F0040A91331632547600000000000000000005F330BB4E07</span></span></span>
<br />
<br />
<div style="color: black; text-align: justify;">
For more information, see 3GPP TS 24.011 subclause 7.3.1.1 for RPDU (RP-DATA) data and 3GPP TS 23.040 subclause 9.2.2.1 for TPDU (SMS-DELIVER) encoding.
<br />
<br />
<span style="color: #330033; font-weight: bold;">** [8,9,11] RP-ACK(SMS-DELIVER-REPORT)</span>
<br />
<br />
<div style="color: black; text-align: justify;">
This request includes a <span style="font-weight: bold;">vnd.3gpp.sms</span> payload that includes the SMS-DELIVER-REPORT and routing information for the IP-SM-GW to forward the delivery report.
<br />
The payload includes an RP-ACK message. Its RP-User-Data information element includes a TPDU of type SMS-DELIVER-REPORT.
</div>
<br />
<span style="font-family: courier new; font-size: 100%; font-weight: bold;"><span style="color: black;">RP-MESSAGE:</span><span style="color: #990000;">020109</span><span style="color: #666666;">069133163254760080</span></span>
<br />
<br />
<div style="text-align: justify;">
<span style="color: black;">For more information, see 3GPP TS 24.011 subclause 7.3.3 for RPDU (RP-ACK) data and 3GPP TS 23.040 subclause 9.2.2.1a for TPDU (SMS-DELIVER-REPORT) encoding.</span>
<br />
<span style="color: black;">If error occurs when decoding the message, RP-ERROR (3GPP TS 24.011 subclause 7.3.4) message is sent instead of RP-ACK.</span>
</div>
</div>
<br />
References:
<br />
<ul>
<li><a href="http://en.wikipedia.org/wiki/SMS"><span style="font-style: italic;">http://en.wikipedia.org/wiki/SMS</span></a></li>
</ul>
<ul>
<li><a href="http://www.3gpp.org/ftp/Specs/html-info/23038.htm"><span style="font-style: italic;">3GPP TS 23.038 - Alphabets and language-specific information</span></a></li>
<li><a href="http://www.3gpp.org/ftp/Specs/html-info/23040.htm"><span style="font-style: italic;">3GPP TS 23.040 - Technical realization of Short Message Service (SMS)</span></a></li>
<li><a href="http://www.3gpp.org/ftp/Specs/html-info/24011.htm"><span style="font-style: italic;">3GPP TS 24.011 - Point-to-Point (PP) Short Message Service (SMS) support on mobile radio interface.</span></a></li>
<li><a href="http://www.3gpp.org/ftp/Specs/html-info/24341.htm"><span style="font-style: italic;">3GPP TS 24.341 - Support of SMS over IP networks; Stage 3</span></a></li>
<li><a href="http://www.3gpp.org/ftp/Specs/html-info/24451.htm"><span style="font-style: italic;">3GPP TS 24.451 - Support of SMS and MMS over NGN IMS subsystem; Stage 3 [Endorsement of 3GPP TS 24.341 Release 7]</span></a></li>
</ul>
<br />Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com20tag:blogger.com,1999:blog-4923730159992091107.post-48421799740956202992009-08-09T02:53:00.000-07:002009-08-14T22:21:23.854-07:00OpenIPSec: Introduction (Part 1)This is the first part of a series of articles in which I will explain how I will develop an open source <span style="font-weight: bold;">IPSec</span> Framework (<span style="font-weight: bold;">Ndis Driver</span>, <span style="font-weight: bold;">Crypto API</span> and <span style="font-weight: bold;">Command Line</span><span style="font-weight: bold;"> Tools</span>) for <span style="font-weight: bold;">Windows OS</span>.<br />This Framework will be available under <span style="font-weight: bold;">GPLv3</span> license and all the source code will be available for download.<br /><br />This first part is an introduction to <span style="font-weight: bold;">IPSec</span> and a kick overview of <a href="http://code.google.com/p/openipsec/">OpenIPSec</a> project.<br /><br /><span style="color: rgb(204, 0, 0);font-size:180%;" ><span style="font-weight: bold;">1. IPSec</span></span><br /><br /><span style="font-weight: bold;">IPSec</span> stands for <span style="font-weight: bold;">I</span>nternet <span style="font-weight: bold;">P</span>rotocol <span style="font-weight: bold;">Sec</span>urity and has been specified by the Internet Engineering Task Force (IETF).<br /><span style="font-weight: bold;">IPSec</span> operates at at the Network Layer (<span style="font-weight: bold;">OSI Layer 3</span>). This imply that it can protect all upper protocols such as UDP, TCP or ICMP.<br /><span style="font-weight: bold;">IPSec</span> is a successor of the ISO standard Network Layer Security Protocol (NLSP). NLSP was based on the SP3 protocol that was published by the NIST but designed by the Secure Data Network System project of the National Security Administration (NSA). Because it operates at OSI layer 3 it must be integrated at the <span style="font-weight: bold;">Kernel/OS Layer</span>. On Windows OS all Network APIs (e.g. <span style="font-weight: bold;">Windows Sockets 2 </span>or <span style="font-weight: bold;">Layered Service Provider</span>) operate at the upper layers (<span style="font-weight: bold;">user/application Layer</span>).<br />An example of security protocols working at user/application layer are Secure Sockets Layer (<span style="font-weight: bold;">SSL</span>), Transport Layer Security (<span style="font-weight: bold;">TLS</span>) or Secure Shell (<span style="font-weight: bold;">SSH</span>).<br /><br /><span style="font-weight: bold; color: rgb(255, 102, 0);">1.1 Protocols</span><br /><br /><span style="font-weight: bold;">IPSec</span> have three main protocols: <span style="font-weight: bold;">AH</span>, <span style="font-weight: bold;">ESP</span> and <span style="font-weight: bold;">IKE</span>. <span style="font-weight: bold;">AH</span> and <span style="font-weight: bold;">ESP</span> are commonly called <span style="font-style: italic;">Security Protocols</span>.<br /><br /><span style="font-weight: bold;">=>AH:</span> Stands for <span style="font-weight: bold;">A</span>uthentication <span style="font-weight: bold;">H</span>eader and has been defined in <span style="font-weight: bold;">RFC43</span><span style="font-weight: bold;">02</span>. It is used to provide connectionless integrity and data origin authentication for IP datagrams and to provide protection against replays.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://openipsec.googlecode.com/svn/trunk/screenshots/ah_packet.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 606px; height: 165px;" src="http://openipsec.googlecode.com/svn/trunk/screenshots/ah_packet.PNG" alt="" border="0" /></a><br /><span style="font-weight: bold;">=>ESP:</span> Stands for <span style="font-weight: bold;">E</span>ncapsulating <span style="font-weight: bold;">S</span>ecurity <span style="font-weight: bold;">P</span>ayload and has been defined in <span style="font-weight: bold;">RFC4303</span>. It is used to provide confidentiality, data origin authentication, connectionless integrity, an anti-replay service (a form of partial sequence integrity), and (limited) traffic flow confidentiality. It may be applied alone or in combination with <span style="font-weight: bold;">AH</span>.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://openipsec.googlecode.com/svn/trunk/screenshots/esp_packet.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 606px; height: 256px;" src="http://openipsec.googlecode.com/svn/trunk/screenshots/esp_packet.PNG" alt="" border="0" /></a><span style="font-weight: bold;">=>IKEv1/IKEv2:</span> Stands for <span style="font-weight: bold;">I</span>nternet <span style="font-weight: bold;">K</span>ey <span style="font-weight: bold;">E</span>xchange and have been defined in <span style="font-weight: bold;">RFC4109</span> and <span style="font-weight: bold;">RFC4306</span> respectively. Both are used for mutual authentication between two parties and establishes an <span style="font-weight: bold;">IKE</span> security association (<span style="font-weight: bold;">SA</span>) that includes shared secret information that can be used to efficiently establish SAs for Encapsulating Security Payload (<span style="font-weight: bold;">ESP</span>) and/or Authentication Header (<span style="font-weight: bold;">AH</span>) and a set of cryptographic algorithms to be used by the SAs to protect the traffic that they carry.<br /><br /><span style="color: rgb(255, 102, 0); font-weight: bold;">1.2 Security Association (SA)</span><br /><br /><span style="font-weight: bold;">IPSec</span> <span style="font-weight: bold;">S</span>ecurity <span style="font-weight: bold;">A</span>ssociation (<span style="font-weight: bold;">SA</span>) is a virtual unidirectional association between two or more peers/entities (IP:port) . This mean that you should create two SAs for bidirectional communications. Each <span style="font-weight: bold;">SA</span> has its own ID called <span style="font-weight: bold;">SAID</span> stored in the Security Association Database (<span style="font-weight: bold;">SAD</span>) as per <span style="font-weight: bold;">RFC4301</span>. The <span style="font-weight: bold;">SA</span> defines:<br /><ul><li> A unique security parameter index (<span style="font-weight: bold;">SPI</span>)</li><li> Shared security Keys</li><li> Lifetime</li><li> Encryption algorithm to use : <span style="font-weight: bold;">DES</span>, <span style="font-weight: bold;">3DES</span> or <span style="font-weight: bold;">AES</span> (all supported by <a href="http://code.google.com/p/opensec/">OpenSec</a>)</li><li> Authentication algorithm to use: <span style="font-weight: bold;">HMAC-MD5-96</span>, <span style="font-weight: bold;">AES-XCBC-MAC-96</span> or <span style="font-weight: bold;">HMAC-SHA-1-96</span> (all supported by <a href="http://code.google.com/p/opensec/">OpenSec</a>)</li><li> Which Protocol to use: <span style="font-weight: bold;">ESP</span> or <span style="font-weight: bold;">AH</span></li></ul><span style="color: rgb(255, 102, 0); font-weight: bold;"><br />1.3 Key Management</span><br /><br />Key Management mechanism is used to exchange mandatory security keys to setup <span style="font-weight: bold;">SA</span>s. Can be manual or automated using <span style="font-weight: bold;">IKE</span>.<br />For Example, <span style="font-weight: bold;">3GPP IMS</span> use <span style="font-weight: bold;">SIP</span> to exchange security information and manually setup SAs (e.g. using ipsec command line tools).<br /><br /><span style="font-weight: bold; color: rgb(255, 102, 0);">1.4 Mode of operation (transport and tunnel)</span><br /><br />Both <span style="font-weight: bold;">ESP</span> and <span style="font-weight: bold;">AH</span> may be applied individually or in combination with each other to provide IPv4 and IPv6 security services. Both supports two modes of use: <span style="font-weight: bold;">transport </span>mode and <span style="font-weight: bold;">tunnel </span>mode. In transport mode, <span style="font-weight: bold;">AH</span> and <span style="font-weight: bold;">ESP</span> provide protection primarily for next layer protocols; in tunnel mode, <span style="font-weight: bold;">AH</span> and <span style="font-weight: bold;">ESP</span> are applied to tunneled IP packets.<br /><br /><span style="font-weight: bold;">==>Transport:</span> only the payload (without IP header) of the IP packet is encrypted (<span style="font-weight: bold;">ESP</span>) and/or authenticated (<span style="font-weight: bold;">ESP</span> or <span style="font-weight: bold;">AH</span>) before (re)transmission. This is the default mode in <span style="font-weight: bold;">3GPP IMS</span> context (Both UE and P-CSCF).<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://openipsec.googlecode.com/svn/trunk/screenshots/ah_transport_ipv4.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 481px; height: 103px;" src="http://openipsec.googlecode.com/svn/trunk/screenshots/ah_transport_ipv4.PNG" alt="" border="0" /></a><span style="font-weight: bold;">=>Tunnel:</span> both the IP header and the payload are encrypted (<span style="font-weight: bold;">ESP</span>) and/or authenticated (<span style="font-weight: bold;">ESP</span> or <span style="font-weight: bold;">AH</span>) before (re)transmission. It is used to create <span style="font-weight: bold;">V</span>irtual <span style="font-weight: bold;">P</span>rivate <span style="font-weight: bold;">N</span>etworks (<span style="font-weight: bold;">VPN</span>).<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://openipsec.googlecode.com/svn/trunk/screenshots/ah_tunel_ipv4.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 581px; height: 105px;" src="http://openipsec.googlecode.com/svn/trunk/screenshots/ah_tunel_ipv4.PNG" alt="" border="0" /></a><span style="color: rgb(204, 0, 0);font-size:180%;" ><span style="font-weight: bold;">2. OpenIPSec Framework</span></span><br /><br /><a href="http://code.google.com/p/openipsec/">OpenIPSec</a> is an open source IPSec Framework for Windows XP/Vista/Blackcomb/CE. The Framework will include an API for software development, command line tools, open source code (GPLv3) and documentation.<br />Development is done from scratch and all dependent projects are my own projects (To ease bug fix; release a soft 100% free and open source). This project depends on <a href="http://code.google.com/p/openipsec/">OpenSec</a> and <a href="http://code.google.com/p/libonid/">libonid</a>. The first, contains IPSec algorithms implementation and the second allows monitoring Network cards. These two projects are under development (<span style="color: rgb(255, 0, 0);">OpenSec: 90% done - libonid: 40% done</span>) and the source code is freely available for download. To ease adoption, command line tools (<span style="color: rgb(153, 153, 153); font-weight: bold;">setkey</span>, <span style="font-weight: bold; color: rgb(153, 153, 153);">spdadd</span>, <span style="font-weight: bold; color: rgb(153, 153, 153);">add </span>...) will have same name and options than those provided on Linux.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://openipsec.googlecode.com/svn/trunk/screenshots/ipsec.PNG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 663px; height: 683px;" src="http://openipsec.googlecode.com/svn/trunk/screenshots/ipsec.PNG" alt="" border="0" /></a><span style="color: rgb(255, 102, 0); font-weight: bold;">2.1 Standards</span><br /><br />* <span style="font-weight: bold;">RFC1825</span> - Security Architecture for the Internet Protocol (Obsoleted by: <span style="color: rgb(0, 0, 0); font-style: italic;">2401</span>)<br />* <span style="font-weight: bold;">RFC2401</span> - Security Architecture for the Internet Protocol (Obsoletes: <span style="font-style: italic;">1825</span> and Obsoleted by: <span style="font-style: italic;">4301</span> and Updated by: <span style="font-style: italic;">3168</span>)<br />* <span style="font-weight: bold;">RFC2402</span> - IP Authentication Header (Obsoleted by: <span style="font-style: italic;">4302</span>, <span style="font-style: italic;">4305</span> and Obsoletes: <span style="font-style: italic;">1826</span>)<br />* <span style="font-weight: bold;">RFC2410</span> - The NULL Encryption Algorithm and Its Use With IPsec<br />* <span style="font-weight: bold;">RFC2405</span> - The ESP DES-CBC Cipher Algorithm With Explicit IV<br />* <span style="font-weight: bold;">RFC2406</span> - IP Encapsulating Security Payload (ESP) (Obsoleted by: <span style="font-style: italic;">4303, 4305</span> and Obsoletes: <span style="font-style: italic;">1827</span>)<br />* <span style="font-weight: bold;">RFC2407 </span>- The Internet IP Security Domain of Interpretation for ISAKMP (Obsoleted by: 4306)<br />* <span style="font-weight: bold;">RFC2408</span> - Internet Security Association and Key Management Protocol (ISAKMP) (Obsoleted by: <span style="font-style: italic;">4306</span>)<br />* <span style="font-weight: bold;">RFC2409</span> - The Internet Key Exchange (IKE) (Obsoleted by: <span style="font-style: italic;">4306</span> and Updated by:<span style="font-style: italic;"> 4109</span>)<br />* <span style="font-weight: bold;">RFC2481</span> - A Proposal to add Explicit Congestion Notification (ECN) to IP (Obsoleted by: <span style="font-style: italic;">3168</span>)<br />* <span style="font-weight: bold;">RFC3168</span> - The Addition of Explicit Congestion Notification (ECN) to IP (Updates: <span style="font-style: italic;">2474</span>, <span style="font-style: italic;">2401, 793</span> and Obsoletes: <span style="font-style: italic;">2481</span>)<br />* <span style="font-weight: bold;">RFC3602</span> - The AES-CBC Cipher Algorithm and Its Use with IPsec<br />* <span style="font-weight: bold;">RFC4109</span> - Algorithms for Internet Key Exchange version 1 (IKEv1) (Updates: <span style="font-style: italic;">2409</span>)<br />* <span style="font-weight: bold;">RFC4301</span> - Security Architecture for the Internet Protocol<br />* <span style="font-weight: bold;">RFC4302</span> - IP Authentication Header<br />* <span style="font-weight: bold;">RFC4303</span> - IP Encapsulating Security Payload (ESP) (Obsoletes: <span style="font-style: italic;">2406</span>)<br />* <span style="font-weight: bold;">RFC4305</span> - Cryptographic Algorithm Implementation Requirements for Encapsulating Security Payload (ESP) and Authentication Header (AH) (Obsoleted by: <span style="font-style: italic;">4835</span> and Obsoletes: <span style="font-style: italic;">2404, 2406</span> )<br />* <span style="font-weight: bold;">RFC4306</span> - Internet Key Exchange (IKEv2) Protocol<br />* <span style="font-weight: bold;">RFC4307</span> - Cryptographic Algorithms for Use in the Internet Key Exchange Version 2 (IKEv2)<br />* <span style="font-weight: bold;">RFC4835</span> - Cryptographic Algorithm Implementation Requirements for Encapsulating Security Payload (ESP) and Authentication Header (AH) (Obsoletes: <span style="font-style: italic;">4305</span>)<br /><br /><span style="color: rgb(255, 0, 0);font-size:130%;" >/!\ <a href="http://code.google.com/p/opensec/">OpenSec</a> is now available for download at <a href="http://code.google.com/p/opensec/">http://code.google.com/p/opensec/</a></span><br /><br />References:<br />http://en.wikipedia.org/wiki/IPsec<input id="gwProxy" type="hidden"><!--Session data--><input onclick="jsCall();" id="jsProxy" type="hidden"><div id="refHTML"></div><input id="gwProxy" type="hidden"><!--Session data--><input onclick="jsCall();" id="jsProxy" type="hidden"><div id="refHTML"></div><input id="gwProxy" type="hidden"><!--Session data--><input onclick="jsCall();" id="jsProxy" type="hidden"><div id="refHTML"></div>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com0tag:blogger.com,1999:blog-4923730159992091107.post-19007417929820090282009-08-08T07:13:00.000-07:002009-08-14T22:20:55.867-07:00OpenSec Beta 0.3First beta version of <a href="http://code.google.com/p/opensec">OpenSec</a> is now available for download.<br />To download source code:<br />- go to <a href="http://code.google.com/p/opensec">http://code.google.com/p/opensec/</a> or<br />- use command line "<span style="color: rgb(255, 0, 0);">svn checkout http://opensec.googlecode.com/svn/trunk/ opensec-read-only</span>"<br /><br /><a href="http://code.google.com/p/opensec">OpenSec</a> is an Open-Source Security API. This project is part of <a href="http://code.google.com/p/openipsec/">OpenIPSec</a> project.<br />This API contains all mandatory or recommanded security algorithms needed to implement an IPSec Framework.<br /><br />Already supported algorithms: <span style="font-style: italic; font-weight: bold;">MD5, SHA-1, HMAC-MD5-96, HMAC-SHA-1-96, DES-ECB, DES-CBC, 3DES-ECB, 3DES-CBC, AES[128,192,256]-ECB, AES[128,192,256]-CBC </span><span style="font-style: italic;"></span>and<span style="font-style: italic; font-weight: bold;"> AES[128]-XCBC-MAC-96</span>.<br /><br />The source code includes a test application to see how these algorithms can be used.<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">Standards</span></span><br /><br />* RFC1321 - The MD5 Message-Digest Algorithm<br />* RFC1829 - The ESP DES-CBC Transform<br />* RFC1853 - IP in IP Tunneling<br />* RFC2104 - HMAC: Keyed-Hashing for Message Authentication<br />* RFC2402 - IP Authentication Header<br />* RFC2403 - The Use of HMAC-MD5-96 within ESP and AH<br />* RFC2404 - The Use of HMAC-SHA-1-96 within ESP and AH (Obsoleted by RFC4305)<br />* RFC2405 - The ESP DES-CBC Cipher Algorithm With Explicit IV<br />* RFC2406 - IP Encapsulating Security Payload (ESP) (Obsoleted by RFC4305)<br />* RFC2451 - The ESP CBC-Mode Cipher Algorithms<br />* RFC3174 - US Secure Hash Algorithm 1 (SHA1)<br />* RFC3566 - The AES-XCBC-MAC-96 Algorithm and Its Use With IPsec<br />* RFC3602 - The AES-CBC Cipher Algorithm and Its Use with IPsec<br />* RFC4305 - Cryptographic Algorithm Implementation Requirements for Encapsulating Security Payload (ESP) and Authentication Header (AH)<br /><br />* FIPS 197 - AES (Advanced Encryption Standard)<br />* FIPS-46-1/3 - DES and Triple DES (Data Encryption Standard)<br />* FIPS 81 - DES MODES OF OPERATION<br /><br />* RFC2144 - The CAST-128 Encryption Algorithm<br /><br />* RFC2202 - Test Cases for HMAC-MD5 and HMAC-SHA-1<input id="gwProxy" type="hidden"><!--Session data--><input onclick="jsCall();" id="jsProxy" type="hidden"><div id="refHTML"></div>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com0tag:blogger.com,1999:blog-4923730159992091107.post-19658249900277443742009-08-05T03:20:00.000-07:002010-07-28T13:57:06.783-07:00Google Android NDKWeeks ago, Google announced the first public release of Android NDK.<br /><br />I was so excited because the IMS Client I'm developing is written in pure C/C++ (Only Java was supported).<br />Before Android NDK, I have looked at Google's Android SDK and I found that they are using non-standard JVM. This mean that applications developed using J2ME can't run on Android devices. Thanks to <a href="http://en.wikipedia.org/wiki/Dalvik_virtual_machine">Dalvik virtual machine</a>.<br />It was clear that I won't rewrite xxx thousand lines of code for Android mobile devices which represent less than 1 percent of all mobile devices.<br />It's amazing to think that Android OS will gain momentum without compliant embedded JVM. <span style="font-weight: bold;"><span style="color: rgb(255, 102, 0);">First deception</span>.</span><br /><br />Because performance is critical for us and we don't have time and money to rewrite an application which will only run on Android devices, we decided to wait for the Android NDK.<br /><br />The first release of Android NDK only comes with these native libraries:<br /># libc (C library)<br /># libm (math library)<br /># libz (Zlib compression)<br /># liblog (Android logging)<br /><br />This mean that you don't have:<br /># STL support (string, list, map, queue, ....)<br /># C++ exceptions handling<br /># Threading support<br /># Cryptography support<br /># Secure sockets/transport (SSL, TLS, S/MIME, ...)<br /># Classes to access the system resources (webcam, soundcard, drivers, ...)<br /># .... to be continued<br /><br />Of course, you must use JNI if you want to have access to the native libraries. I let you imagine about performance ...<br /><span style="font-weight: bold;"><span style="color: rgb(255, 102, 0);">Second deception</span>. </span><input id="gwProxy" type="hidden"><!--Session data--><input onclick="jsCall();" id="jsProxy" type="hidden"><div id="refHTML"></div>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com0tag:blogger.com,1999:blog-4923730159992091107.post-17621959909580913992009-07-21T05:35:00.000-07:002009-07-21T05:52:57.281-07:00Mercuro with MMSSupport for <a href="http://en.wikipedia.org/wiki/Multimedia_Messaging_Service">MMS (Multimedia Messaging Service)</a> messaging has been added in the last release of <a href="http://www.mercuro.net/">Mercuro IMS Client</a>.<br /><a href="http://en.wikipedia.org/wiki/Multimedia_Messaging_Service">MMS</a> messages are sent over the network using MSRP/SMIL to one or multiple contacts (using conference factory).<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/__mlTA1EY_0c/SmW6At4cNtI/AAAAAAAAACs/-QZ0Dw_auS8/s1600-h/MMS.bmp"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 327px; height: 400px;" src="http://2.bp.blogspot.com/__mlTA1EY_0c/SmW6At4cNtI/AAAAAAAAACs/-QZ0Dw_auS8/s400/MMS.bmp" alt="" id="BLOGGER_PHOTO_ID_5360895452933535442" border="0" /></a>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com1tag:blogger.com,1999:blog-4923730159992091107.post-84131464925706384702009-06-19T04:00:00.004-07:002009-07-03T08:19:40.508-07:00libSigComp Beta 0.2<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/__mlTA1EY_0c/SkI6S5Rk9wI/AAAAAAAAACk/MwAw_wCrses/s1600-h/logo_sigcomp.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 74px; height: 55px;" src="http://4.bp.blogspot.com/__mlTA1EY_0c/SkI6S5Rk9wI/AAAAAAAAACk/MwAw_wCrses/s320/logo_sigcomp.jpg" alt="" id="BLOGGER_PHOTO_ID_5350903403556173570" border="0" /></a>First beta version of <a href="http://code.google.com/p/libsigcomp/">libSigComp</a> is now available for download.<br />To download source code:<br />- go to <a href="http://code.google.com/p/libsigcomp">http://code.google.com/p/libsigcomp</a> or<br />- use command line <tt id="checkoutcmd">"<span style="color: rgb(255, 102, 0);">svn checkout </span><strong style="color: rgb(255, 102, 0);"><em>http</em></strong><span style="color: rgb(255, 102, 0);">://libsigcomp.googlecode.com/svn/trunk/ libsigcomp-read-only</span>"<br /></tt><br /><span style="font-size:130%;"><tt id="checkoutcmd"><span style="font-weight: bold;">Released under </span><a style="font-weight: bold;" href="http://www.gnu.org/copyleft/lesser.html">LGPL</a><span style="font-weight: bold;"><a href="http://www.gnu.org/copyleft/lesser.html">v3</a></span></tt></span>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com0tag:blogger.com,1999:blog-4923730159992091107.post-49437185807220709842009-05-25T16:26:00.000-07:002009-07-03T08:20:16.215-07:00libSigComp: THE Open-Source SigComp framework<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/__mlTA1EY_0c/SkI6Dt084sI/AAAAAAAAACc/Ah06MmK5f3I/s1600-h/logo_sigcomp.jpg"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 74px; height: 55px;" src="http://3.bp.blogspot.com/__mlTA1EY_0c/SkI6Dt084sI/AAAAAAAAACc/Ah06MmK5f3I/s320/logo_sigcomp.jpg" alt="" id="BLOGGER_PHOTO_ID_5350903142785278658" border="0" /></a><meta equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CUsers%5CALYBA%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml> <w:worddocument> <w:view>Normal</w:View> <w:zoom>0</w:Zoom> <w:punctuationkerning/> <w:validateagainstschemas/> <w:saveifxmlinvalid>false</w:SaveIfXMLInvalid> <w:ignoremixedcontent>false</w:IgnoreMixedContent> <w:alwaysshowplaceholdertext>false</w:AlwaysShowPlaceholderText> <w:compatibility> <w:breakwrappedtables/> <w:snaptogridincell/> <w:wraptextwithpunct/> <w:useasianbreakrules/> <w:dontgrowautofit/> </w:Compatibility> <w:browserlevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:latentstyles deflockedstate="false" latentstylecount="156"> </w:LatentStyles> </xml><![endif]--><style> <!-- /* Font Definitions */ @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso-font-charset:2; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:0 268435456 0 0 -2147483648 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink {color:blue; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {color:purple; text-decoration:underline; text-underline:single;} @page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:1018116131; mso-list-type:hybrid; mso-list-template-ids:1291481242 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;} @list l0:level1 {mso-level-start-at:0; mso-level-number-format:bullet; mso-level-text:; mso-level-tab-stop:.5in; mso-level-number-position:left; text-indent:-.25in; font-family:Symbol; mso-fareast-font-family:"Times New Roman"; mso-bidi-font-family:"Times New Roman";} ol {margin-bottom:0in;} ul {margin-bottom:0in;} --> </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Tableau Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--> <p class="MsoNormal" style="text-align: justify;">I’m writing today to announce the launch of <a href="http://code.google.com/p/libsigcomp/">libSigComp</a>, an Open-Source SigComp Framework. This project is intended to develop a complete and compliant SigComp Framework to speed-up SigComp integration in Open-Source IMS projects.</p><p class="MsoNormal" style="text-align: justify;">
<br /></p> <p class="MsoNormal" style="text-align: justify;"><o:p> </o:p></p> <p class="MsoNormal" style="text-align: justify;">As many operators have begun to commercially deploy IMS, the relevance of using SigComp to lower bandwidth usage will come quickly. In my own opinion I think that most operators (especially those using RCS) will question how to reduce SIP signaling (registration, billing, presence, messaging …) bandwidth usage (who will pay bits?).</p> <p class="MsoNormal" style="text-align: justify;">These questions will especially concern using SIP (or all other text-based protocols) in wireless handsets as part of 2.5G and 3G cellular networks.</p><p class="MsoNormal" style="text-align: justify;">
<br /></p> <p class="MsoNormal" style="text-align: justify;"><o:p> </o:p></p> <p class="MsoNormal" style="text-align: justify;">SigComp stands for Signaling Compression and has been defined in RFC 3320 by Internet Engineering Task Force (IETF) ROHC working group. </p> <p class="MsoNormal" style="text-align: justify;"><o:p> </o:p></p> <p class="MsoNormal" style="text-align: justify;">Many application protocols used for multimedia communications are text-based and engineered for bandwidth rich links.<span style=""> </span>As a result the messages have not been optimized in terms of size.<span style=""> </span>For example, typical IMS/SIP messages range from a few hundred bytes up to two thousand bytes or more. For this reason, SigComp is a mandatory part of 3GPP IMS.</p> <p class="MsoNormal" style="text-align: justify;"><o:p> </o:p></p> <p class="MsoNormal" style="text-align: justify;">SigComp could also be useful for RCS (Rich Communication Suite) networks because of the size of the SIP packets (more than three thousand bytes for presence publication). Using SigComp in IMS/RCS context will reduce the round-trip over slow radio links.</p><p class="MsoNormal" style="text-align: justify;">
<br /></p> <p class="MsoNormal" style="text-align: justify;"><o:p> </o:p></p> <p class="MsoNormal" style="text-align: justify;">The goal of this project is to provide a SigComp framework which:</p> <p class="MsoNormal" style="text-align: justify;"><o:p> </o:p></p> <p class="MsoNormal" style="text-align: justify;"><i>- Could be used as an external API or Framework<o:p></o:p></i></p> <p class="MsoNormal" style="text-align: justify;"><i>- Highly portable (Coded in C/C++ without any external dependencies)<o:p></o:p></i></p> <p class="MsoNormal" style="text-align: justify;"><i>- Easily configurable (memory usage, priorities in static dictionaries, stateful/stateless modes, dynamic/static/shared compression types …)<o:p></o:p></i></p> <p class="MsoNormal" style="text-align: justify;"><i>- Easy to integrate with any existing SIP/IMS stack, Proxy-CSCF, PoC client …<o:p></o:p></i></p> <p class="MsoNormal" style="text-align: justify;"><i>- Allow to easily plug your own compressor (DEFLATE –RFC 1951- will be the default)<o:p></o:p></i></p> <p class="MsoNormal" style="text-align: justify;"><i><o:p> </o:p></i></p> <p class="MsoNormal" style="text-align: justify;"><i>- Robust<o:p></o:p></i></p> <p class="MsoNormal" style="text-align: justify;"><i>- Efficiently run on mobile handsets (small footprint)<o:p></o:p></i></p> <p class="MsoNormal" style="text-align: justify;"><i>- Use small memory (UDVM decompression)<o:p></o:p></i></p> <p class="MsoNormal" style="text-align: justify;"><i>- Run fast without high CPU usage</i></p><p class="MsoNormal" style="text-align: justify;">
<br /><i><o:p></o:p></i></p> <p class="MsoNormal" style="text-align: justify;"><o:p> </o:p></p> <p class="MsoNormal" style="text-align: justify;">COMPLIANCE:</p>
<br /><p class="MsoNormal" style="text-align: justify;"><o:p> </o:p></p> <p class="MsoNormal" style="text-align: justify;"><a href="http://www.ietf.org/rfc/rfc3320.txt">RFC 3320</a>: Signaling Compression (SigComp)</p> <p class="MsoNormal" style="text-align: justify;"><a href="http://www.ietf.org/rfc/rfc3321.txt">RFC 3321</a>: Signaling Compression (SigComp) - Extended Operations</p> <p class="MsoNormal" style="text-align: justify;"><a href="http://www.ietf.org/rfc/rfc4464.txt">RFC 4464</a>: Signaling Compression (SigComp) Users' Guide</p> <p class="MsoNormal" style="text-align: justify;"><a href="http://www.ietf.org/rfc/rfc4465.txt">RFC 4465</a>: Signaling Compression (SigComp) Torture Tests</p> <p class="MsoNormal" style="text-align: justify;"><a href="http://www.ietf.org/rfc/rfc4077.txt">RFC 4077</a>: A Negative Acknowledgement Mechanism for Signaling Compression</p> <p class="MsoNormal" style="text-align: justify;"><a href="http://www.ietf.org/rfc/rfc3485.txt">RFC 3485</a>: The Session Initiation Protocol (SIP) and Session Description Protocol</p> <p class="MsoNormal" style="text-align: justify;"><span style=""> </span>(SDP) Static Dictionary for Signaling Compression (SigComp)</p> <p class="MsoNormal" style="text-align: justify;"><a href="http://www.ietf.org/rfc/rfc5112.txt">RFC 5112</a>: The Presence-Specific Static Dictionary for Signaling Compression (Sigcomp)</p> <p class="MsoNormal" style="text-align: justify;"><a href="http://www.ietf.org/rfc/rfc1951.txt">RFC 1951</a>: DEFLATE Compressed Data Format Specification version</p> <p class="MsoNormal" style="text-align: justify;"><a href="http://www.3gpp.org/ftp/Specs/html-info/23979.htm">3GPP TR23.979 Annex C</a>: Required SigComp performance</p><p class="MsoNormal" style="text-align: justify;">
<br /></p><p class="MsoNormal" style="text-align: justify; font-weight: bold;"><span style="font-size:130%;"><tt id="checkoutcmd"><span>Released under </span><a href="http://www.gnu.org/copyleft/lesser.html">LGPL</a><span><a href="http://www.gnu.org/copyleft/lesser.html">v3</a></span></tt></span></p><p class="MsoNormal" style="text-align: justify;">
<br /></p> <p class="MsoNormal" style="text-align: justify;"><o:p> </o:p></p> <p class="MsoNormal" style="text-align: justify;">MORE INFORMATION:</p><p class="MsoNormal" style="text-align: justify;">
<br /></p> <p class="MsoNormal" style="text-align: justify;"><o:p> </o:p></p> <ul style="margin-top: 0in;" type="disc"><li class="MsoNormal" style="text-align: justify;">To have feedbacks or if you are interested for IOTs don’t hesitate to contact me at diopmamadou{at yahoo}dot fr. </li><li class="MsoNormal" style="text-align: justify;"><a href="http://code.google.com/p/libsigcomp/">libSigComp</a> homepage: <a href="http://code.google.com/p/libsigcomp/">http://code.google.com/p/libsigcomp/</a></li></ul><span style="font-family: monospace;"><span style="font-weight: bold;"></span></span> Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com5tag:blogger.com,1999:blog-4923730159992091107.post-3841671519478197612009-03-08T18:03:00.000-07:002009-06-04T07:06:40.958-07:00GSMA Rich Communication Suite Experience<div style="text-align: center;"><span style="font-size:180%;"><span style="color: rgb(255, 0, 0); font-weight: bold;font-family:arial;" >1. Presentation</span></span><br /></div><br />RCS (Rich Communication Suite) was a join industry effort aiming to speed up the evolution of mobile phone communication towards rich communication. The RCS initiative includes network operators, network and device vendors (Orange, Telecom Italia, Telefonica, TeliaSonera, Ericsson, Nokia Siemens Networks, Nokia, SK Telecom, Sony Ericsson and Samsung).<br /><br />The RCS is now managed by the GSM Association (GSMA). For more information about GSMA RCS program look at this dedicated website (<a href="http://www.gsmworld.com/rcs/programme.shtml">http://www.gsmw</a><a href="http://www.gsmworld.com/rcs/programme.shtml">orld.com/rcs/programme.shtml</a>)<br />The main goal of GSMA RCS is to provide a set of fully interoperable rich services to be used both in mobile and fixed network (Network/Access Convergence). These services will enrich call experience.<br />To be compliant with the GSMA RCS an IMS client MUST at least support these services:<br /><br />- Enhanced Address Book (defined by the OMA –Open Mobile Alliance-)<br />- Enhanced Messaging (OMA)<br />- Content Sharing (GSMA)<br />- File Transfer (OMA)<br /><br />An easy way to show how RCS work is to share with you RCS Experience using <a href="http://www.mercuro.net/">Mercuro IMS Client</a>. Mercuro is one of the most complete and compliant IMS/RCS client used today.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.mercuro.net/"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 66px;" src="http://4.bp.blogspot.com/__mlTA1EY_0c/SiANCTNEW9I/AAAAAAAAAB0/yQbfNVliM2Q/s200/mercuro_splash.PNG" alt="" id="BLOGGER_PHOTO_ID_5341283491227392978" border="0" /></a><br /><a href="http://www.mercuro.net/">Mercuro</a> is developed by <a href="http://www.inexbee.com/">Inexbee</a>.<br /><br /><br /><br /><div style="text-align: center;"><span style="font-size:180%;"><span style="font-weight: bold; color: rgb(255, 0, 0);">2. Enhanced Ad</span></span><span style="font-size:180%;"><span style="font-weight: bold; color: rgb(255, 0, 0);">dress Book</span></span><br /></div><br />This service (also called Enhanced Phonebook or EAB) is the main RCS Service and could be seen as an enriched buddy list with rich presence information. It should be possible to launch all other services (Image/Video Sharing, File transfer, SMS, MMS …) by selecting a contact from the phonebook.<br />The buddy list is expressed as XML documents and stored in various document repositories in the network where such documents can be located, accessed and manipulated (created, changed, deleted) by authorized principals.<br />Such documents are accessed and manipulated using IETF XML Configuration Access Protocol (XCAP).<br /><a href="http://www.mercuro.net/">Mercuro</a> could be seen as a XDM Client (XDMC) and the server (XDMS) as a HTTP origin server.<br /><a href="http://www.mercuro.net/">Mercuro</a> can automatically synchronize your EAB with your Terminal Address Book (TAB) to backup or restore your local buddies.<br />Synchronization between your TAB and the Network Address Book (NAB) must be done using a SyncML agent which will do translation from SyncML (OMA DS Synchronization) to OMA XDM.<br />Mercuro will support NAB synchronization in release 5.0.<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/__mlTA1EY_0c/SifUp4Qc0-I/AAAAAAAAACU/yBv-ZzIovQg/s1600-h/Mercuro.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 278px; height: 400px;" src="http://1.bp.blogspot.com/__mlTA1EY_0c/SifUp4Qc0-I/AAAAAAAAACU/yBv-ZzIovQg/s400/Mercuro.png" alt="" id="BLOGGER_PHOTO_ID_5343473298839491554" border="0" /></a><span style="font-style: italic;font-size:85%;" >Figure 1: Mercuro IMS Client EA</span><span style="font-style: italic;font-size:85%;" >B</span><br /></div><br /><span style="font-size:130%;"><span style="font-weight: bold;">2.1 XDM Storage</span></span><br /><br />All contacts are remotely stored in the XDM server. Remote storage allows the user to get his buddy list everywhere and makes Convergence easier (Same contacts on your PC, PDA or mobile phone even if roaming). A contact is stored with some mandatory information (id and display-name) and extended with social information (e.g. nickname, e-mail, free text, dynamic avatar, birthday, labels, favorite link …). To keep XML documents compliant and interoperable, all <a href="http://www.mercuro.net/">Mercuro</a> specific information are stored in separate documents.<br /><br /><a href="http://www.mercuro.net/">Mercuro</a> buddies are displayed with minimal information (nickname, msisdn …) and full profile is shown only when requested by the user. It is possible for the user to sort stored his contacts by nickname, e-mail, birthday …<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">2.2 History</span></span><br /><br />All communications history is saved (for each contact) on behalf of the user. Retrieving a particular saved entry from the UI can be performed using dynamic filters.<br /><br /><a href="http://www.mercuro.net/">Mercuro IMS Client</a> allows the user to start new session (Voice/Video call, Image Sharing, Messaging …) from the history by selecting an entry. You can sort history by date, communication type...<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">2.3 Groups</span><br /></span><br />Each contact could be part of one or many Groups (e.g. friends, family, biz …).<br /><br /><a href="http://www.mercuro.net/">Mercuro</a> buddies are displayed by Group. You can sort your buddies by group, name, sphere ….<br /><br /><span style="font-weight: bold;font-size:130%;" >2.4 Enhanced Address Book Presence</span><br /><br />This feature is mainly based on OMA SIMPLE Presence 1.1 which partially uses IETF presence data model (RFC 4479).<br />Mercuro offers the possibility to publish your status (online, offline, out to lunch, on the phone …), dynamic avatar, favorite link, notes, availability, willingness, mood or per service/device capabilities at any time. Dynamic avatar publication (Based on OMA Presence Content) is an important element of EABP and gives Mercuro the look and feel of some well-known VoIP software (Skype or Windows Live Messenger).<br />It is possible to retrieve presence information for each contact in the phonebook using subscription mechanism (asynchronous). Presence could be retrieved one by one or per list.<br /><br />All contacts are displayed with their presence information (all mentioned above). You have the possibility to sort your buddies by presence information (availability or willingness).<br />See below for capabilities indication.<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">2.5 Capabilities Enhanced Address Book</span></span><br /><br /><a href="http://www.mercuro.net/">Mercuro</a> can publish/store (persistent) end-user’s current communication capabilities and retrieve them later (new session). In the other side, capabilities information is retrieved for each contact using presence subscription. All contacts are displayed with their capabilities information. The list of capabilities to be shown to the user by Mercuro 4.x includes:<br /><br />Video Call (3G CS video call)<br />Image Sharing (PRD IR.79 Image Share Interoperability Specification 1.0)<br />Video Sharing (PRD IR.74 Video Share Interoperability Specification, 1.0)<br />File Transfer (OMA SIMPLE IM 1.0)<br />Session Mode Messaging (OMA Instant Messaging using SIMPLE, 1.0)<br /><br />Capabilities indication can be seen as “what type of communication I’m willing to accept”.<br /><span style="font-size:130%;"><br /><span style="font-weight: bold;">2.6 Presence authorization</span></span><br /><br />Once your presence information is published you can choose with who you want to share it. At any time you can choose to accept, block, ignore or revoke an existing (or incoming request) authorization. Rules could be managed per lists (black-hat, white-hat …) or per buddy.<br /><br />You can easily (UI) retrieve associated pres-rules (blocked, allowed …) for each contact.<br /><span style="font-size:130%;"><br /><span style="font-weight: bold;">2.7 Multimedia Element Integration</span></span><br /><br />It is possible to integrate multimedia elements such as photos, portrait icon, free text …<br /><br /><div style="text-align: center;"><span style="color: rgb(255, 0, 0);font-size:180%;" ><span style="font-weight: bold;font-family:arial;" >3. Enhanced Messaging</span></span><br /></div><br /><a href="http://www.mercuro.net/">Mercuro</a> supports 1-to-1 and Ad-hoc mode messaging (Instant Messaging using SIMPLE v1.0 chapter 4.3.1). Peer-to-peer IM Session is also supported (chap. 4.3.2).<br />These services are supported as part of GSMA RCS Phase 1.<br /><br />Mercuro also supports Pager mode (chap. 4.2.1) and Large Message Mode messaging (chap. 4.2.1).<br /><br />Group Messages (chap. 4.2.2), Deferred Messages (chap. 4.2.3) and Predefined session mode messaging (chap. 4.3.1) will be supported in release 5.0.<br /><br /><a href="http://www.mercuro.net/">Mercuro</a> (PC version) uses Pager Mode and Large Message Mode messaging to simulate SMS/MMS services.<br /><a href="http://www.mercuro.net/">Mercuro</a> uses OMA Final Delivery Reports (chap. 5.7) to simulate Negative/Positive Acknowledgement Mechanism for MMS messages.<br /><br />For 1-to-1 mode the caller or callee can add new participants at any time. The exchanged message can contain both text and/or multimedia content (SMIL, images, videos ...).<br /><br />End party activity (typing/composing) is indicated to all participants.<br /><br /><div style="text-align: center;"><span style="font-weight: bold;font-family:arial;font-size:180%;" ><span style="color: rgb(255, 0, 0);">4. Content Sharing</span></span><br /></div><br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">4.1 Image Sharing</span></span><br /><br />In 3GPP specifications Image sharing is defined as a service for sharing images between users during a mobile phone call (CS Call). These specifications were defined by the GSM Association for cellular network. For packet-only devices (e.g. Mercuro PC version) all these specifications do not apply. This mean that no CS voice call set up is required prior to sharing the images.<br />The Message Session Relay Protocol (MSRP), IETF RFC 4975, is mandatory for the Image Share Service. Image data information settings in SIP/SDP follow IETF File transfer RFC 5547 (previously [draft-ietf-mmusic-file-transfer-mech]).<br /><br />To see how this feature is used in <a href="http://www.mercuro.net/">Mercuro IMS Client</a> --> [<a href="http://imsclient.blogspot.com/2008/09/rcs-rich-communication-suite-image.html">http://imsclient.blogspot.com/2008/09/rcs-rich-communication-suite-image.html</a>].<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">4.2 Video Sharing</span><br /></span><br />This feature will be supported in release 5.0.<br /><br />GSMA Video Sharing is vendor independent and a Peer-To-Peer service and doesn’t require special/dedicated server.<br />A compliant RCS Client shall be able to share live Video (by sharing the camera capture) and sharing pre-recorded Video is a handset implementation option.<br />Video codec H.263-2000 profile 0 level 45 is mandatory (QCIF). To have better Video quality MPEG4 Visual Simple Profile 0b and H.264/AVC Baseline Profile Level 1b could be optionally used.<br /><br /><div style="text-align: center;"><span style="font-size:180%;"><span style="font-weight: bold; color: rgb(255, 0, 0);font-family:arial;" >5. File Transfer</span></span><br /></div><br />Many technical references are common to GSMA Image Sharing but this service allows exchanging different types of content (text, documents, SMIL, videos …).<br />Both end clients (caller/callee) can start file transfer session during an ongoing session (CS/PS call) or without having an ongoing session.<br />Only 1-to-1 file transfer feature is supported in GSMA RCS phase 1 and only a single file can be transferred per session. Only sending/receiving files are supported and requesting files is not part of the GSMA RCS phase 1 use cases.<br /><br /><div style="text-align: center;"><span style="color: rgb(255, 0, 0);font-size:180%;" ><span style="font-weight: bold;">6. Main IETF/OMA specifications (3GPP omitted)</span></span><br /></div><br /><span style="font-size:130%;"><span style="font-weight: bold;">6.1 Enhanced address Book</span></span><br /><br />[OMA-TS-XDM_Core-V1_1-20080627-A]<br />[OMA-WP-XDM_1_1_Implementation_Guidelines-20080627-C]<br />[OMA-TS-Presence-SIMPLE_Content_XDM-V1_0-20081223-C]<br />[OMA-TS-Presence_SIMPLE-V1_1-20080627-A]<br />[RFC 2387] + [RFC 3265] + [RFC 3857] + [RFC 3858] + [RFC 3863] + [RFC 3903] + [RFC 4662] + [RFC 4479] + [RFC 4480] + [RFC 4482] + [RFC 4483] + [RFC 4825] + [RFC 5025] + [RFC 5262] + [RFC 5264]<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">6.2 Enhanced Messaging (-minus those listed above)</span></span><br /><br />[OMA-TS-SIMPLE_IM-V1_0-20080903-C]<br />[RFC 3862] + [RFC 3891] + [RFC 3994] + [RFC 4028] + [RFC 4145] + [RFC 4353] + [RFC 4488] + [RFC 4575] + [RFC 4579] + [RFC 4975] + [RFC 5366]<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">6.3 Image Sharing</span></span><br /><br />[GSMA PRD IR.79 Image Share Interoperability Specification 1.0]<br />[RFC 4145] + [RFC 4575] + [RFC 4975] + [RFC 5547]<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">6.4 File Transfer</span></span><br /><br />[OMA-TS-SIMPLE_IM-V1_0-20080903-C]<br />[RFC 4145] + [RFC 4575] + [RFC 4975] + [RFC 5547]Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com3tag:blogger.com,1999:blog-4923730159992091107.post-52114134186758142252009-03-05T14:55:00.000-08:002009-03-08T18:02:38.657-07:00DSCP marking under Windows at application level<div id="preview"> <div style="display: block;" id="previewbody"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i.technet.microsoft.com/Bb742475.qoscom01%28en-us,TechNet.10%29.gif"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 301px; height: 290px;" src="http://i.technet.microsoft.com/Bb742475.qoscom01%28en-us,TechNet.10%29.gif" alt="" border="0" /></a>DSCP stands for <span style="font-weight: bold;">Differentiated Services Code Point </span>and is a field in the header of IP packets (v4 and v6) for packet classification purposes. As defined in the <a href="http://www.rfc-editor.org/rfc/rfc2474.txt">RFC 2474</a> <span style="font-style: italic;">Differentiated Services enhancements to the Internet protocol are intended to enable scalable service discrimination in the Internet without the need for per-flow state and signaling at every hop.</span><span style=";font-family:Verdana;font-size:85%;" ><span style=";font-family:Courier New;font-size:85%;" ><span style="font-family:'Courier New';"><br /></span></span></span><span style=";font-family:Verdana;font-size:85%;" ><span style=";font-family:Courier New;font-size:85%;" ><span style="font-family:'Courier New';"><br /></span></span></span><pre class="prettyprint"><a id="DS_fields"><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="lit">1</span><span class="pln"> </span><span class="lit">2</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> </span><span class="lit">5</span><span class="pln"> </span><span class="lit">6</span><span class="pln"> </span><span class="lit">7</span><span class="pln"><br /></span><span class="pun">+---+---+---+---+---+---+---+---+</span><span class="pln"><br /></span><span class="pun">|</span><span class="pln"> DSCP </span><span class="pun">|</span><span class="pln"> CU </span><span class="pun">|</span><span class="pln"><br /></span><span class="pun">+---+---+---+---+---+---+---+---+</span></a></pre><span style=";font-family:Verdana;font-size:85%;" ><span style=";font-family:Courier New;font-size:85%;" ><span style="font-family:'Courier New';"><span style="font-size:85%;">DSCP: Differentiated Services CodePoint (0x00-0x3F)<br />CU: Currently Unused</span></span></span></span><span style=";font-family:Verdana;font-size:85%;" ><span style=";font-family:Courier New;font-size:85%;" ><span style="font-family:'Courier New';"><br /><br /></span></span></span><span style="font-weight: bold;font-size:130%;" >Out-of-Scope</span><br /><br />- Using End-to-end QoS features in IMS context. However, you can read <a href="http://www.3gpp.org/ftp/Specs/html-info/23207.htm">3GPP TS 23.207</a> for more information.<br />- Using DSCP tagging under Windows at host level (Network administrators).<br /><br /><span style="font-size:130%;"><span style="font-weight: bold;">In-Scope</span></span><br /><br />- Using DSCP tagging under Windows at application level (General Information).<br /><br /><span style="color: rgb(51, 0, 153);font-size:130%;" ><span style="font-weight: bold;">The IP_TOS socket option</span></span><br /><br />By default, individual applications are not allowed to manipulate <a href="http://www.rfc-editor.org/rfc/rfc1349.txt">TOS</a> (Type Of Services) bits, because this can defeat system policy mechanisms. This is why using IP_TOS option on WINSOCK socket has no effect.<br /><br />Follow these steps to enable the IP_TOS option for the Winsock setsockopt function and the -v option for the ping utility on Windows 2000, Windows XP, or Windows Server 2003 (<a href="http://support.microsoft.com/kb/248611">Microsoft KB 248611</a>):<br /><br /><span style="font-size:85%;"><span style="font-style: italic;font-family:georgia;" >1. Start Registry Editor (Regedt32.exe).</span><br /><span style="font-style: italic;font-family:georgia;" > 2. Go to the following key:</span><br /><span style="font-style: italic;font-family:georgia;" > HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TcpIp\Parameters</span><br /><span style="font-style: italic;font-family:georgia;" > 3. If you are running Windows 2000, follow these steps:</span><br /><span style="font-style: italic;font-family:georgia;" > 1. On the Edit menu, click Add Value.</span><br /><span style="font-style: italic;font-family:georgia;" > 2. In the Value name box, type DisableUserTOSSetting.</span><br /><span style="font-style: italic;font-family:georgia;" > 3. In the Data Type list, click REG_DWORD, and then click OK.</span><br /><span style="font-style: italic;font-family:georgia;" > 4. In the Data box, type a value of 0 (zero), and then click OK.</span></span><br /><br />If you are running Windows XP or Windows Server 2003, follow these steps:<br /><br /><span style="font-style: italic;font-size:85%;" >1. On the Edit menu, point to New, and then click DWORD Value.<br />2. Type DisableUserTOSSetting as the entry name, and then press ENTER.</span><br /><br /> When you add this entry, the value is set to 0 (zero). Do not change the value.<br /><br /><span style="font-style: italic;font-size:85%;" >4. Quit Registry Editor, and then restart the computer.</span><br /><br /><span style="color: rgb(204, 0, 0);">This is not supported under Windows Vista</span><br /><br /><span style="color: rgb(51, 0, 153); font-weight: bold;font-size:130%;" >The Generic Quality of Service (GQoS) API</span><br /><br />It is also possible to specify DSCP values using GQoS API. This API is part of Microsoft Windows Sockets v2. Because the first method can break the security rules it is recommended to use GQoS. This API can also be used to provide feedback to your application regarding the status of the network.<br /><br />Good article on how to use this API --> http://msdn.microsoft.com/en-us/magazine/cc301862.aspx<br /><br /><span style="color: rgb(204, 0, 0);">Only IPv4 is supported</span><br /><br /><span style="font-size:130%;"><span style="color: rgb(51, 0, 153); font-weight: bold;">Quality Windows Audio/Video Experience (qWave)</span></span><br /><br />As define <a href="http://download.microsoft.com/download/5/b/5/5b5bec17-ea71-4653-9539-204a672f11cf/qWave.doc">here</a> qWave is a collection of QoS-related software modules that run on devices in the home network. qWave supports multiple A/V streams (real-time flows requiring QoS) and data streams (best-effort flows, such as e-mail) simultaneously over the home network, while providing a high-quality A/V user experience. qWave is targeted for home A/V scenarios and is disabled in other environments, such as an enterprise.<br /><br /><span style="color: rgb(204, 0, 0);">Only under Windows Vista</span><br /><br />Some references:<br /><br />http://www.rfc-editor.org/rfc/rfc2474.txt<br />http://www.rfc-editor.org/rfc/rfc1349.txt<br />http://www.microsoft.com/whdc/archive/qWave.mspx<br />http://technet.microsoft.com/en-us/library/bb742475.aspx<br />http://support.microsoft.com/kb/248611</div></div>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com1tag:blogger.com,1999:blog-4923730159992091107.post-50505319864280055782009-02-17T16:02:00.000-08:002009-02-18T02:53:45.543-08:00IMS Client for Windows Mobile<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/__mlTA1EY_0c/SZtRCSZXaNI/AAAAAAAAAA8/JF2I4d8IptM/s1600-h/imgico4.png"><img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 150px; height: 200px;" src="http://2.bp.blogspot.com/__mlTA1EY_0c/SZtRCSZXaNI/AAAAAAAAAA8/JF2I4d8IptM/s200/imgico4.png" alt="" id="BLOGGER_PHOTO_ID_5303922085898709202" border="0" /></a>
<br /><meta equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CUsers%5CALYBA%7E1%5CAppData%5CLocal%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml> <w:worddocument> <w:view>Normal</w:View> <w:zoom>0</w:Zoom> <w:punctuationkerning/> <w:validateagainstschemas/> <w:saveifxmlinvalid>false</w:SaveIfXMLInvalid> <w:ignoremixedcontent>false</w:IgnoreMixedContent> <w:alwaysshowplaceholdertext>false</w:AlwaysShowPlaceholderText> <w:compatibility> <w:breakwrappedtables/> <w:snaptogridincell/> <w:wraptextwithpunct/> <w:useasianbreakrules/> <w:dontgrowautofit/> </w:Compatibility> <w:browserlevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:latentstyles deflockedstate="false" latentstylecount="156"> </w:LatentStyles> </xml><![endif]--><style> <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} @page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Tableau Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0in 5.4pt 0in 5.4pt; mso-para-margin:0in; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--> <p class="MsoNormal">After the success of <a href="http://www.mercuro.net/">Mercuro IMS Client</a> on Windows XP/Vista, Inexbee has launched <a href="http://www.mercuro.net/">Mercuro Pocket</a>.</p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal"><a href="http://www.mercuro.net/">Mercuro Pocket</a> is fully compliant with main 3GPP/IETF specifications and can be used to make voice calls over wireless connection (Both IPv4 and IPv6 networks are supported).</p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">This IMS client includes OMA/IETF XDM features that make possible to store your buddy list on a remote server with presence information using XCAP protocol.</p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">Inexbee has developed a special mechanism that allows routing all IMS/SIP calls through the earpiece to avoid poor audio quality if needed (HTC, BenQ, SAMSUNG …). </p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal">GSMA Image Sharing and Video Sharing features are under development and will be released soon.</p> <p class="MsoNormal"><o:p> </o:p></p> <p class="MsoNormal"><a href="http://www.mercuro.net/">Mercuro Pocke</a>t can be used as a normal SIP /VoIP client and is now available for download at <a href="http://www.mercuro.net/">http://www.mercuro.net</a>.</p><p class="MsoNormal">
<br /></p><p class="MsoNormal">
<br /></p> Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com0tag:blogger.com,1999:blog-4923730159992091107.post-15307757582123302112009-02-02T10:01:00.000-08:002009-02-02T10:10:42.936-08:00Commercial version of Mercuro IMS Client is now available<table width="780" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td colspan="3"><img alt="" src="http://www.mercuro.net/images/emailtemplate/header_mail.png" send="true" width="780" border="0" height="69" /></td></tr> <tr> <td colspan="3"><img alt="" src="http://www.mercuro.net/images/emailtemplate/banner_email.png" send="true" width="780" border="0" height="247" /></td></tr><!-- Bloc head start --> <tr> <td valign="top" width="24" background="http://www.mercuro.net/images/emailtemplate/repeat_left.png"><br /></td> <td valign="top" width="732" align="left" bg style="color:#ffffff;"><!-- Bloc head end --> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td width="5%" height="1"><br /></td> <td width="90%" bgcolor="#cccccc" height="1"><br /></td> <td width="5%" height="1"><br /></td></tr></tbody></table> <p style="padding: 5px; font-size: 11pt; color: rgb(54, 54, 54); text-align: justify;">Inexbee’s Mercuro IMS Client is the result of more than four years of expertise in telecom and convergence software development. Today, the Mercuro IMS Client is the most complete and 3GPP/IMS/RCS compliant softphone available. After several months of live testing and thanks to the active contribution of many of you, the beta version is withdrawn to give birth to a Bronze, Silver and Gold edition on Windows and Windows Mobile. </p> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td width="5%" height="1"><br /></td> <td width="90%" bgcolor="#cccccc" height="1"><br /></td> <td width="5%" height="1"><br /></td></tr></tbody></table><!-- Bloc foot start --></td> <td valign="top" width="24" background="http://www.mercuro.net/images/emailtemplate/repeat_right.png"><br /></td></tr><!-- Bloc foot end --><!-- Bloc head start --> <tr> <td valign="top" width="24" background="http://www.mercuro.net/images/emailtemplate/repeat_left.png"><br /></td> <td valign="top" width="732" align="left" bgcolor="#ffffff"><!-- Bloc head end --><br /><br /><table border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td><a style="color: rgb(153, 0, 0); text-decoration: underline;" href="http://www.mercuro.net/download.php" target="_blank"><img alt="" src="http://www.mercuro.net/images/emailtemplate/mercuro_bronze.png" send="true" width="130" border="0" height="163" /></a> </td> <td> <p style="padding: 5px; text-align: justify;"><strong style="color: rgb(51, 51, 51);font-size:20pt;">Mercuro <span style="color: rgb(153, 0, 0);">Bronze</span> Edition</strong></p> <p face="Verdana,Helvetica,Arial,sans-serif" size="10pt" style="font-weight: normal; color: rgb(106, 106, 106); line-height: 20px; text-align: justify;">Inexbee is providing a free version of the Mercuro IMS Client. The Bronze edition is the entry level version that offers all of the most common features of IMS. It is perfect to begin IMS testing and deployment.<br /><br />The Mercuro Bronze edition is downloadable for free directly from our website: <a style="color: rgb(153, 0, 0); text-decoration: underline;" href="http://www.mercuro.net/" target="_blank">www.mercuro.net</a><br /><br /></p></td></tr></tbody></table> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td width="5%" height="1"><br /></td> <td width="90%" bgcolor="#cccccc" height="1"><br /></td> <td width="5%" height="1"><br /></td></tr></tbody></table><!-- Bloc foot start --></td> <td valign="top" width="24" background="http://www.mercuro.net/images/emailtemplate/repeat_right.png"><br /></td></tr><!-- Bloc foot end --><!-- Bloc foot start --> <tr> <td valign="top" width="24" background="http://www.mercuro.net/images/emailtemplate/repeat_right.png"><br /></td></tr><!-- Bloc foot end --><!-- Bloc head start --> <tr> <td valign="top" width="24" background="http://www.mercuro.net/images/emailtemplate/repeat_left.png"><br /></td> <td valign="top" width="732" align="left" bgcolor="#ffffff"><!-- Bloc head end --><br /><table border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td><a style="color: rgb(153, 0, 0); text-decoration: underline;" href="http://www.mercuro.net/purchase.php" target="_blank"><img alt="" src="http://www.mercuro.net/images/emailtemplate/mercuro_silver.png" send="true" width="130" border="0" height="207" /></a> </td> <td> <p style="padding: 5px; text-align: justify;"><strong style="color: rgb(51, 51, 51);font-size:20pt;">Mercuro <span style="color: rgb(153, 0, 0);">Silver</span> Edition</strong><span style="color: rgb(102, 102, 102);font-size:11;" > + Mercuro Pocket (beta)</span><br /></p> <p style="font-weight: normal; font-size: 10pt; color: rgb(106, 106, 106); line-height: 20px; font-family: Verdana,Helvetica,Arial,sans-serif; text-align: justify;">The Mercuro IMS Client Silver edition is our most complete version of IMS Client. It includes all of the features of the Bronze edition. Additionaly, it is compliant with the latest security Networks and is carrying OMA XDMS support. It can be used in carrier-grade IMS environment.<br /><br /><span style="font-weight: bold; color: rgb(153, 0, 0);">Be among the first to buy the Mercuro Silver Edition and get the beta Mercuro Pocket Silver edition (for Windows Mobile) for free.</span><br /><br />You can buy it directly from our website: <a style="color: rgb(153, 0, 0); text-decoration: underline;" href="http://www.mercuro.net/" target="_blank">www.mercuro.net</a><br /><br /></p></td></tr></tbody></table> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td width="5%" height="1"><br /></td> <td width="90%" bgcolor="#cccccc" height="1"><br /></td> <td width="5%" height="1"><br /></td></tr></tbody></table><!-- Bloc foot start --></td> <td valign="top" width="24" background="http://www.mercuro.net/images/emailtemplate/repeat_right.png"><br /></td></tr><!-- Bloc foot end --><!-- Bloc head start --> <tr> <td valign="top" width="24" background="http://www.mercuro.net/images/emailtemplate/repeat_left.png"><br /></td> <td valign="top" width="732" align="left" bgcolor="#ffffff"><!-- Bloc head end --><br /><table border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td><a style="color: rgb(153, 0, 0); text-decoration: underline;" href="http://www.mercuro.net/support.php" target="_blank"><img alt="" src="http://www.mercuro.net/images/emailtemplate/mercuro_gold.png" send="true" width="130" border="0" height="163" /></a> </td> <td> <p style="padding: 5px; text-align: justify;"><strong style="color: rgb(51, 51, 51);font-size:20pt;">Mercuro <span style="color: rgb(153, 0, 0);">Gold</span> Edition</strong><span style="color: rgb(102, 102, 102);font-size:11;" > (On Request)</span></p> <p style="margin: 0pt; padding: 0pt; font-weight: normal; font-size: 10pt; color: rgb(106, 106, 106); line-height: 20px; font-family: Verdana,Helvetica,Arial,sans-serif; text-align: justify;">Fully customizable, the Gold edition is available on request and is dedicated to large deployments and provides custom branding, QoS features and high quality codec.<br /><br />For further information please refer to: <a style="color: rgb(153, 0, 0); text-decoration: underline;" href="http://www.mercuro.net/" target="_blank">www.mercuro.net</a><br /><br /></p></td></tr></tbody></table><!-- Bloc foot start --></td> <td valign="top" width="24" background="http://www.mercuro.net/images/emailtemplate/repeat_right.png"><br /></td></tr><!-- Bloc foot end --><!-- Bloc head start --> <tr> <td valign="top" width="24" background="http://www.mercuro.net/images/emailtemplate/repeat_left.png"><br /></td> <td valign="top" width="732" align="left" bgcolor="#ffffff"><!-- Bloc head end --><br /><table style="padding: 0px;" bgcolor="#f0f0f0" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td valign="top"><a style="color: rgb(153, 0, 0); text-decoration: underline;" href="http://www.mercuro.net/index.php" target="_blank"><img alt="" src="http://www.mercuro.net/images/emailtemplate/mercuro_wing.png" send="true" width="56" align="top" border="0" height="56" /></a></td> <td> <p style="padding: 5px; text-align: justify;"><strong style="font-size: 11pt; color: rgb(102, 102, 102);">About Mercuro</strong></p> <p style="font-weight: normal; font-size: 9pt; color: rgb(106, 106, 106); line-height: 20px; font-family: Verdana,Helvetica,Arial,sans-serif; background-color: rgb(245, 245, 245); text-align: justify;">Inexbee is a worldwide leader in software development for multimedia convergence and interoperability. Mercuro team is part of a large community of companies and independent engineers setting up the standards of the next Rich Communication Suite and bringing to life the concept of Multimedia Convergence Service.<br /><br />For further information please refer to: <a style="color: rgb(153, 0, 0); text-decoration: underline;" href="http://www.mercuro.net/" target="_blank">www.mercuro.net</a><br /><br /></p></td></tr></tbody></table><!-- Bloc foot start --></td> <td valign="top" width="24" background="http://www.mercuro.net/images/emailtemplate/repeat_right.png"><br /></td></tr><!-- Bloc foot end --><!-- Bloc head start --> <tr> <td valign="top" width="24" background="http://www.mercuro.net/images/emailtemplate/repeat_left.png"><br /></td> <td valign="top" width="732" align="left" bgcolor="#ffffff"><!-- Bloc head end --> <table style="padding: 0px;" align="center" border="0" cellpadding="0" cellspacing="0"> <tbody> <tr> <td> <p style="padding: 5px; text-align: justify;font-size:10pt;"><span style="color: rgb(51, 51, 51);">Copyright 2008 © <a style="color: rgb(153, 0, 0); text-decoration: underline;" href="http://www.inexbee.com/">Inexbee</a> - All Rights Reserved</span></p></td></tr></tbody></table><!-- Bloc foot start --></td> <td valign="top" width="24" background="http://www.mercuro.net/images/emailtemplate/repeat_right.png"><br /></td></tr><!-- Bloc foot end --> <tr> <td valign="top"><img alt="" src="http://www.mercuro.net/images/emailtemplate/corner_bottomleft.png" send="true" width="24" height="24" /> </td> <td valign="top" background="http://www.mercuro.net/images/emailtemplate/repeat_bottom.png"><br /></td> <td valign="top"><img alt="" src="http://www.mercuro.net/images/emailtemplate/corner_bottomright.png" send="true" width="24" height="24" /></td></tr></tbody></table>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com0tag:blogger.com,1999:blog-4923730159992091107.post-41211765762798820852008-12-31T16:14:00.000-08:002010-10-10T23:22:25.873-07:00IPSec using Security Agreement (in 3GPP R5)<o:p></o:p>In this post I will try to explain how security mechanisms are negotiated between an IMS Client and the Proxy CSCF (only SIP headers) and how to setup SAs using Linux IPSec tools.<br />The main purpose of Security agreement is to agree on which mechanisms, algorithms or security parameters to use.<br /><br />There are five main mechanisms used in VoIP networks:<br /><ol style="margin-top: 0in;" start="1" type="a"><li class="MsoNormal" style="text-align: justify;">digest</li><li class="MsoNormal" style="text-align: justify;">tls</li><li class="MsoNormal" style="text-align: justify;">ipsec-ike</li><li class="MsoNormal" style="text-align: justify;">ipsec-man </li><li class="MsoNormal" style="text-align: justify;">ipsec-3gpp</li></ol> <p class="MsoNormal" style="text-align: justify;">We will focus on 3GPP IPSec because the IMS makes it mandatory.</p> <p class="MsoNormal" style="text-align: justify;">The security mechanism to use is known after the negotiation between the IMS Client and the Proxy CSCF succeeds. This negotiation is performed during the IMS registration and authentication procedures.</p> <p class="MsoNormal" style="text-align: justify;">Three new SIP header fields have been defined, namely <b><u>Security-Client</u></b>,<b> <u>Security-Server</u> </b>and<b> <u>Security-Verify</u></b>.</p><p class="MsoNormal" style="text-align: justify;"><br /></p> <p class="MsoNormal" style="text-align: justify;"><b><span style="font-size:16;"><span style="font-size:130%;">Call Flow</span></span></b></p> <pre>IMS Client<span style=""> </span>P-CSCF<span style=""> </span>S-CSCF</pre><pre>|<span style=""> </span>|<span style=""> </span>|</pre><pre>|----(1)REGISTER---->|<span style=""> </span>|</pre><pre>|<span style=""> </span>|<span style=""> </span>|</pre><pre>|<span style=""> </span>|---(2)REGISTER--->|</pre><pre>|<span style=""> </span>|<span style=""> </span>|</pre><pre>|<span style=""> </span><span style=""> </span>|<-----(3) 401 ----|</pre><pre>|<span style=""> </span>|<span style=""> </span>|</pre><pre>|<----(4) 494/401----|<span style=""> </span>|</pre><pre>|<span style=""> </span>|<span style=""> </span>|</pre><pre>|<==IPSec in place==>|<span style=""> </span>|</pre><pre>|<span style=""> </span>|<span style=""> </span>|</pre><pre>|----(5)REGISTER---->|<span style=""> </span>|</pre><pre>|<span style=""> </span>|----(6)REGISTER-->|</pre><pre>|<span style=""> </span>|<span style=""> </span>|</pre><pre>|<span style=""> </span>|<---(7) 200 <st1:state st="on"><st1:place st="on">OK----</st1:place></st1:state>|</pre><pre>|<---(8) 200 <st1:state st="on"><st1:place st="on">OK------</st1:place></st1:state>|<span style=""> </span>|</pre><pre>|<span style=""> </span>|<span style=""> </span>|</pre> <p class="MsoNormal" style="text-align: justify;">In step (1) the IMS Client sends an unprotected registration request including the security-client header. The Client must indicate that it is able to negotiate security mechanism by adding “Require” and “Proxy-Require” headers. The security-client header includes two ports (client and server ports) that the client wants to negotiate with the proxy CSCF.</p> <p class="MsoNormal" style="text-align: justify;">In step (2) the Proxy CSCF forwards the request to the Serving CSCF.</p> <p class="MsoNormal" style="text-align: justify;">In step (3) the Serving CSCF (registrar) challenges the Proxy CSCF. The 401 response is sent to the Proxy CSCF (challenge parameters are under WWW-Authenticated header). The Serving CSCF must include the security-server header.</p> <p class="MsoNormal" style="text-align: justify;">In step (4) the Proxy CSCF forwards the 401/494 response to the IMS Client. <i>At this stage the Proxy CSCF opens the IPsec security association (SA) for the IMS Client. The IMS Client also setup a SA (this is a temporary SA).</i></p> <p class="MsoNormal" style="text-align: justify;">The lifetime of the created SA (between the IMS Client and the Proxy CSCF) is equal to the value of reg-await-auth timer.</p> <p class="MsoNormal" style="text-align: justify;">In step (5) the IMS Client sends a new registration (to the Proxy CSCF) request including its credentials and copies the content of security-server header to the security-verify header. Before forwarding the request to the Serving CSCF, the Proxy CSCF will check that the previous security-server header and the security-verify headers (added by the IMS Client) are the same. If these values are different, the Proxy CSCF sends an error message to the IMS Client and terminates the created SAs.</p> <p class="MsoNormal" style="text-align: justify;">In step (6) the Proxy CSCF forwards the request to the Serving CSCF.</p> <p class="MsoNormal" style="text-align: justify;">In step (7) the Serving CSCF authenticates the IMS Client, and responds with 200 OK.</p> <p class="MsoNormal" style="text-align: justify;">In step (8) the Proxy CSCF forwards the response to the IMS Client. At this step new SAs will be created. The temporary SAs will be destroyed (or not) by the Proxy CSCF.</p><br /><p class="MsoNormal" style="text-align: justify;"><b><span style="font-size:16;"><span style="font-size:130%;">Messages</span><o:p></o:p></span></b></p>(1)<br />REGISTER sip:pcscf.open-ims.test SIP/2.0<br />Security-Client: <span style="color: rgb(255, 0, 0);">ipsec-3gpp; alg=hmac-md5-96; spi-c=1111; spi-s=2222; port-c=5062; port-s=5064</span><br />Require: sec-agree<br />Proxy-Require: sec-agree<br /><br />(4)<br />SIP/2.0 [494 Security Agreement Required / 401 Unauthorized]<br />Security-Server: <span style="color: rgb(51, 0, 153);">ipsec-3gpp; q=0.1; alg=hmac-md5-96; spi-c=3333; spi-s=4444; port-c=5066; port-s=5068</span><br /><br />(5)<br />REGISTER sip:pcscf.open-ims.test SIP/2.0<br />Security-Client: <span style="color: rgb(255, 0, 0);">ipsec-3gpp; alg=hmac-md5-96; spi-c=1111; spi-s=2222; port-c=5062; port-s=5064</span><br />Security-Verify: <span style="color: rgb(51, 0, 153);">ipsec-3gpp; q=0.1; alg=hmac-md5-96; spi-c=3333; spi-s=4444; port-c=5066; port-s=5068</span><br />Require: sec-agree<br />Proxy-Require: sec-agree<br /><br />--> Captures done with <a href="http://www.mercuro.net/">Mercuro IMS Client.</a><br /><br /><b><span style="font-size:16;"><span style="font-size:130%;">Setting up SAs using Linux</span></span></b> <span style="font-weight: bold;font-size:130%;" >Tools</span><br /><br />Here we suppose that:<br />- We are using Ubuntu (Linux Kernel 2.6 + KAME-tools)<br />- the Proxy-CSCF address is '192.168.0.10' and <a href="http://www.mercuro.net/">Mercuro IMS Client</a> address is '192.168.0.11'<br />- for secure ports see above SIP capture<br />- protocol is esp<br />- algorithm is 'hmac-md5'<br />- encrypt-algorithm is 'des-ede3-cbc'<br />- mode is 'transport'<br />- confidentiality key is '123456789012123456789012' (see function <span style="font-weight: bold;">f2345</span> in 3GPP milenage algorithms)<br />- integrity key is '1234567890123456' (see function <span style="font-weight: bold;">f2345</span> in 3GPP milenage algorithms)<br /><br />1. Install the tools<br /><br /><div style="text-align: left;"><span style="font-size:85%;"><span style="font-family: lucida grande; font-style: italic; color: rgb(153, 0, 0);">sudo apt-get install ipsec-tools</span></span><br /><br />2. Edit /etc/ipsec-tools file and add the following script<br /><span style="font-style: italic; color: rgb(102, 0, 0);font-size:85%;" ><br />#Incoming Requests [US <- PC]</span><span style="font-style: italic;font-size:85%;" ><br /><span style="color: rgb(102, 0, 0);">spdadd 192.168.0.10/32[5066] 192.168.0.11/32[5064] udp -P in ipsec esp/transport//require;</span><br /><span style="color: rgb(102, 0, 0);">add 192.168.0.10 192.168.0.11 esp 2222 -m transport -E des-ede3-cbc "123456789012123456789012" -A hmac-md5 "1234567890123456";</span><br /><br /></span><span style="font-style: italic; color: rgb(102, 0, 0);font-size:85%;" >#</span><span style="font-style: italic; color: rgb(102, 0, 0);font-size:85%;" >Incoming Replies [UC <- PS]</span><span style="font-style: italic;font-size:85%;" ><br /><span style="color: rgb(102, 0, 0);">spdadd 192.168.0.10/32[5068] 192.168.0.11/32[5062] udp -P in ipsec esp/transport//require;</span><br /><span style="color: rgb(102, 0, 0);">add 192.168.0.10 192.168.0.11 esp 1111 -m transport -E des-ede3-cbc "123456789012123456789012" -A hmac-md5 "1234567890123456";</span><br /><br /></span><span style="font-style: italic; color: rgb(102, 0, 0);font-size:85%;" >#</span><span style="font-style: italic; color: rgb(102, 0, 0);font-size:85%;" >Outgoing Requests [UC -> PS]</span><span style="font-style: italic;font-size:85%;" ><br /><span style="color: rgb(102, 0, 0);">spdadd 192.168.0.11/32[5062] 192.168.0.10/32[5068] udp -P out ipsec esp/transport//unique:1;</span><br /><span style="color: rgb(102, 0, 0);">add 192.168.0.11 192.168.0.10 esp 4444 -m transport -u 1 -E des-ede3-cbc "123456789012123456789012" -A hmac-md5 "1234567890123456";</span><br /><br /></span><span style="font-style: italic; color: rgb(102, 0, 0);font-size:85%;" >#</span><span style="font-style: italic; color: rgb(102, 0, 0);font-size:85%;" >Outgoing Replies [US -> PC]</span><span style="font-style: italic;font-size:85%;" ><br /><span style="color: rgb(102, 0, 0);">spdadd 192.168.0.11/32[5064] 192.168.0.10/32[5066] udp -P out ipsec esp/transport//unique:2;</span><br /><span style="color: rgb(102, 0, 0);">add 192.168.0.11 192.168.0.10 esp 3333 -m transport -u 2 -E des-ede3-cbc "123456789012123456789012" -A hmac-md5 "1234567890123456";</span></span><br /><br /></div>3. Run the script<br /><br /><span style="font-family: lucida grande; font-style: italic; color: rgb(102, 0, 0);font-size:85%;" >sudo /etc/init.d/setkey start</span><br /><br />The same can be done under Windows vista using <a href="http://www.microsoft.com/whdc/device/network/wfp.mspx">WFP(Windows Filtering Platform) API</a>. For more information on How IPSec (in IMS context) feature could be implemented under Windows you can contact Mercuro Team at <span style="font-style: italic;font-size:85%;" ><span style="font-weight: bold;">[tech dot mercuro -at- inexbee dot com]</span></span>.<br /><br />For more information visit:<br /><a href="http://www.mercuro.net/">http://www.mercuro.net</a><br /><a href="http://www.ietf.org/rfc/rfc3329.txt">http://www.ietf.org/rfc/rfc3329.txt</a><br /><a href="http://www.arib.or.jp/IMT-2000/V310Sep02/T63/Rel5/33/A33203-520.pdf">http://www.arib.or.jp/IMT-2000/V310Sep02/T63/Rel5/33/A33203-520.pdf</a><br /><a href="http://www.arib.or.jp/IMT-2000/V310Sep02/S3g/Rel5/24/24229-510.pdf">http://www.arib.or.jp/IMT-2000/V310Sep02/S3g/Rel5/24/24229-510.pdf</a><br /><a href="http://www.3gpp.org/FTP/TSG_SA/WG3_Security/TSGS3_24_Helsinki/Docs/PDF/S3-020385.pdf">http://www.3gpp.org/FTP/TSG_SA/WG3_Security/TSGS3_24_Helsinki/Docs/PDF/S3-020385.pdf</a>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com3tag:blogger.com,1999:blog-4923730159992091107.post-32022103899431685832008-11-08T15:32:00.000-08:002008-12-10T13:34:55.145-08:00Proxy and Service Route discovery in IMSIn this post I will try to explain how these two SIP extensions are used in IMS context and show differences between them.
<br />Service Route discovery is an important mechanism in IMS context. The Service Route discovery mechanism usage is explained in RFC 3608 and 3GPP TS 24.229 and Path extension in RFC 3327.
<br />
<br /><span style="font-style: italic; font-weight: bold;font-family:arial;font-size:180%;" >Syntax</span>
<br />
<br />Service-Route = "Service-Route" HCOLON sr-value *( COMMA sr-value)
<br />sr-value = name-addr *( SEMI rr-param )
<br />Path = "Path" HCOLON path-value *( COMMA path-value )
<br />path-value = name-addr *( SEMI rr-param )
<br />
<br /><span style="font-weight: bold; font-style: italic;font-size:180%;" >Usage</span>
<br />
<br /><meta equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cinexbee%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml> <w:worddocument> <w:view>Normal</w:View> <w:zoom>0</w:Zoom> <w:hyphenationzone>21</w:HyphenationZone> <w:punctuationkerning/> <w:validateagainstschemas/> <w:saveifxmlinvalid>false</w:SaveIfXMLInvalid> <w:ignoremixedcontent>false</w:IgnoreMixedContent> <w:alwaysshowplaceholdertext>false</w:AlwaysShowPlaceholderText> <w:compatibility> <w:breakwrappedtables/> <w:snaptogridincell/> <w:wraptextwithpunct/> <w:useasianbreakrules/> <w:dontgrowautofit/> </w:Compatibility> <w:browserlevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:latentstyles deflockedstate="false" latentstylecount="156"> </w:LatentStyles> </xml><![endif]--><style> <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman"; mso-ansi-language:EN-US;} pre {margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Courier New"; mso-fareast-font-family:"Times New Roman";} @page Section1 {size:612.0pt 792.0pt; margin:70.85pt 70.85pt 70.85pt 70.85pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Tableau Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--><pre><span style="" lang="EN-GB">Header field where proxy ACK BYE CAN INV OPT REG</span></pre><pre><span style="" lang="EN-GB">___________________________________________________________</span></pre><pre><span style="" lang="EN-GB">Path R ar - - - - - o</span></pre><pre><span style="" lang="EN-GB">Path 2xx - - - - - - o</span></pre><pre><span style="" lang="EN-GB">Service-Route 2xx ar - - - - - o</span></pre>
<br />The Service-Route header is inserted by the S-CSCF in the 200 (OK) responses to SIP REGISTER requests. The Service-Route header contains the S-CSCF SIP URI with a character string indicating the request type (mobile-originating or mobile-terminating). It is stored by the P-CSCF and associated to the registered public user identity. The UE MAY also store the value of the Service-Route header field in an association with the address-of-record for which the REGISTER transaction had registered a contact.
<br />For example: <sip:orig@scscf.v4.ims.test:6060;lr>.
<br />
<br />Support for the Path header extension MAY be indicated by a UA by including the option-tag "path" in a Supported header field. The Path header is inserted by the P-CSCF while forwarding REGISTER requests and contains its own SIP URI. This value is inserted by the P-CSCF to inform the S-CSCF where all terminating requests MUST be routed.
<br />For example: <sip:term@pcscf.v4.ims.test:4060;lr>.
<br />Both headers are only applicable to the 200 (OK) response of REGISTER requests and shall be supported by the P-CSCF (but shall not be supported by the MGCF or the BGCF).
<br />
<br /><span style="font-style: italic;font-size:180%;" ><span style="font-weight: bold;">Call Flow</span></span>
<br />
<br />
<br /><meta equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cinexbee%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml> <w:worddocument> <w:view>Normal</w:View> <w:zoom>0</w:Zoom> <w:hyphenationzone>21</w:HyphenationZone> <w:punctuationkerning/> <w:validateagainstschemas/> <w:saveifxmlinvalid>false</w:SaveIfXMLInvalid> <w:ignoremixedcontent>false</w:IgnoreMixedContent> <w:alwaysshowplaceholdertext>false</w:AlwaysShowPlaceholderText> <w:compatibility> <w:breakwrappedtables/> <w:snaptogridincell/> <w:wraptextwithpunct/> <w:useasianbreakrules/> <w:dontgrowautofit/> </w:Compatibility> <w:browserlevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:latentstyles deflockedstate="false" latentstylecount="156"> </w:LatentStyles> </xml><![endif]--><style> <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman"; mso-ansi-language:EN-US;} pre {margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Courier New"; mso-fareast-font-family:"Times New Roman";} @page Section1 {size:612.0pt 792.0pt; margin:70.85pt 70.85pt 70.85pt 70.85pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Tableau Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--><pre><span style="" lang="EN-GB">IMS Client P-CSCF ICSCF S-CSCF</span></pre><pre><span style="" lang="EN-GB">| | | |</span></pre><pre><span style="" lang="EN-GB">|----(1)REGISTER---->| | |</span></pre><pre><span style="" lang="EN-GB">| | | |</span></pre><pre><span style="" lang="EN-GB">|<----(2)401---------| | |</span></pre><pre><span style="" lang="EN-GB">| | | |</span></pre><pre><span style="" lang="EN-GB">|----(3)REGISTER---->| | |</span></pre><pre><span style="" lang="EN-GB">| | | |</span></pre><pre><span style="" lang="EN-GB">|<----(4)200---------| | |</span></pre><pre><span style="" lang="EN-GB">| | | |</span></pre><pre><span style="" lang="EN-GB">|----(5)SUBSCRIBE--->| | |</span></pre><pre><span style="" lang="EN-GB">| | | |</span></pre><pre><span style="" lang="EN-GB">|<----(6)200---------| | |</span></pre><pre><span style="" lang="EN-GB">| | | |</span></pre><pre><span style="" lang="EN-GB">|----(7)REGISTER---->| | |</span></pre><pre><span style="" lang="EN-GB">| | | |</span></pre><pre><span style="" lang="EN-GB">|<----(8)200---------| | |</span></pre><pre><span style="" lang="EN-GB">| | | |</span></pre><pre><span style="" lang="EN-GB">|----(9)REGISTER---->| | |</span></pre><pre><span style="" lang="EN-GB">| | | |</span></pre><pre><span style="" lang="EN-GB">|<----(10)200--------|</span></pre>
<br />
<br />
<br />1-The UE sends the initial REGISTER request without Service-Route header and includes the option-tag "path" in the Supported header field. Before forwarding this request to the I-CSCF, the P-CSCF will add its SIP URI in the Path header to inform the S-CSCF where to route terminating requests.
<br />
<br /><span style="font-size:85%;"><span style="font-style: italic;font-family:courier new;" >REGISTER sip:v4.ims.test SIP/2.0</span>
<br /><span style="font-style: italic;font-family:courier new;" >Supported: path</span>
<br /><span style="font-style: italic;font-family:courier new;" >CSeq: 901 REGISTER</span></span>
<br />
<br />2-The P-CSCF sends an authentication challenge (401/407) to the UE. This response already contains Path header added by the P-CSCF in step 1.
<br />
<br /><span style=";font-family:courier new;font-size:85%;" >SIP/2.0 401 Unauthorized - Challenging the UE
<br />Path: <sip:term@pcscf.v4.ims.test:4060;lr>
<br />CSeq: 901 REGISTER</span>
<br />
<br />3-The UE sends a new registration request with authentication information.
<br />
<br /><span style=";font-family:courier new;font-size:85%;" >REGISTER sip:v4.ims.test SIP/2.0
<br />Supported: path
<br />CSeq: 902 REGISTER</span>
<br />
<br />4-The P-CSCF forwards the 200 OK (from the S-CSCF) response and stores the Service-Route value. At this point the Service-Route value is associated to the registered public user identity. In UE side the Service-Route value is also saved to be reused in next requests.
<br />
<br /><span style=";font-family:courier new;font-size:85%;" >SIP/2.0 200 OK - SAR succesful and registrar saved
<br />Path: <sip:term@pcscf.v4.ims.test:4060;lr>
<br />Service-Route: <sip:orig@scscf.v4.ims.test:6060;lr>
<br />CSeq: 902 REGISTER</span>
<br />
<br />5-The UE try a first presence subscription (watcher info package). New Route header MUST be added to all initial requests. This header contains the P-CSCF address, plus the associated S-SCSCF URI (Service Route) learnt during Service Route discovery.
<br /><span style=";font-family:courier new;font-size:85%;" >
<br />SUBSCRIBE sip:mamadou@v4.ims.test SIP/2.0
<br />Route: <sip:v4.ims.test:4060;lr=true;transport=tcp>,<sip:orig@scscf.v4.ims.test:6060;lr>
<br />Event: presence.winfo
<br />CSeq: 301 SUBSCRIBE</span>
<br />
<br />6-The P-CSCF forwards the response to the UE. You can notice that we new Record-Route header. This header contains that dialog routes.
<br />
<br /><span style=";font-family:courier new;font-size:85%;" >SIP/2.0 200 OK
<br />Record-Route: <sip:mo@scscf.v4.ims.test:6060;lr>,<sip:mo@pcscf.v4.ims.test:4060;lr>
<br />CSeq: 301 SUBSCRIBE</span>
<br />
<br />7-UE initiated reregistration. MUST not contain headers Path or Service-Route.
<br />
<br /><span style=";font-family:courier new;font-size:85%;" >REGISTER sip:v4.ims.test SIP/2.0
<br />Supported: path
<br />CSeq:903 REGISTER</span>
<br />
<br />8-Reregistration response. This response contains both Path and Service-Route headers.
<br />
<br /><span style=";font-family:courier new;font-size:85%;" >SIP/2.0 200 OK - SAR succesful and registrar saved
<br />Path: <sip:term@pcscf.v4.ims.test:4060;lr>
<br />Service-Route: <sip:orig@scscf.v4.ims.test:6060;lr>
<br />CSeq: 903 REGISTER</span>
<br />
<br />9-UE initiated deregistration. MUST not contain headers Path or Service-Route.
<br />
<br /><span style="font-size:85%;"><span style="font-family:courier new;">REGISTER sip:v4.ims.test SIP/2.0
<br />
<br /></span><span style="font-family:courier new;">Supported: path</span><span style="font-family:courier new;">
<br />Contact: <sip:[::::]:1010>;expires=0</span><span style="font-family:courier new;">
<br />CSeq:90 4 REGISTER</span></span>
<br />
<br />10-Deregistration response.
<br />
<br /><span style="font-size:85%;"><span style="font-family:courier new;">SIP/2.0 200 OK - SAR succesful and registrar saved
<br /></span><span style="font-family:courier new;">Path: <sip:term@pcscf.v4.ims.test:4060;lr>
<br /></span><span style="font-family:courier new;">Service-Route: <sip:orig@scscf.v4.ims.test:6060;lr>
<br /></span><span style="font-family:courier new;">CSeq: 903 REGISTER</span></span>
<br /><span style="font-weight: bold; font-style: italic;font-size:180%;" >
<br />Conclusion</span>
<br />
<br /><meta equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cinexbee%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><!--[if gte mso 9]><xml> <w:worddocument> <w:view>Normal</w:View> <w:zoom>0</w:Zoom> <w:hyphenationzone>21</w:HyphenationZone> <w:punctuationkerning/> <w:validateagainstschemas/> <w:saveifxmlinvalid>false</w:SaveIfXMLInvalid> <w:ignoremixedcontent>false</w:IgnoreMixedContent> <w:alwaysshowplaceholdertext>false</w:AlwaysShowPlaceholderText> <w:compatibility> <w:breakwrappedtables/> <w:snaptogridincell/> <w:wraptextwithpunct/> <w:useasianbreakrules/> <w:dontgrowautofit/> </w:Compatibility> <w:browserlevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:latentstyles deflockedstate="false" latentstylecount="156"> </w:LatentStyles> </xml><![endif]--><style> <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman"; mso-ansi-language:EN-US;} @page Section1 {size:612.0pt 792.0pt; margin:70.85pt 70.85pt 70.85pt 70.85pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style><!--[if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Tableau Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} table.MsoTableGrid {mso-style-name:"Grille du tableau"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; border:solid windowtext 1.0pt; mso-border-alt:solid windowtext .5pt; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-border-insideh:.5pt solid windowtext; mso-border-insidev:.5pt solid windowtext; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman"; mso-ansi-language:#0400; mso-fareast-language:#0400; mso-bidi-language:#0400;} </style> <![endif]--> <table class="MsoTableGrid" style="border-collapse: collapse;" border="0" cellpadding="0" cellspacing="0"> <tbody><tr style=""> <td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal" style="text-align: center;" align="center"><b><span lang="EN-GB" style="font-size:14;">Requests</span></b><span lang="EN-US"><o:p></o:p></span></p> </td> <td style="border-style: solid solid solid none; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal" style="text-align: center;" align="center"><b><span lang="EN-GB" style="font-size:14;">Routes</span></b><span lang="EN-US"><o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB">Initial REGISTER</span><span lang="EN-US"><o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB">None</span><span lang="EN-US"><o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB">REREGISTRATION</span><span lang="EN-US"><o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB">None</span><span lang="EN-US"><o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB">DEREGISTRATION</span><span lang="EN-US"><o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB">None</span><span lang="EN-US"><o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB">Initial requests (except REGISTER)</span><span lang="EN-US"><o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB">P-CSCF and Service Routes</span><span lang="EN-US"><o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB">Early* dialogs without dialog routes</span><span lang="EN-US"><o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB">P-CSCF and Service Routes</span><span lang="EN-US"><o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB">Early* dialogs with dialog routes</span><span lang="EN-US"><o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB">Dialog Routes</span><span lang="EN-US"><o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB">Confirmed* dialogs</span><span lang="EN-US"><o:p></o:p></span></p> </td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB">Dialog Routes</span><span lang="EN-US"><o:p></o:p></span></p> </td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB"> </span><span lang="EN-US"><o:p></o:p></span></p>
<br /></td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB"> </span><span lang="EN-US"><o:p></o:p></span></p>
<br /></td> </tr> <tr style=""> <td style="border-style: none solid solid; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB"> </span><span lang="EN-US"><o:p></o:p></span></p>
<br /></td> <td style="border-style: none solid solid none; padding: 0cm 5.4pt; width: 230.3pt;" valign="top" width="307"> <p class="MsoNormal"><span style="" lang="EN-GB"> </span><span lang="EN-US"><o:p></o:p></span></p>
<br /></td> </tr> </tbody></table>
<br />
<br />(*) A dialog is in the "early" state when it is created with a provisional response, and then transition to the "confirmed" state when a 2xx final response arrives. For other responses, or if no response arrives at all on that dialog, the early dialog terminates.
<br />Be careful:
<br />- PUBLISH request does not create dialog
<br />- SUBSCRIBE, INVITE, … requests create dialog
<br />
<br />Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com3tag:blogger.com,1999:blog-4923730159992091107.post-19019062309034569622008-11-07T19:01:00.000-08:002008-11-11T11:10:58.025-08:00New Release of Mercuro IMS Client (4.0.1011)The latest Beta release of Mercuro IMS Client(Version 4.0.1011) is now available for download at <a href="http://www.mercuro.net/">http://www.mercuro.net/</a>.<br />This release comes with a lot of fixes and improvements. Here is a non-exhaustive list:<br /><br />- Add P-Preferred-Identity for non-REGISTER dialogs and standalone<br />transactions<br />- Add loop detection on PUBLISH and SUBSCRIBE to deal with<br />mis-configured proxies<br />- Add support full support for rport parameter when registering<br />- Add pre-authorization of public identity in pres-rules to enable<br />self-presence awareness<br />- Add support for Do Not Disturb<br />- Add support for Auto-Answering in Voice/Visio calls<br />- Enhance shutdown time when closing the client (connected or not)<br />- Fix the route headers for non-REGISTER dialogs and standalone transactions<br />- Fix the handling of multiple Contact bindings<br />- Fix the handling of multiple P-Associated-Uri headers<br />- Fix the malformed fmtp parameter for iLBC and Speex codecs<br />- Fix the User-Agent string for XCAP request<br />- Fix the mis-saving of extended properties when using OMA Directory<br />discovery<br />- Fix the focus activation when receiving an INVITE request<br />- Fix a crash when using OMA Directory discovery with multiple document<br />per AUID<br />- Fix a crash when watcher-info document has no xmlns attribute<br />- Fix a crash when an Uri does not have a scheme in presence document<br />- Fix a crash when an INVITE has an incomplete Uri<br />- Fix a crash when an header contains an odd number of quotes.<br />- ....<br /><br />your feedback is welcomed (http://feedback.mercuro.net/).Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com0tag:blogger.com,1999:blog-4923730159992091107.post-3140122951145523212008-09-26T13:55:00.000-07:002008-11-08T06:27:11.288-08:00New Release of Mercuro IMS Client (4.0.899)The latest Beta release of Mercuro IMS Client(Version 4.0.899) is now available for download at <a href="http://www.mercuro.net/">http://www.mercuro.net/</a>.<br />This release comes with a lot of fixes and improvements. Here is a non-exhaustive list:<br /><br />- Change default document names in XDM (WARN: it can potentially breaks existing configuration)<br />- Add support for expiration negotiation in REGISTER (3GPP TS-24.229)<br />- Add full support for "qop" authorization attribute (RFC-2617)<br />- Add support for Uri negotiation in XDM RLS Services (RFC-4825)<br />- Add message waiting indication event package support (RFC-3842)<br />- Add support for XCAP Capabilities retrieval (RFC-4825)<br />- Add support for OMA XCAP Directory (OMA-TS-XDM_Core-V1_1)<br />- Add support for '423 Interval Too Brief' responses (RFC-3261)<br />- Add SHA-1 hash computation in 'file-selector' header for MSRP file transfers (IETF draft-ietf-mmusic-file-transfer-mech)<br />- Add meaningful status bar to make long-lasting operation bearable<br />- Fix missing authorization header in initial REGISTER (3GPP TS-24.229)<br />- Fix invalid PUBLISH request when dealing with 401/407 responses<br />- Fix authorization handling in MSRP dialogs (401/407 challenges)<br />- Fix invalid presence rules document when dealing with authorizations<br />- Fix a crash when making a call to a bogus Uri<br />- Fix minor UI problems<br /><br />Mercuro IMS Client is in beta stage and has been tested with many IMS Core (provided by our technical partners). To improve interoperability between Mercuro IMS Client and your IMS Core/Client we are willing to give you some help and tips (send us a mail to [tech dot mercuro -at- inexbee dot com]).<br /><br />For more information about Mercuro IMS Client visit <a href="http://www.mercuro.net/">http://www.mercuro.net/</a>.Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com0tag:blogger.com,1999:blog-4923730159992091107.post-36651233523568410582008-09-16T14:50:00.000-07:002008-11-08T06:27:25.927-08:00New Release of Mercuro IMS Client (4.0.864)The latest Beta release of Mercuro IMS Client(Version 4.0.864) is now available for download at <a href="http://www.mercuro.net/">http://www.mercuro.net</a>.<br />This release comes with a lot of fixes and improvements. Here is a non-exhaustive list:<br /><br />- Add new audio and video codecs (GSM, Speex, Theora, etc)<br />- Full screen mode support<br />- Add the ability to choose the codecs used during Voice/Visio calls<br />- Add a better validation of Uri values<br />- Add ability to set custom XDMS documents<br />- Add a dialog box when a connection error occurs<br />- Add an anonymous crash report sending to ease feedback<br />- Add a DTMF sound feedback<br />- Fix a crash when running under Microsoft Remote Desktop<br />- Fix a crash when making a Voice call with IMS Communicator<br />- Fix the jitter buffer for a better sound quality<br />- Fix the session rejection with IM SIMPLE Session<br />- Fix the ugly noise when playing the ring tones<br />- Fix label alignment under Windows Vista<br />- Fix the tab-stop order of various screens<br />- ...<br /><br />For more information about Mercuro IMS Client visit <a href="http://www.mercuro.net/">http://www.mercuro.net</a>.Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com0tag:blogger.com,1999:blog-4923730159992091107.post-41627797560394187792008-09-15T16:39:00.000-07:002008-11-08T06:32:04.619-08:003GPP P-Headers<p class="MsoNormal" style="text-align: justify;">The Third Generation Partnership Project (3GPP) has defined some additional SIP P-headers ('P' stands for private or proprietary) to use in IMS (Release 5 requirements on SIP) context.<o:p></o:p></p> <p class="MsoNormal" style="text-align: justify;">These headers are:<o:p></o:p></p> <ol><li>The P-Associated-URI header<o:p></o:p> </li><li>The P-Called-Party-ID header<o:p></o:p></li><li>The P-Visited-Network-ID header</li><li>The P-Access-Network-Info header</li><li>The P-Charging-Function-Addresses header<o:p></o:p></li><li>The P-Charging-Vector header</li></ol>In next posts I will explain how these headers are used in both UAC and UAS side.<br /> <p class="MsoNormal" style="text-align: justify;">For more information visit <a href="http://www.ietf.org/rfc/rfc3455.txt">http://www.ietf.org/rfc/rfc3455.txt</a></p>Mamadou Ibrahimahttp://www.blogger.com/profile/10700598846291718289noreply@blogger.com0