PREV TOC HOME INDEX NEXT


4.5.2. Example of Retrieving Call-Related Information

The following code demonstrates how to:

Similar code can be used when using SIP except that the code must include only information parameters supported by SIP (see Table 9, Retrievable Call Information).

Specifying Call-Related Information to Retrieve

The following function shows how an application can construct and send a request to retrieve call-related information.

int getInfoAsync(CRN crn)
{
    GC_PARM_BLKP gcParmBlk = NULL;
    GC_PARM_BLKP retParmBlk;
    int frc;

    frc = gc_util_insert_parm_val(&gcParmBlk,
                                  IPSET_CALLINFO,
                                  IPPARM_PHONELIST,
                                  sizeof(int),1);
    if (GC_SUCCESS != frc)
    
        return GC_ERROR;
    }
    gc_util_insert_parm_val(&gcParmBlk,
                            IPSET_CALLINFO,
                            IPPARM_CALLID,
                            sizeof(int),1);
    if (GC_SUCCESS != frc)
    {
        return GC_ERROR;
    }
    gc_util_insert_parm_val(&gcParmBlk,
                            IPSET_CONFERENCE,
                            IPPARM_CONFERENCE_ID,
                            sizeof(int),1);
    if (GC_SUCCESS != frc)
    {
        return GC_ERROR;
    }
    gc_util_insert_parm_val(&gcParmBlk,
                            IPSET_CONFERENCE,
                            IPPARM_CONFERENCE_GOAL,
                            sizeof(int),1);
    if (GC_SUCCESS != frc)
    {
        return GC_ERROR;
    }
    gc_util_insert_parm_val(&gcParmBlk,
                            IPSET_CALLINFO,
                            IPPARM_DISPLAY,
                            sizeof(int),1);
    if (GC_SUCCESS != frc)
    {
        return GC_ERROR;
    }
    gc_util_insert_parm_val(&gcParmBlk,
                            IPSET_CALLINFO,
                            IPPARM_USERUSER_INFO,
                            sizeof(int),1); 
    if (GC_SUCCESS != frc)
    {
        return GC_ERROR;
    }
    gc_util_insert_parm_val(&gcParmBlk,
                            IPSET_VENDORINFO,
                            IPPARM_VENDOR_PRODUCT_ID,
                            sizeof(int),1);
    if (GC_SUCCESS != frc)
    {
        return GC_ERROR;
    }
    gc_util_insert_parm_val(&gcParmBlk,
                            IPSET_VENDORINFO,
                            IPPARM_VENDOR_VERSION_ID,
                            sizeof(int),1);
    if (GC_SUCCESS != frc)
    {
        return GC_ERROR;
    }
    gc_util_insert_parm_val(&gcParmBlk,
                            IPSET_VENDORINFO,
                            IPPARM_H221NONSTD,
                            sizeof(int),1);
    if (GC_SUCCESS != frc)
    {
        return GC_ERROR;
    }
    gc_util_insert_parm_val(&gcParmBlk,/* NS Data: setting this IPPARM implies
                                          retrieval of the complete element */
                            IPSET_NONSTANDARDDATA,
                            IPPARM_NONSTANDARDDATA_DATA,
                            sizeof(int),1);
    if (GC_SUCCESS != frc)
    {
        return GC_ERROR;
    }
    gc_util_insert_parm_val(&gcParmBlk,/* NS Control: setting this IPPARM implies
                                          retrieval of the complete element */
                            IPSET_NONSTANDARDCONTROL,
                            IPPARM_NONSTANDARDDATA_DATA,
                            sizeof(int),1);
    if (GC_SUCCESS != frc)
    {
        return GC_ERROR;
    }
    frc = gc_Extension(GCTGT_GCLIB_CRN,
                       crn,
                       IPEXTID_GETINFO,
                       gcParmBlk,
                       &retParmBlk,
                       EV_ASYNC);
    if (GC_SUCCESS != frc)
    {
        return GC_ERROR;
    }
    gc_util_delete_parm_blk(gcParmBlk);
    return GC_SUCCESS;
} 

Extracting Call-Related Information Associated an Extension Event

The following code demonstrates how an application can extract call information when a GCEV_EXTENSIONCMPLT event is received as a result of a request for call-related information.

int OnExtensionAndComplete(GC_PARM_BLKP parm_blk,CRN crn)
{
    GC_PARM_DATA        *parmp = NULL;
    parmp = gc_util_next_parm(parm_blk,parmp);
    if (!parmp)
    {
        return GC_ERROR;
    }
    while (NULL != parmp)
    {
        switch (parmp->set_ID)
        {
            case IPSET_CALLINFO:
                switch (parmp->parm_ID)
                {
                    case IPPARM_DISPLAY:
                        if(parmp->value_size != 0)
                        {
                            printf("\tReceived extension data DISPLAY: %s\n",
                                    parmp->value_buf);
                        }
                    break; 
                    case IPPARM_CALLID:
                        if(parmp->value_size != 0)
                        {
                            printf("\tReceived extension data CALLID: %s\n",
                                    parmp->value_buf);
                        }
                    break;
                    case IPPARM_USERUSER_INFO:
                        if(parmp->value_size != 0)
                        {
                            printf("\tReceived extension data UUI: %s\n",
                                    parmp->value_buf);
                        }
                    break;
                    case IPPARM_PHONELIST:
                        if(parmp->value_size != 0)
                        {
                            printf("\tReceived extension data PHONELIST: %s\n",
                            parmp->value_buf);
                        }
                    break;
                    default:
                      printf("\tReceived unknown CALLINFO extension parmID %d\n",
                                 parmp->parm_ID);
                    break;
                }/* end switch (parmp->parm_ID) for IPSET_CALLINFO */
            break;
            case IPSET_CONFERENCE:
                switch (parmp->parm_ID)
                {
                    case IPPARM_CONFERENCE_GOAL:
                        if(parmp->value_size != 0)
                        {
                        printf("\tReceived extension data IPPARM_CONFERENCE_GOAL:
                                    %d\n",(unsigned int)(*(parmp->value_buf)));
                        }
                    break;
                    case IPPARM_CONFERENCE_ID:
                        if(parmp->value_size != 0)
                        {
                          printf("\tReceived extension data IPPARM_CONFERENCE_ID:
                                    %s\n", parmp->value_buf);
                    }
                    break;
                    default:
                    printf("\tReceived unknown CONFERENCE extension parmID %d\n",
                                parmp->parm_ID);
                    break;
                }
            break; 
            case IPSET_VENDORINFO:
                switch (parmp->parm_ID)
                {
                    case IPPARM_VENDOR_PRODUCT_ID:
                        if(parmp->value_size != 0)
                        {
                            printf("\tReceived extension data  PRODUCT_ID %s\n",
                                    parmp->value_buf);
                        }
                    break;
                    case IPPARM_VENDOR_VERSION_ID:
                        if(parmp->value_size != 0)
                        {
                            printf("\tReceived extension data  VERSION_ID %s\n",
                                    parmp->value_buf);
                        }
                    break;
                    case IPPARM_H221NONSTD:
                    {
                        if(parmp->value_size == sizeof(IP_H221NONSTANDARD))
                        {
                            IP_H221NONSTANDARD *pH221NonStandard;
                            pH221NonStandard = 
                                    (IP_H221NONSTANDARD *)(&(parmp->value_buf));
                            printf("\tReceived extension data VENDOR H221NONSTD:
                                    CC=%d, Ext=%d, MC=%d\n",
                                pH221NonStandard->country_code,
                                pH221NonStandard->extension,
                                pH221NonStandard->manufacturer_code);
                        }
                    }
                    break;
                    default:
                    printf("\tReceived unknown VENDORINFO extension parmID %d\n",
                                parmp->parm_ID);
                    break;
                }/* end switch (parmp->parm_ID) for IPSET_VENDORINFO */
            break;

            case IPSET_NONSTANDARDDATA:
                switch (parmp->parm_ID)
                {
                case IPPARM_NONSTANDARDDATA_DATA:
                    printf("\tReceived extension data (NSDATA) DATA: %s\n",
                            parmp->value_buf);
                    break;
                case IPPARM_NONSTANDARDDATA_OBJID:
                    printf("\tReceived extension data (NSDATA) OBJID: %s\n",
                            parmp->value_buf);
                    break; 
                case IPPARM_H221NONSTANDARD:
                {
                    if(parmp->value_size == sizeof(IP_H221NONSTANDARD))
                    {
                        IP_H221NONSTANDARD *pH221NonStandard;
                        pH221NonStandard = 
                                (IP_H221NONSTANDARD *)(&(parmp->value_buf));
                        printf("\tReceived extension data (NSDATA) h221:CC=%d, 
                                Ext=%d, MC=%d\n", 
                                pH221NonStandard->country_code,
                                pH221NonStandard->extension,
                                pH221NonStandard->manufacturer_code);
                    }
                }
                break;
                default:
                    printf("\tReceived unknown (NSDATA) extension parmID %d\n",
                            parmp->parm_ID);
                break;
            }
            break; 
            case IPSET_NONSTANDARDCONTROL:
                switch (parmp->parm_ID)
                {
                    case IPPARM_NONSTANDARDDATA_DATA:
                      printf("\tReceived extension data (NSCONTROL) DATA: %s\n",
                                parmp->value_buf);
                    break;
                    case IPPARM_NONSTANDARDDATA_OBJID:
                      printf("\tReceived extension data (NSCONTROL) OBJID: %s\n",
                                parmp->value_buf);
                    break;
                    case IPPARM_H221NONSTANDARD:
                    {
                        if(parmp->value_size == sizeof(IP_H221NONSTANDARD))
                        {
                            IP_H221NONSTANDARD *pH221NonStandard;
                            pH221NonStandard = 
                                   (IP_H221NONSTANDARD *)(&(parmp->value_buf));
                        printf("\tReceived extension data (NSCONTROL) h221:CC=%d,
                                    Ext=%d, MC=%d\n",
                                    pH221NonStandard->country_code,
                                    pH221NonStandard->extension,
                                    pH221NonStandard->manufacturer_code);
                        }
                    }
                    break; 
                    default:
                   printf("\tReceived unknown (NSCONTROL) extension parmID %d\n",
                                parmp->parm_ID);
                    break;
                }
            break; 
            case IPSET_MSG_Q931:
                switch (parmp->parm_ID)
                {
                    case IPPARM_MSGTYPE:
                        switch ((*(int *)(parmp->value_buf)))
                        {
                            case IP_MSGTYPE_Q931_FACILITY:
                                printf("\tReceived extension data
                                        IP_MSGTYPE_Q931_FACILITY\n");
                            break;
                            default:
                                printf("\tReceived unknown MSG_Q931 extension 
                                        parmID %d\n", parmp->parm_ID);
                            break;
                        } /* end  switch ((int)(parmp->value_buf)) */
                    break;
                }/* end switch (parmp->parm_ID) for IPSET_MSG_Q931 */
                break; 
            case IPSET_MSG_H245:
                switch (parmp->parm_ID)
                {
                    case IPPARM_MSGTYPE:
                        switch ((*(int *)(parmp->value_buf)))
                        {
                            case IP_MSGTYPE_H245_INDICATION:
                                printf("\tReceived extension data
                                        IP_MSGTYPE_H245_INDICATION\n");
                            break;
                            default:
                                printf("\tReceived unknown MSG_H245 extension 
                                        parmID %d\n", parmp->parm_ID);
                            break;
                        }/* end  switch ((int)(parmp->value_buf)) */
                    break;
                }/* end switch (parmp->parm_ID) for IPSET_MSG_H245 */
            break;
            default:
                printf("\t Received unknown extension setID %d\n",parmp->set_ID);
            break;
        }/* end switch (parmp->set_ID) */
        parmp = gc_util_next_parm(parm_blk,parmp);
    }
    return GC_SUCCESS;
} 

PREV TOC HOME INDEX NEXT

Click here to contact Telecom Support Resources

Copyright 2003, Intel Corporation
All rights reserved
This page generated February, 2003