浏览代码

acc: allow accounting only for external accounting engine

- have accounting via external engines without a need to have log flag set
Daniel-Constantin Mierla 7 年之前
父节点
当前提交
ccf71c68f7
共有 3 个文件被更改,包括 52 次插入3 次删除
  1. 46 0
      src/modules/acc/acc.c
  2. 4 1
      src/modules/acc/acc.h
  3. 2 2
      src/modules/acc/acc_logic.c

+ 46 - 0
src/modules/acc/acc.c

@@ -510,6 +510,52 @@ error:
 	return -1;
 }
 
+/**
+ * @brief test if acc flag from enternal engines is set
+ */
+int is_eng_acc_on(sip_msg_t *msg)
+{
+	acc_engine_t *e;
+
+	e = acc_api_get_engines();
+
+	if(e==NULL) {
+		return 0;
+	}
+	while(e) {
+		if(e->flags & 1) {
+			if(msg->flags & e->acc_flag) {
+				return 1;
+			}
+		}
+		e = e->next;
+	}
+	return 0;
+}
+
+/**
+ * @brief test if acc flag from enternal engines is set
+ */
+int is_eng_mc_on(sip_msg_t *msg)
+{
+	acc_engine_t *e;
+
+	e = acc_api_get_engines();
+
+	if(e==NULL) {
+		return 0;
+	}
+	while(e) {
+		if(e->flags & 1) {
+			if(msg->flags & e->missed_flag) {
+				return 1;
+			}
+		}
+		e = e->next;
+	}
+	return 0;
+}
+
 /**
  * @brief execute all acc engines for a SIP request event
  */

+ 4 - 1
src/modules/acc/acc.h

@@ -83,6 +83,9 @@ int  acc_db_init(const str* db_url);
 int  acc_db_init_child(const str* db_url);
 void acc_db_close(void);
 int  acc_db_request( struct sip_msg *req);
-int acc_get_db_handlers(void **vf, void **vh);
+int  acc_get_db_handlers(void **vf, void **vh);
+
+int  is_eng_acc_on(sip_msg_t *msg);
+int  is_eng_mc_on(sip_msg_t *msg);
 
 #endif

+ 2 - 2
src/modules/acc/acc_logic.c

@@ -66,10 +66,10 @@ struct acc_enviroment acc_env;
 #define is_db_mc_on(_rq)      is_acc_flag_set(_rq,db_missed_flag)
 
 #define is_acc_on(_rq) \
-	( (is_log_acc_on(_rq)) || (is_db_acc_on(_rq)) )
+	( (is_log_acc_on(_rq)) || (is_db_acc_on(_rq)) || (is_eng_acc_on(_rq)) )
 
 #define is_mc_on(_rq) \
-	( (is_log_mc_on(_rq)) || (is_db_mc_on(_rq)) )
+	( (is_log_mc_on(_rq)) || (is_db_mc_on(_rq)) || (is_eng_mc_on(_rq)) )
 
 #define skip_cancel(_rq) \
 	(((_rq)->REQ_METHOD==METHOD_CANCEL) && report_cancels==0)