The IMS Service Control Module (isc)

Module Documentation

[Overview] [Code Structure] [Configuration and usage] [Example]

Author:
Dragos Vingarzan vingarzan -at- fokus dot fraunhofer dot de

Overview

This module is supposed to provide support for the ISC interface between the Serving-CSCF and the Aplication Servers

To use you need the The Serving-CSCF Module (scscf) loaded. This is because this module uses the registrar in there for Initial Filter Criteria storage.

Code Structure

The functionality exported to the SER routing script is defined in mod.c . The IFC checking logic is in checker.c. isc.c defines the ISC interface processing and mark.c the message marking mechanism. For generic SIP processing functions look into sip.c.

Configuration and usage

For exported functions look at isc_cmds.
For configuration parameters look at isc_params.

The messages forwarded to the Application Server have the following marking:

Route: <AS>, <sip:ifcmark@[isc_my_uri];lr;s=xxx;h=xxx;d=xxx>
The message is "loose-routed" to the AS. If the AS responds with a request, the 2nd route header value will contain all the required state information for identification and IFC matching resume.

For detailed information on marking take a look at mark.c.

To check if a message is matching the next unchecked IFC you should do the following for checking triggers for the originating user:

{  
    ...
    if (ISC_match_filter("orig")){
        t_on_reply("ISC_Orig_reply");
        t_on_failure("ISC_Orig_failure");
        # here the message matched and was forwarded to the AS already and we can exit
        exit;
    }
    # here the message did not match any (more) IFCs
    ...
}    
Then to catch a response:
onreply_route[ISC_Orig_reply]
{
    log(1,">>       ISC_Orig_reply\n");
    #if you would like to do some processing on responses from AS, do it here
    break;
}

failure_route[ISC_Orig_failure]
{
    log(1,">>       ISC_Orig_failure\n");
    if (!t_check_status("408")){ 
        #if you would like to do some processing on responses from AS, do it here   
        break;
    }
    if (ISC_is_session_continued()){
        #here the AS failed to respond and we should continue processing 
        break;      
    }else{
        #here the AS failed to respond and the session should be terminated
        t_reply("555","AS failed to respond");
    }
}

Or, if the AS responded with the request modified, or with another request and it wishes to resume the IFC triggering session, the following should be applied to identify this case:

    ...
    if (ISC_from_AS("orig")){
        #do resume of processing - probably call ISC_match_filter("orig")
    }
    ...

Example

And here is a real usage example:
Generated on Tue Jul 29 04:19:20 2008 for Open IMS Core CSCFs by  doxygen 1.5.2