4.5.2. Example of Retrieving Call-Related Information
The following code demonstrates how to:
- Create a structure that identifies which information should be retrieved, then use the gc_Extension( ) with an extID of IPEXTID_GETINFO to issue the request.
- Extract the data from a structure associated with the GCEV_EXTENSIONCMPLT event received as a termination event to the gc_Extension( ) function.
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; }
Click here to contact Telecom Support Resources
Copyright 2003, Intel Corporation