mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	Huge callerid rework (might break H.323, others)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3874 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -186,7 +186,7 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, struct localu | ||||
| 				else if (numnochan) | ||||
| 					strncpy(status, "CHANUNAVAIL", statussize - 1); | ||||
| 				/* See if there is a special busy message */ | ||||
| 				if (ast_exists_extension(in, in->context, in->exten, in->priority + 101, in->callerid))  | ||||
| 				if (ast_exists_extension(in, in->context, in->exten, in->priority + 101, in->cid.cid_num))  | ||||
| 					in->priority+=100; | ||||
| 			} else { | ||||
| 				if (option_verbose > 2) | ||||
| @@ -233,10 +233,12 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, struct localu | ||||
| 						o->stillgoing = 0; | ||||
| 						numnochan++; | ||||
| 					} else { | ||||
| 						if (o->chan->callerid) | ||||
| 							free(o->chan->callerid); | ||||
|  | ||||
| 						o->chan->callerid = NULL; | ||||
| 						if (o->chan->cid.cid_num) | ||||
| 							free(o->chan->cid.cid_num); | ||||
| 						o->chan->cid.cid_num = NULL; | ||||
| 						if (o->chan->cid.cid_name) | ||||
| 							free(o->chan->cid.cid_name); | ||||
| 						o->chan->cid.cid_name = NULL; | ||||
|  | ||||
| 						if (o->forcecallerid) { | ||||
| 							char *newcid = NULL; | ||||
| @@ -245,36 +247,41 @@ static struct ast_channel *wait_for_answer(struct ast_channel *in, struct localu | ||||
| 								newcid = in->macroexten; | ||||
| 							else | ||||
| 								newcid = in->exten; | ||||
| 							o->chan->callerid = strdup(newcid); | ||||
| 							o->chan->cid.cid_num = strdup(newcid); | ||||
| 							strncpy(o->chan->accountcode, winner->accountcode, sizeof(o->chan->accountcode) - 1); | ||||
| 							o->chan->cdrflags = winner->cdrflags; | ||||
| 							if (!o->chan->callerid) | ||||
| 							if (!o->chan->cid.cid_num) | ||||
| 								ast_log(LOG_WARNING, "Out of memory\n"); | ||||
| 						} else { | ||||
| 							if (in->callerid) { | ||||
| 								o->chan->callerid = strdup(in->callerid); | ||||
| 								if (!o->chan->callerid) | ||||
| 							if (in->cid.cid_num) { | ||||
| 								o->chan->cid.cid_num = strdup(in->cid.cid_num); | ||||
| 								if (!o->chan->cid.cid_num) | ||||
| 									ast_log(LOG_WARNING, "Out of memory\n");	 | ||||
| 							} | ||||
| 							if (in->cid.cid_name) { | ||||
| 								o->chan->cid.cid_name = strdup(in->cid.cid_name); | ||||
| 								if (!o->chan->cid.cid_name) | ||||
| 									ast_log(LOG_WARNING, "Out of memory\n");	 | ||||
| 							} | ||||
| 							strncpy(o->chan->accountcode, in->accountcode, sizeof(o->chan->accountcode) - 1); | ||||
| 							o->chan->cdrflags = in->cdrflags; | ||||
| 						} | ||||
|  | ||||
| 						if (in->ani) { | ||||
| 							if (o->chan->ani) | ||||
| 								free(o->chan->ani); | ||||
| 							o->chan->ani = malloc(strlen(in->ani) + 1); | ||||
| 							if (o->chan->ani) | ||||
| 								strncpy(o->chan->ani, in->ani, strlen(in->ani)); | ||||
| 						if (in->cid.cid_ani) { | ||||
| 							if (o->chan->cid.cid_ani) | ||||
| 								free(o->chan->cid.cid_ani); | ||||
| 							o->chan->cid.cid_ani = malloc(strlen(in->cid.cid_ani) + 1); | ||||
| 							if (o->chan->cid.cid_ani) | ||||
| 								strncpy(o->chan->cid.cid_ani, in->cid.cid_ani, strlen(in->cid.cid_ani) + 1); | ||||
| 							else | ||||
| 								ast_log(LOG_WARNING, "Out of memory\n"); | ||||
| 						} | ||||
| 						if (o->chan->rdnis)  | ||||
| 							free(o->chan->rdnis); | ||||
| 						if (o->chan->cid.cid_rdnis)  | ||||
| 							free(o->chan->cid.cid_rdnis); | ||||
| 						if (!ast_strlen_zero(in->macroexten)) | ||||
| 							o->chan->rdnis = strdup(in->macroexten); | ||||
| 							o->chan->cid.cid_rdnis = strdup(in->macroexten); | ||||
| 						else | ||||
| 							o->chan->rdnis = strdup(in->exten); | ||||
| 							o->chan->cid.cid_rdnis = strdup(in->exten); | ||||
| 						if (ast_call(o->chan, tmpchan, 0)) { | ||||
| 							ast_log(LOG_NOTICE, "Failed to dial on local channel for call forward to '%s'\n", tmpchan); | ||||
| 							o->stillgoing = 0; | ||||
| @@ -429,7 +436,7 @@ static int dial_exec(struct ast_channel *chan, void *data) | ||||
| 	char restofit[AST_MAX_EXTENSION]; | ||||
| 	char *transfer = NULL; | ||||
| 	char *newnum; | ||||
| 	char callerid[256] = "", *l, *n; | ||||
| 	char *l; | ||||
| 	char *url=NULL; /* JDG */ | ||||
| 	struct ast_var_t *current; | ||||
| 	struct varshead *headp, *newheadp; | ||||
| @@ -668,14 +675,8 @@ static int dial_exec(struct ast_channel *chan, void *data) | ||||
| 		strncpy(privdb, chan->exten, sizeof(privdb) - 1); | ||||
| 	} | ||||
| 	if (privacy) { | ||||
| 		if (chan->callerid) | ||||
| 			strncpy(callerid, chan->callerid, sizeof(callerid) - 1); | ||||
| 		else | ||||
| 			callerid[0] = '\0'; | ||||
| 		ast_callerid_parse(callerid, &n, &l); | ||||
| 		if (l) { | ||||
| 			ast_shrink_phone_number(l); | ||||
| 		} else | ||||
| 		l = chan->cid.cid_num; | ||||
| 		if (!l) | ||||
| 			l = ""; | ||||
| 		ast_log(LOG_NOTICE, "Privacy DB is '%s', privacy is %d, clid is '%s'\n", privdb, privacy, l); | ||||
| 	} | ||||
| @@ -797,28 +798,31 @@ static int dial_exec(struct ast_channel *chan, void *data) | ||||
| 		tmp->chan->appl = "AppDial"; | ||||
| 		tmp->chan->data = "(Outgoing Line)"; | ||||
| 		tmp->chan->whentohangup = 0; | ||||
| 		if (tmp->chan->callerid) | ||||
| 			free(tmp->chan->callerid); | ||||
| 		if (tmp->chan->ani) | ||||
| 			free(tmp->chan->ani); | ||||
| 		if (chan->callerid) | ||||
| 			tmp->chan->callerid = strdup(chan->callerid); | ||||
| 		else | ||||
| 			tmp->chan->callerid = NULL; | ||||
| 		if (tmp->chan->cid.cid_num) | ||||
| 			free(tmp->chan->cid.cid_num); | ||||
| 		tmp->chan->cid.cid_num = NULL; | ||||
| 		if (tmp->chan->cid.cid_name) | ||||
| 			free(tmp->chan->cid.cid_name); | ||||
| 		tmp->chan->cid.cid_name = NULL; | ||||
| 		if (tmp->chan->cid.cid_ani) | ||||
| 			free(tmp->chan->cid.cid_ani); | ||||
| 		tmp->chan->cid.cid_ani = NULL; | ||||
|  | ||||
| 		if (chan->cid.cid_num)  | ||||
| 			tmp->chan->cid.cid_num = strdup(chan->cid.cid_num); | ||||
| 		if (chan->cid.cid_name)  | ||||
| 			tmp->chan->cid.cid_name = strdup(chan->cid.cid_name); | ||||
| 		if (chan->cid.cid_ani)  | ||||
| 			tmp->chan->cid.cid_ani = strdup(chan->cid.cid_ani); | ||||
| 		 | ||||
| 		/* Copy language from incoming to outgoing */ | ||||
| 		strncpy(tmp->chan->language, chan->language, sizeof(tmp->chan->language) - 1); | ||||
| 		strncpy(tmp->chan->accountcode, chan->accountcode, sizeof(tmp->chan->accountcode) - 1); | ||||
| 		tmp->chan->cdrflags = chan->cdrflags; | ||||
| 		if (ast_strlen_zero(tmp->chan->musicclass)) | ||||
| 			strncpy(tmp->chan->musicclass, chan->musicclass, sizeof(tmp->chan->musicclass) - 1); | ||||
| 		if (chan->ani) | ||||
| 			tmp->chan->ani = strdup(chan->ani); | ||||
| 		else | ||||
| 			tmp->chan->ani = NULL; | ||||
| 		/* Pass hidecallerid setting */ | ||||
| 		tmp->chan->restrictcid = chan->restrictcid; | ||||
| 		/* Pass callingpres setting */ | ||||
| 		tmp->chan->callingpres = chan->callingpres; | ||||
| 		tmp->chan->cid.cid_pres = chan->cid.cid_pres; | ||||
| 		/* Presense of ADSI CPE on outgoing channel follows ours */ | ||||
| 		tmp->chan->adsicpe = chan->adsicpe; | ||||
| 		/* pass the digital flag */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user