All pastes #1466827 Raw Edit

clueless

public text v1 · immutable
#1466827 ·published 2009-06-19 21:35 UTC
rendered paste body
Index: cel/cel_adaptive_odbc.c===================================================================--- cel/cel_adaptive_odbc.c	(revision 202004)+++ cel/cel_adaptive_odbc.c	(working copy)@@ -352,43 +352,15 @@ 	char colbuf[1024], *colptr; 	SQLHSTMT stmt = NULL; 	SQLLEN rows = 0;-	enum ast_cel_event_type eventtype;-	const char *userdefname = 0;-	struct timeval eventtime = {0};-	const char *cid_ani, *cid_rdnis, *cid_name, *cid_num, *cid_dnid;-	const char *exten, *context, *channame, *appname, *appdata, *accountcode, *peeraccount, *uniqueid, *linkedid, *userfield, *peer;-	unsigned int amaflag;+	struct ast_cel_event_record *record = ast_cel_fill_record(event); -	if (!sql || !sql2) {+	if (!sql || !sql2 || !record) { 		if (sql) 			ast_free(sql); 		if (sql2) 			ast_free(sql2); 		return; 	}-	eventtype = ast_event_get_ie_uint(event, AST_EVENT_IE_CEL_EVENT_TYPE);-	eventtime.tv_sec = ast_event_get_ie_uint(event, AST_EVENT_IE_CEL_EVENT_TIME);-	eventtime.tv_usec = ast_event_get_ie_uint(event, AST_EVENT_IE_CEL_EVENT_TIME_USEC);-	if (eventtype == AST_CEL_USER_DEFINED) {-		userdefname = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_USEREVENT_NAME);-	}-	cid_name = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_CIDNAME);-	cid_num = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_CIDNUM);-	cid_ani = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_CIDANI);-	cid_rdnis = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_CIDRDNIS);-	cid_dnid = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_CIDDNID);-	exten = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_EXTEN);-	context = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_CONTEXT);-	channame = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_CHANNAME);-	appname = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_APPNAME);-	appdata = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_APPDATA);-	accountcode = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_ACCTCODE);-	peeraccount = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_ACCTCODE);-	uniqueid = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_UNIQUEID);-	linkedid = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_LINKEDID);-	amaflag = ast_event_get_ie_uint(event, AST_EVENT_IE_CEL_AMAFLAGS);-	userfield = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_USERFIELD);-	peer = ast_event_get_ie_str(event, AST_EVENT_IE_CEL_PEER);  	if (AST_RWLIST_RDLOCK(&odbc_tables)) { 		ast_log(LOG_ERROR, "Unable to lock table list.  Insert CEL(s) failed.\n");@@ -418,48 +390,48 @@ 			if (entry->staticvalue) { 				colptr = ast_strdupa(entry->staticvalue); 			} else if (datefield) {-				struct timeval date_tv = eventtime;+				struct timeval date_tv = record->event_time; 				struct ast_tm tm = { 0, }; 				ast_localtime(&date_tv, &tm, tableptr->usegmtime ? "UTC" : NULL); 				ast_strftime(colbuf, sizeof(colbuf), "%Y-%m-%d %H:%M:%S", &tm); 				colptr = colbuf; 			} else { 				if (strcmp(entry->celname, "userdeftype") == 0) {-					strncpy(colbuf, userdefname, sizeof(colbuf));+					strncpy(colbuf, record->user_defined_name, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "cid_name") == 0) {-					strncpy(colbuf, cid_name, sizeof(colbuf));+					strncpy(colbuf, record->caller_id_name, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "cid_num") == 0) {-					strncpy(colbuf, cid_num, sizeof(colbuf));+					strncpy(colbuf, record->caller_id_num, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "cid_ani") == 0) {-					strncpy(colbuf, cid_ani, sizeof(colbuf));+					strncpy(colbuf, record->caller_id_ani, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "cid_rdnis") == 0) {-					strncpy(colbuf, cid_rdnis, sizeof(colbuf));+					strncpy(colbuf, record->caller_id_rdnis, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "cid_dnid") == 0) {-					strncpy(colbuf, cid_dnid, sizeof(colbuf));+					strncpy(colbuf, record->caller_id_dnid, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "exten") == 0) {-					strncpy(colbuf, exten, sizeof(colbuf));+					strncpy(colbuf, record->extension, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "context") == 0) {-					strncpy(colbuf, context, sizeof(colbuf));+					strncpy(colbuf, record->context, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "channame") == 0) {-					strncpy(colbuf, channame, sizeof(colbuf));+					strncpy(colbuf, record->channel_name, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "appname") == 0) {-					strncpy(colbuf, appname, sizeof(colbuf));+					strncpy(colbuf, record->application_name, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "appdata") == 0) {-					strncpy(colbuf, appdata, sizeof(colbuf));+					strncpy(colbuf, record->application_data, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "accountcode") == 0) {-					strncpy(colbuf, accountcode, sizeof(colbuf));+					strncpy(colbuf, record->account_code, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "peeraccount") == 0) {-					strncpy(colbuf, peeraccount, sizeof(colbuf));+					strncpy(colbuf, record->peer_account, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "uniqueid") == 0) {-					strncpy(colbuf, uniqueid, sizeof(colbuf));+					strncpy(colbuf, record->unique_id, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "linkedid") == 0) {-					strncpy(colbuf, linkedid, sizeof(colbuf));+					strncpy(colbuf, record->linked_id, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "userfield") == 0) {-					strncpy(colbuf, userfield, sizeof(colbuf));+					strncpy(colbuf, record->user_field, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "peer") == 0) {-					strncpy(colbuf, peer, sizeof(colbuf));+					strncpy(colbuf, record->peer, sizeof(colbuf)); 				} else if (strcmp(entry->celname, "amaflags") == 0) {-					snprintf(colbuf, sizeof(colbuf), "%d", amaflag);+					snprintf(colbuf, sizeof(colbuf), "%d", record->amaflag); 				} else { 					colbuf[0] = 0; 				}@@ -496,7 +468,8 @@ 					 * form (but only when we're dealing with a character-based field). 					 */ 					if (strcasecmp(entry->name, "eventtype") == 0) {-						snprintf(colbuf, sizeof(colbuf), "%s", ast_cel_get_type_name(eventtype));+						snprintf(colbuf, sizeof(colbuf), "%s",+							ast_cel_get_type_name(record->event_type)); 					}  					/* Truncate too-long fields */@@ -591,7 +564,7 @@ 					{ 						int integer = 0; 						if (strcasecmp(entry->name, "eventtype") == 0) {-							integer = (int)eventtype;+							integer = (int) record->event_type; 						} else if (sscanf(colptr, "%d", &integer) != 1) { 							ast_log(LOG_WARNING, "CEL variable %s is not an integer.\n", entry->name); 							continue;@@ -606,7 +579,7 @@ 					{ 						long long integer = 0; 						if (strcasecmp(entry->name, "eventtype") == 0) {-							integer = (long long)eventtype;+							integer = (long long) record->event_type; 						} else if (sscanf(colptr, "%lld", &integer) != 1) { 							ast_log(LOG_WARNING, "CEL variable %s is not an integer.\n", entry->name); 							continue;@@ -621,7 +594,7 @@ 					{ 						short integer = 0; 						if (strcasecmp(entry->name, "eventtype") == 0) {-							integer = (short)eventtype;+							integer = (short) record->event_type; 						} else if (sscanf(colptr, "%hd", &integer) != 1) { 							ast_log(LOG_WARNING, "CEL variable %s is not an integer.\n", entry->name); 							continue;@@ -636,7 +609,7 @@ 					{ 						char integer = 0; 						if (strcasecmp(entry->name, "eventtype") == 0) {-							integer = (char)eventtype;+							integer = (char) record->event_type; 						} else if (sscanf(colptr, "%hhd", &integer) != 1) { 							ast_log(LOG_WARNING, "CEL variable %s is not an integer.\n", entry->name); 							continue;@@ -651,7 +624,7 @@ 					{ 						char integer = 0; 						if (strcasecmp(entry->name, "eventtype") == 0) {-							integer = (char)eventtype;+							integer = (char) record->event_type; 						} else if (sscanf(colptr, "%hhd", &integer) != 1) { 							ast_log(LOG_WARNING, "CEL variable %s is not an integer.\n", entry->name); 							continue;@@ -669,7 +642,7 @@ 					{ 						double number = 0.0; 						if (strcasecmp(entry->name, "eventtype") == 0) {-							number = (double)eventtype;+							number = (double)record->event_type; 						} else if (sscanf(colptr, "%lf", &number) != 1) { 							ast_log(LOG_WARNING, "CEL variable %s is not an numeric type.\n", entry->name); 							continue;@@ -686,7 +659,7 @@ 					{ 						double number = 0.0; 						if (strcasecmp(entry->name, "eventtype") == 0) {-							number = (double)eventtype;+							number = (double)record->event_type; 						} else if (sscanf(colptr, "%lf", &number) != 1) { 							ast_log(LOG_WARNING, "CEL variable %s is not an numeric type.\n", entry->name); 							continue;Index: include/asterisk/cel.h===================================================================--- include/asterisk/cel.h	(revision 202004)+++ include/asterisk/cel.h	(working copy)@@ -169,6 +169,31 @@ 		char *userdefevname, const char *extra, 		const struct ast_channel *peer2); +struct ast_cel_event_record {+	enum ast_cel_event_type event_type;+	struct timeval event_time;+	const char *user_defined_name;+	const char *caller_id_name;+	const char *caller_id_num;+	const char *caller_id_ani;+	const char *caller_id_rdnis;+	const char *caller_id_dnid;+	const char *extension;+	const char *context;+	const char *channel_name;+	const char *application_name;+	const char *application_data;+	const char *account_code;+	const char *peer_account;+	const char *unique_id;+	const char *linked_id;+	uint amaflag;+	const char *user_field;+	const char *peer;+};++struct ast_cel_event_record *ast_cel_fill_record(const struct ast_event *event);+ #if defined(__cplusplus) || defined(c_plusplus) } #endifIndex: main/cel.c===================================================================--- main/cel.c	(revision 202004)+++ main/cel.c	(working copy)@@ -590,7 +590,43 @@ 	} } +struct ast_cel_event_record *ast_cel_fill_record(const struct ast_event *e)+{+	struct ast_cel_event_record *r = ast_calloc(1, sizeof(*r)); +	if (!r)+		return NULL;++	r->event_type = ast_event_get_ie_uint(e, AST_EVENT_IE_CEL_EVENT_TYPE);++	r->event_time.tv_sec = ast_event_get_ie_uint(e, AST_EVENT_IE_CEL_EVENT_TIME);+	r->event_time.tv_usec = ast_event_get_ie_uint(e, AST_EVENT_IE_CEL_EVENT_TIME_USEC);++	if (r->event_type == AST_CEL_USER_DEFINED) {+		r->user_defined_name = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_USEREVENT_NAME);+	}++	r->caller_id_name   = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_CIDNAME);+	r->caller_id_num    = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_CIDNUM);+	r->caller_id_ani    = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_CIDANI);+	r->caller_id_rdnis  = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_CIDRDNIS);+	r->caller_id_dnid   = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_CIDDNID);+	r->extension        = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_EXTEN);+	r->context          = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_CONTEXT);+	r->channel_name     = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_CHANNAME);+	r->application_name = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_APPNAME);+	r->application_data = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_APPDATA);+	r->account_code     = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_ACCTCODE);+	r->peer_account     = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_ACCTCODE);+	r->unique_id        = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_UNIQUEID);+	r->linked_id        = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_LINKEDID);+	r->amaflag          = ast_event_get_ie_uint(e, AST_EVENT_IE_CEL_AMAFLAGS);+	r->user_field       = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_USERFIELD);+	r->peer             = ast_event_get_ie_str(e, AST_EVENT_IE_CEL_PEER);++	return r;+}+ int ast_cel_engine_init(void) { 	int res;