mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	Merged revisions 287833 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r287833 | twilson | 2010-09-20 23:37:44 -0500 (Mon, 20 Sep 2010) | 3 lines Don't generate connected line buffer twice for comparison ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@287834 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -8227,44 +8227,21 @@ int ast_connected_line_parse_data(const unsigned char *data, size_t datalen, str | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| /*! \brief Determine if two ast_party_connected_line structures differ | ||||
|  * | ||||
|  * \param c1 One of the structs to compare | ||||
|  * \param c2 The other struct to compare | ||||
|  * \retval 0 No difference or one of the structs is NULL | ||||
|  * \retval non-zero The structs differ | ||||
|  */ | ||||
| static int connected_line_differ(const struct ast_party_connected_line *c1, const struct ast_party_connected_line *c2) | ||||
| { | ||||
| 	unsigned char buf1[1024] = { 0, }; | ||||
| 	unsigned char buf2[sizeof(buf1)] = { 0, }; | ||||
|  | ||||
| 	if (!c1 || !c2) { | ||||
| 		return 0; | ||||
| 	} | ||||
|  | ||||
| 	ast_connected_line_build_data(buf1, sizeof(buf1), c1, NULL); | ||||
| 	ast_connected_line_build_data(buf2, sizeof(buf2), c2, NULL); | ||||
|  | ||||
| 	return memcmp(buf1, buf2, sizeof(buf1)); | ||||
| } | ||||
|  | ||||
| void ast_channel_update_connected_line(struct ast_channel *chan, const struct ast_party_connected_line *connected, const struct ast_set_party_connected_line *update) | ||||
| { | ||||
| 	unsigned char data[1024];	/* This should be large enough */ | ||||
| 	unsigned char data[1024] = { 0, };	/* This should be large enough */ | ||||
| 	unsigned char data2[sizeof(data)] = { 0, }; | ||||
| 	size_t datalen; | ||||
|  | ||||
| 	if (!connected_line_differ(&chan->connected, connected)) { | ||||
| 		ast_debug(1, "No change, so ignoring update\n"); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	datalen = ast_connected_line_build_data(data, sizeof(data), connected, update); | ||||
| 	if (datalen == (size_t) -1) { | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	ast_indicate_data(chan, AST_CONTROL_CONNECTED_LINE, data, datalen); | ||||
| 	/* Only send an update if the connected line info is different or the channels info is suspect */ | ||||
| 	if (ast_connected_line_build_data(data2, sizeof(data2), &chan->connected, update) == -1 || memcmp(data, data2, sizeof(data))) { | ||||
| 		ast_indicate_data(chan, AST_CONTROL_CONNECTED_LINE, data, datalen); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void ast_channel_queue_connected_line_update(struct ast_channel *chan, const struct ast_party_connected_line *connected, const struct ast_set_party_connected_line *update) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user