<html>
<head>
    <base href="https://wiki.asterisk.org/wiki">
            <link rel="stylesheet" href="/wiki/s/en/2176/25/9/_/styles/combined.css?spaceKey=AST&amp;forWysiwyg=true" type="text/css">
    </head>
<body style="background: white;" bgcolor="white" class="email-body">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
    <h2><a href="https://wiki.asterisk.org/wiki/display/AST/res_sip_session+design">res_sip_session design</a></h2>
    <h4>Page <b>edited</b> by             <a href="https://wiki.asterisk.org/wiki/display/~mmichelson">Mark Michelson</a>
    </h4>
        <br/>
                         <h4>Changes (2)</h4>
                                 
    
<div id="page-diffs">
                    <table class="diff" cellpadding="0" cellspacing="0">
    
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >An SDP handler is responsible for parsing incoming SDPs and ensuring that Asterisk can cope with the contents. Similarly, the SDP handler will be responsible for constructing outgoing SDPs. <br> <br></td></tr>
            <tr><td class="diff-changed-lines" >h3. {{int ast_sip_session_register_extension_incoming(const char *method, int (*handler)(struct ast_sip_session *session, struct pjsip_rx_data <span class="diff-changed-words">*rdata)<span class="diff-added-chars"style="background-color: #dfd;">}}</span></span> <br></td></tr>
            <tr><td class="diff-unchanged" > <br>This allows for a module to insert itself into the processing of an incoming request or response. The {{method}} parameter can be used in order to restrict the callback from being called only for requests or responses of a particular SIP method. Possible uses for this would be to set values on a channel based on headers present in a SIP request or response. Other uses could be to reject an incoming request due to some criteria. <br> <br></td></tr>
            <tr><td class="diff-changed-lines" >h3. {{int ast_sip_session_register_extension_outgoing(const char *method, int (*handler)(struct ast_sip_session *session, struct pjsip_tx_data <span class="diff-changed-words">*tdata)<span class="diff-added-chars"style="background-color: #dfd;">}}</span></span> <br></td></tr>
            <tr><td class="diff-unchanged" > <br>This allows for a module to insert itself into the processing of an outgoing request or response. The {{method}} parameter can be used in order to restrict the callback from being called only for requests or responses of a particular SIP method. Possible uses for this would be to add headers to an outgoing SIP request or response based on local policy. <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
    
            </table>
    </div>                            <h4>Full Content</h4>
                    <div class="notificationGreySide">
        <div class='panelMacro'><table class='warningMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="/wiki/images/icons/emoticons/forbidden.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>This page is currently under construction. Please refrain from adding comments until this warning is removed</td></tr></table></div>

<h1><a name="res_sip_sessiondesign-Overview"></a>Overview</h1>

<p><tt>res_sip_session</tt> represents the "core" of SIP session operations. In the context of SIP, a "session" refers to a media session, such as a phone call. The SIP channel driver will be a consumer of the services provided by <tt>res_sip_session</tt>.</p>

<h1><a name="res_sip_sessiondesign-Startupprocedure"></a>Startup procedure</h1>

<p>When <tt>res_sip_session</tt> starts up, it registers itself with <tt>res_sip</tt> as a service.</p>

<h1><a name="res_sip_sessiondesign-Publicmethods"></a>Public methods</h1>

<h2><a name="res_sip_sessiondesign-Extensibility"></a>Extensibility</h2>

<p><tt>res_sip_session</tt> will strive to be as extensible as possible. Since people constantly wish to make tweaks to how SIP behaves, the best way to do this is to provide an API so that a module can insert itself into the processing of requests/responses. The following methods provide such capabilities.</p>

<h3><a name="res_sip_sessiondesign-%7B%7Bintastsipsessionregistersdphandler%28conststructastsipsessionsdphandler%29%7D%7D"></a><tt>int ast_sip_session_register_sdp_handler(const struct ast_sip_session_sdp_handler)</tt></h3>

<p>An SDP handler is responsible for parsing incoming SDPs and ensuring that Asterisk can cope with the contents. Similarly, the SDP handler will be responsible for constructing outgoing SDPs.</p>

<h3><a name="res_sip_sessiondesign-%7B%7Bintastsipsessionregisterextensionincoming%28constcharmethod%2Cint%28handler%29%28structastsipsessionsession%2Cstructpjsiprxdatardata%29%7D%7D"></a><tt>int ast_sip_session_register_extension_incoming(const char *method, int (*handler)(struct ast_sip_session *session, struct pjsip_rx_data *rdata)</tt></h3>

<p>This allows for a module to insert itself into the processing of an incoming request or response. The <tt>method</tt> parameter can be used in order to restrict the callback from being called only for requests or responses of a particular SIP method. Possible uses for this would be to set values on a channel based on headers present in a SIP request or response. Other uses could be to reject an incoming request due to some criteria.</p>

<h3><a name="res_sip_sessiondesign-%7B%7Bintastsipsessionregisterextensionoutgoing%28constcharmethod%2Cint%28handler%29%28structastsipsessionsession%2Cstructpjsiptxdatatdata%29%7D%7D"></a><tt>int ast_sip_session_register_extension_outgoing(const char *method, int (*handler)(struct ast_sip_session *session, struct pjsip_tx_data *tdata)</tt></h3>

<p>This allows for a module to insert itself into the processing of an outgoing request or response. The <tt>method</tt> parameter can be used in order to restrict the callback from being called only for requests or responses of a particular SIP method. Possible uses for this would be to add headers to an outgoing SIP request or response based on local policy.</p>

<h2><a name="res_sip_sessiondesign-CommonSIPmethods"></a>Common SIP methods</h2>

<h3><a name="res_sip_sessiondesign-%7B%7Bintastsipsessiongetidentity%28structastpartyidid%29%7D%7D"></a><tt>int ast_sip_session_get_identity(struct ast_party_id *id)</tt></h3>

<p>This will retrieve identity information from a SIP message and place the information in the <tt>id</tt> parameter. The caller of the function can then apply this identity to caller ID, connected line, or whatever is relevant.</p>

<h3><a name="res_sip_sessiondesign-%7B%7Bintastsipsessionsendreinvite%28structastsipsessionsession%29%7D%7D"></a><tt>int ast_sip_session_send_reinvite(struct ast_sip_session *session)</tt></h3>

<p>Send a reinvite on a SIP session. The method will inspect session details and construct the reinvite accordingly. This will call into registered outgoing extensions in case they wish to add anything to the outgoing reinvite.</p>

<h3><a name="res_sip_sessiondesign-%7B%7Bintastsipsessionsendresponse%28structastsipsessionsession%2Cintresponsecode%2Cstructpjsiprxdatardata%29%7D%7D"></a><tt>int ast_sip_session_send_response(struct ast_sip_session *session, int response_code, struct pjsip_rx_data *rdata)</tt></h3>

<p>Send a response to a request on a SIP session. This will inspect session details and construct the response accordingly with the indicated <tt>response_code</tt>. This iwll call into registered outgoing extensions in case they wish to add anything to the response.</p>
    </div>
        <div id="commentsSection" class="wiki-content pageSection">
        <div style="float: right;" class="grey">
                        <a href="https://wiki.asterisk.org/wiki/users/removespacenotification.action?spaceKey=AST">Stop watching space</a>
            <span style="padding: 0px 5px;">|</span>
                <a href="https://wiki.asterisk.org/wiki/users/editmyemailsettings.action">Change email notification preferences</a>
</div>
        <a href="https://wiki.asterisk.org/wiki/display/AST/res_sip_session+design">View Online</a>
        |
        <a href="https://wiki.asterisk.org/wiki/pages/diffpagesbyversion.action?pageId=22085841&revisedVersion=3&originalVersion=2">View Changes</a>
                |
        <a href="https://wiki.asterisk.org/wiki/display/AST/res_sip_session+design?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
            </div>
</div>
</div>
</div>
</div>
</body>
</html>