+ if (param->setup.exten[0])
+ strdup(ast->exten, param->setup.exten);
+ if (param->setup.callerinfo.id[0])
+ strdup(ast->cid->cid_num, param->setup.callerinfo.id);
+ if (param->setup.callerinfo.name[0])
+ strdup(ast->cid->cid_name, param->setup.callerinfo.name);
+ if (param->setup.redirinfo.id[0])
+ strdup(ast->cid->cid_name, numberrize_callerinfo(param->setup.callerinfo.name, param->setup.callerinfo.ntype, configfile->prefix_nat, configfile->prefix_inter));
+ switch (param->setup.callerinfo.present)
+ {
+ case INFO_PRESENT_ALLOWED:
+ ast->cid->cid_pres = AST_PRESENT_ALLOWED;
+ break;
+ case INFO_PRESENT_RESTRICTED:
+ ast->cid->cid_pres = AST_PRESENT_RESTRICTED;
+ break;
+ default:
+ ast->cid->cid_pres = AST_PRESENT_UNAVAILABLE;
+ }
+ switch (param->setup.callerinfo.ntype)
+ {
+ case INFO_NTYPE_SUBSCRIBER:
+ ast->cid->cid_ton = AST_wasnu;
+ break;
+ case INFO_NTYPE_NATIONAL:
+ ast->cid->cid_ton = AST_wasnu;
+ break;
+ case INFO_NTYPE_INTERNATIONAL:
+ ast->cid->cid_ton = AST_wasnu;
+ break;
+ default:
+ ast->cid->cid_ton = AST_wasnu;
+ }
+ ast->transfercapability = param->setup.bearerinfo.capability;
+
+ /* configure channel */
+ ast->state = AST_STATE_RESERVED;
+ snprintf(ast->name, sizeof(ast->name), "%s/%d", lcr_type, ++glob_channel);
+ ast->name[sizeof(ast->name)-1] = '\0';
+ ast->type = lcr_type;
+ ast->nativeformat = configfile->lawformat;
+ ast->readformat = ast->rawreadformat = configfile->lawformat;
+ ast->writeformat = ast->rawwriteformat = configfile->lawformat;
+ ast->hangupcause = 0;
+
+ /* change state */
+ call->state = CHAN_LCR_STATE_IN_SETUP;