- newparam.setup.callerinfo.id[0] = '\0';
- if (ast->caller.id.number.valid)
- if (ast->caller.id.number.str)
- if (ast->caller.id.number.str[0])
- strncpy(newparam.setup.callerinfo.id, ast->caller.id.number.str, sizeof(newparam.setup.callerinfo.id)-1);
- if (ast->caller.id.name.valid)
- if (ast->caller.id.name.str)
- if (ast->caller.id.name.str[0])
- strncpy(newparam.setup.callerinfo.name, ast->caller.id.name.str, sizeof(newparam.setup.callerinfo.name)-1);
- if (ast->redirecting.from.number.valid)
- if (ast->redirecting.from.number.str)
- if (ast->redirecting.from.number.str[0]) {
- strncpy(newparam.setup.redirinfo.id, ast->redirecting.from.number.str, sizeof(newparam.setup.redirinfo.id)-1);
+
+#ifdef AST_1_8_OR_HIGHER
+ /* caller ID */
+ if (ast->caller.id.number.valid) {
+ if (ast->caller.id.number.str)
+ strncpy(newparam.setup.callerinfo.id, ast->caller.id.number.str, sizeof(newparam.setup.callerinfo.id)-1);
+ switch(ast->caller.id.number.presentation & AST_PRES_RESTRICTION) {
+ case AST_PRES_RESTRICTED:
+ newparam.setup.callerinfo.present = INFO_PRESENT_RESTRICTED;
+ break;
+ case AST_PRES_UNAVAILABLE:
+ newparam.setup.callerinfo.present = INFO_PRESENT_NOTAVAIL;
+ break;
+ case AST_PRES_ALLOWED:
+ default:
+ newparam.setup.callerinfo.present = INFO_PRESENT_ALLOWED;
+ }
+ switch(ast->caller.id.number.presentation & AST_PRES_NUMBER_TYPE) {
+ case AST_PRES_USER_NUMBER_UNSCREENED:
+ newparam.setup.callerinfo.screen = INFO_SCREEN_USER;
+ break;
+ case AST_PRES_USER_NUMBER_PASSED_SCREEN:
+ newparam.setup.callerinfo.screen = INFO_SCREEN_USER_VERIFIED_PASSED;
+ break;
+ case AST_PRES_USER_NUMBER_FAILED_SCREEN:
+ newparam.setup.callerinfo.screen = INFO_SCREEN_USER_VERIFIED_FAILED;
+ break;
+ default:
+ newparam.setup.callerinfo.screen = INFO_SCREEN_NETWORK;
+ }
+ switch((ast->caller.id.number.plan >> 4) & 7) {
+ case 4:
+ newparam.setup.callerinfo.ntype = INFO_NTYPE_SUBSCRIBER;
+ break;
+ case 2:
+ newparam.setup.callerinfo.ntype = INFO_NTYPE_NATIONAL;
+ break;
+ case 1:
+ newparam.setup.callerinfo.ntype = INFO_NTYPE_INTERNATIONAL;
+ break;
+ default:
+ newparam.setup.callerinfo.ntype = INFO_NTYPE_UNKNOWN;
+ }
+ } else
+ newparam.setup.callerinfo.present = INFO_PRESENT_NOTAVAIL;
+
+ /* caller ID 2 */
+ if (ast->caller.ani.number.valid) {
+ if (ast->caller.ani.number.str)
+ strncpy(newparam.setup.callerinfo.id2, ast->caller.ani.number.str, sizeof(newparam.setup.callerinfo.id2)-1);
+ switch(ast->caller.ani.number.presentation & AST_PRES_RESTRICTION) {
+ case AST_PRES_RESTRICTED:
+ newparam.setup.callerinfo.present2 = INFO_PRESENT_RESTRICTED;
+ break;
+ case AST_PRES_UNAVAILABLE:
+ newparam.setup.callerinfo.present2 = INFO_PRESENT_NOTAVAIL;
+ break;
+ case AST_PRES_ALLOWED:
+ default:
+ newparam.setup.callerinfo.present2 = INFO_PRESENT_ALLOWED;
+ }
+ switch(ast->caller.ani.number.presentation & AST_PRES_NUMBER_TYPE) {
+ case AST_PRES_USER_NUMBER_UNSCREENED:
+ newparam.setup.callerinfo.screen2 = INFO_SCREEN_USER;
+ break;
+ case AST_PRES_USER_NUMBER_PASSED_SCREEN:
+ newparam.setup.callerinfo.screen2 = INFO_SCREEN_USER_VERIFIED_PASSED;
+ break;
+ case AST_PRES_USER_NUMBER_FAILED_SCREEN:
+ newparam.setup.callerinfo.screen2 = INFO_SCREEN_USER_VERIFIED_FAILED;
+ break;
+ default:
+ newparam.setup.callerinfo.screen2 = INFO_SCREEN_NETWORK;
+ }
+ switch((ast->caller.ani.number.plan >> 4) & 7) {
+ case 4:
+ newparam.setup.callerinfo.ntype2 = INFO_NTYPE_SUBSCRIBER;
+ break;
+ case 2:
+ newparam.setup.callerinfo.ntype2 = INFO_NTYPE_NATIONAL;
+ break;
+ case 1:
+ newparam.setup.callerinfo.ntype2 = INFO_NTYPE_INTERNATIONAL;
+ break;
+ default:
+ newparam.setup.callerinfo.ntype2 = INFO_NTYPE_UNKNOWN;
+ }
+ } else
+ newparam.setup.callerinfo.present2 = INFO_PRESENT_NOTAVAIL;
+
+ /* caller name */
+ if (ast->caller.id.name.valid) {
+ if (ast->caller.id.name.str)
+ strncpy(newparam.setup.callerinfo.name, ast->caller.id.name.str, sizeof(newparam.setup.callerinfo.name)-1);
+ }
+
+ /* redir number */
+ if (ast->redirecting.from.number.valid) {
+ newparam.setup.redirinfo.itype = INFO_ITYPE_CHAN;
+ if (ast->redirecting.from.number.str)
+ strncpy(newparam.setup.redirinfo.id, ast->redirecting.from.number.str, sizeof(newparam.setup.redirinfo.id)-1);
+ switch(ast->redirecting.from.number.presentation & AST_PRES_RESTRICTION) {
+ case AST_PRES_RESTRICTED:
+ newparam.setup.redirinfo.present = INFO_PRESENT_RESTRICTED;
+ break;
+ case AST_PRES_UNAVAILABLE:
+ newparam.setup.redirinfo.present = INFO_PRESENT_NOTAVAIL;
+ break;
+ case AST_PRES_ALLOWED:
+ default:
+ newparam.setup.redirinfo.present = INFO_PRESENT_ALLOWED;
+ }
+ switch(ast->redirecting.from.number.presentation & AST_PRES_NUMBER_TYPE) {
+ case AST_PRES_USER_NUMBER_UNSCREENED:
+ newparam.setup.redirinfo.screen = INFO_SCREEN_USER;
+ break;
+ case AST_PRES_USER_NUMBER_PASSED_SCREEN:
+ newparam.setup.redirinfo.screen = INFO_SCREEN_USER_VERIFIED_PASSED;
+ break;
+ case AST_PRES_USER_NUMBER_FAILED_SCREEN:
+ newparam.setup.redirinfo.screen = INFO_SCREEN_USER_VERIFIED_FAILED;
+ break;
+ default:
+ newparam.setup.redirinfo.screen = INFO_SCREEN_NETWORK;
+ }
+ switch((ast->redirecting.from.number.plan >> 4) & 7) {
+ case 4:
+ newparam.setup.redirinfo.ntype = INFO_NTYPE_SUBSCRIBER;
+ break;
+ case 2:
+ newparam.setup.redirinfo.ntype = INFO_NTYPE_NATIONAL;
+ break;
+ case 1:
+ newparam.setup.redirinfo.ntype = INFO_NTYPE_INTERNATIONAL;
+ break;
+ default:
+ newparam.setup.redirinfo.ntype = INFO_NTYPE_UNKNOWN;
+ }
+ }
+#else
+ if (call->cid_num[0])
+ strncpy(newparam.setup.callerinfo.id, call->cid_num, sizeof(newparam.setup.callerinfo.id)-1);
+ if (call->cid_name[0])
+ strncpy(newparam.setup.callerinfo.name, call->cid_name, sizeof(newparam.setup.callerinfo.name)-1);
+ if (call->cid_rdnis[0]) {
+ strncpy(newparam.setup.redirinfo.id, call->cid_rdnis, sizeof(newparam.setup.redirinfo.id)-1);