+
+
+
+#ifdef AST_1_8_OR_HIGHER
+ if (param->setup.callerinfo.id[0]) {
+ ast->caller.id.number.valid = 1;
+ ast->caller.id.number.str = strdup(param->setup.callerinfo.id);
+ if (!param->setup.callerinfo.id[0]) {
+ ast->caller.id.number.presentation = AST_PRES_RESTRICTED;
+ ast->caller.id.number.plan = (0 << 4) | 1;
+ }
+ switch (param->setup.callerinfo.present) {
+ case INFO_PRESENT_ALLOWED:
+ ast->caller.id.number.presentation = AST_PRES_ALLOWED;
+ break;
+ case INFO_PRESENT_RESTRICTED:
+ ast->caller.id.number.presentation = AST_PRES_RESTRICTED;
+ break;
+ default:
+ ast->caller.id.number.presentation = AST_PRES_UNAVAILABLE;
+ }
+ switch (param->setup.callerinfo.screen) {
+ case INFO_SCREEN_USER:
+ ast->caller.id.number.presentation |= AST_PRES_USER_NUMBER_UNSCREENED;
+ break;
+ case INFO_SCREEN_USER_VERIFIED_PASSED:
+ ast->caller.id.number.presentation |= AST_PRES_USER_NUMBER_PASSED_SCREEN;
+ break;
+ case INFO_SCREEN_USER_VERIFIED_FAILED:
+ ast->caller.id.number.presentation |= AST_PRES_USER_NUMBER_FAILED_SCREEN;
+ break;
+ default:
+ ast->caller.id.number.presentation |= AST_PRES_NETWORK_NUMBER;
+ }
+ switch (param->setup.callerinfo.ntype) {
+ case INFO_NTYPE_SUBSCRIBER:
+ ast->caller.id.number.plan = (4 << 4) | 1;
+ break;
+ case INFO_NTYPE_NATIONAL:
+ ast->caller.id.number.plan = (2 << 4) | 1;
+ break;
+ case INFO_NTYPE_INTERNATIONAL:
+ ast->caller.id.number.plan = (1 << 4) | 1;
+ break;
+ default:
+ ast->caller.id.number.plan = (0 << 4) | 1;
+ }
+ }
+ if (param->setup.callerinfo.id2[0]) {
+ ast->caller.ani.number.valid = 1;
+ ast->caller.ani.number.str = strdup(param->setup.callerinfo.id2);
+ switch (param->setup.callerinfo.present2) {
+ case INFO_PRESENT_ALLOWED:
+ ast->caller.ani.number.presentation = AST_PRES_ALLOWED;
+ break;
+ case INFO_PRESENT_RESTRICTED:
+ ast->caller.ani.number.presentation = AST_PRES_RESTRICTED;
+ break;
+ default:
+ ast->caller.ani.number.presentation = AST_PRES_UNAVAILABLE;
+ }
+ switch (param->setup.callerinfo.screen2) {
+ case INFO_SCREEN_USER:
+ ast->caller.ani.number.presentation |= AST_PRES_USER_NUMBER_UNSCREENED;
+ break;
+ case INFO_SCREEN_USER_VERIFIED_PASSED:
+ ast->caller.ani.number.presentation |= AST_PRES_USER_NUMBER_PASSED_SCREEN;
+ break;
+ case INFO_SCREEN_USER_VERIFIED_FAILED:
+ ast->caller.ani.number.presentation |= AST_PRES_USER_NUMBER_FAILED_SCREEN;
+ break;
+ default:
+ ast->caller.ani.number.presentation |= AST_PRES_NETWORK_NUMBER;
+ }
+ switch (param->setup.callerinfo.ntype2) {
+ case INFO_NTYPE_SUBSCRIBER:
+ ast->caller.ani.number.plan = (4 << 4) | 1;
+ break;
+ case INFO_NTYPE_NATIONAL:
+ ast->caller.ani.number.plan = (2 << 4) | 1;
+ break;
+ case INFO_NTYPE_INTERNATIONAL:
+ ast->caller.ani.number.plan = (1 << 4) | 1;
+ break;
+ default:
+ ast->caller.ani.number.plan = (0 << 4) | 1;
+ }
+ }
+ if (param->setup.callerinfo.name[0]) {
+ ast->caller.id.name.valid = 1;
+ ast->caller.id.name.str = strdup(param->setup.callerinfo.name);
+ }
+ if (param->setup.redirinfo.id[0]) {
+ ast->redirecting.from.number.valid = 1;
+ ast->redirecting.from.number.str = strdup(param->setup.redirinfo.id);
+ switch (param->setup.redirinfo.present) {
+ case INFO_PRESENT_ALLOWED:
+ ast->redirecting.from.number.presentation = AST_PRES_ALLOWED;
+ break;
+ case INFO_PRESENT_RESTRICTED:
+ ast->redirecting.from.number.presentation = AST_PRES_RESTRICTED;
+ break;
+ default:
+ ast->redirecting.from.number.presentation = AST_PRES_UNAVAILABLE;
+ }
+ switch (param->setup.redirinfo.screen) {
+ case INFO_SCREEN_USER:
+ ast->redirecting.from.number.presentation |= AST_PRES_USER_NUMBER_UNSCREENED;
+ break;
+ case INFO_SCREEN_USER_VERIFIED_PASSED:
+ ast->redirecting.from.number.presentation |= AST_PRES_USER_NUMBER_PASSED_SCREEN;
+ break;
+ case INFO_SCREEN_USER_VERIFIED_FAILED:
+ ast->redirecting.from.number.presentation |= AST_PRES_USER_NUMBER_FAILED_SCREEN;
+ break;
+ default:
+ ast->redirecting.from.number.presentation |= AST_PRES_NETWORK_NUMBER;
+ }
+ switch (param->setup.redirinfo.ntype) {
+ case INFO_NTYPE_SUBSCRIBER:
+ ast->redirecting.from.number.plan = (4 << 4) | 1;
+ break;
+ case INFO_NTYPE_NATIONAL:
+ ast->redirecting.from.number.plan = (2 << 4) | 1;
+ break;
+ case INFO_NTYPE_INTERNATIONAL:
+ ast->redirecting.from.number.plan = (1 << 4) | 1;
+ break;
+ default:
+ ast->redirecting.from.number.plan = (0 << 4) | 1;
+ }
+ }
+#else