Просмотр исходного кода

Merge branch 'master' of ssh://git.sip-router.org/sip-router

modules/tm: allow calling of t_branch_timeout and t_branch_replied from
    tm:branch-failure event route
Juha Heinanen 12 лет назад
Родитель
Сommit
2be84576fb
4 измененных файлов с 62 добавлено и 0 удалено
  1. 27 0
      lib/kcore/statistics.c
  2. 33 0
      modules/pv/pv_trans.c
  3. 1 0
      modules/pv/pv_trans.h
  4. 1 0
      modules/snmpstats/snmpSIPPortTable.c

+ 27 - 0
lib/kcore/statistics.c

@@ -430,16 +430,27 @@ int get_total_bytes_waiting(void)
 	int *UDPList  = NULL;
 	int *TCPList  = NULL;
 	int *TLSList  = NULL;
+	int *UDP6List  = NULL;
+	int *TCP6List  = NULL;
+	int *TLS6List  = NULL;
 
 	int numUDPSockets  = 0;
 	int numTCPSockets  = 0; 
 	int numTLSSockets  = 0;
+	int numUDP6Sockets  = 0;
+	int numTCP6Sockets  = 0; 
+	int numTLS6Sockets  = 0;
 
 	/* Extract out the IP address address for UDP, TCP, and TLS, keeping
 	 * track of the number of IP addresses from each transport  */
 	numUDPSockets  = get_socket_list_from_proto(&UDPList,  PROTO_UDP);
 	numTCPSockets  = get_socket_list_from_proto(&TCPList,  PROTO_TCP);
 	numTLSSockets  = get_socket_list_from_proto(&TLSList,  PROTO_TLS);
+
+	numUDP6Sockets  = get_socket_list_from_proto_and_family(&UDP6List,  PROTO_UDP, AF_INET6);
+	numTCP6Sockets  = get_socket_list_from_proto_and_family(&TCP6List,  PROTO_TCP, AF_INET6);
+	numTLS6Sockets  = get_socket_list_from_proto_and_family(&TLS6List,  PROTO_TLS, AF_INET6);
+
 	/* Deliberately not looking at PROTO_WS or PROTO_WSS here as they are
 	   just upgraded TCP/TLS connections */
 
@@ -449,22 +460,38 @@ int get_total_bytes_waiting(void)
 	bytesWaiting  += get_used_waiting_queue(1, TCPList,  numTCPSockets);
 	bytesWaiting  += get_used_waiting_queue(1, TLSList,  numTLSSockets);
 
+	bytesWaiting  += get_used_waiting_queue(0, UDP6List,  numUDP6Sockets);
+	bytesWaiting  += get_used_waiting_queue(1, TCP6List,  numTCP6Sockets);
+	bytesWaiting  += get_used_waiting_queue(1, TLS6List,  numTLS6Sockets);
+
 	/* get_socket_list_from_proto() allocated a chunk of memory, so we need
 	 * to free it. */
 	if (numUDPSockets > 0)
 	{
 		pkg_free(UDPList);
 	}
+	if (numUDP6Sockets > 0)
+	{
+		pkg_free(UDP6List);
+	}
 
 	if (numTCPSockets > 0) 
 	{
 		pkg_free(TCPList);
 	}
+	if (numTCP6Sockets > 0) 
+	{
+		pkg_free(TCP6List);
+	}
 
 	if (numTLSSockets > 0)
 	{
 		pkg_free(TLSList);
 	}
+	if (numTLS6Sockets > 0)
+	{
+		pkg_free(TLS6List);
+	}
 
 	return bytesWaiting;
 }

+ 33 - 0
modules/pv/pv_trans.c

@@ -39,6 +39,7 @@
 #include "../../trim.h" 
 #include "../../pvapi.h"
 #include "../../dset.h"
+#include "../../basex.h"
 
 #include "../../parser/parse_param.h"
 #include "../../parser/parse_uri.h"
@@ -195,6 +196,32 @@ int tr_eval_string(struct sip_msg *msg, tr_param_t *tp, int subtype,
 			val->rs.s = _tr_buffer;
 			val->rs.len = i;
 			break;
+		case TR_S_ENCODEBASE64:
+			if(!(val->flags&PV_VAL_STR))
+				val->rs.s = int2str(val->ri, &val->rs.len);
+			i = base64_enc((unsigned char *) val->rs.s, val->rs.len,
+					(unsigned char *) _tr_buffer, TR_BUFFER_SIZE-1);
+			if (i < 0)
+				return -1;
+			_tr_buffer[i] = '\0';
+			memset(val, 0, sizeof(pv_value_t));
+			val->flags = PV_VAL_STR;
+			val->rs.s = _tr_buffer;
+			val->rs.len = i;
+			break;
+		case TR_S_DECODEBASE64:
+			if(!(val->flags&PV_VAL_STR))
+				val->rs.s = int2str(val->ri, &val->rs.len);
+			i = base64_dec((unsigned char *) val->rs.s, val->rs.len,
+					(unsigned char *) _tr_buffer, TR_BUFFER_SIZE-1);
+			if (i < 0 || (i == 0 && val->rs.len > 0))
+				return -1;
+			_tr_buffer[i] = '\0';
+			memset(val, 0, sizeof(pv_value_t));
+			val->flags = PV_VAL_STR;
+			val->rs.s = _tr_buffer;
+			val->rs.len = i;
+			break;
 		case TR_S_ESCAPECOMMON:
 			if(!(val->flags&PV_VAL_STR))
 				val->rs.s = int2str(val->ri, &val->rs.len);
@@ -1749,6 +1776,12 @@ char* tr_parse_string(str* in, trans_t *t)
 	} else if(name.len==11 && strncasecmp(name.s, "decode.hexa", 11)==0) {
 		t->subtype = TR_S_DECODEHEXA;
 		goto done;
+	} else if(name.len==13 && strncasecmp(name.s, "encode.base64", 13)==0) {
+		t->subtype = TR_S_ENCODEBASE64;
+		goto done;
+	} else if(name.len==13 && strncasecmp(name.s, "decode.base64", 13)==0) {
+		t->subtype = TR_S_DECODEBASE64;
+		goto done;
 	} else if(name.len==13 && strncasecmp(name.s, "escape.common", 13)==0) {
 		t->subtype = TR_S_ESCAPECOMMON;
 		goto done;

+ 1 - 0
modules/pv/pv_trans.h

@@ -37,6 +37,7 @@ enum _tr_type { TR_NONE=0, TR_STRING, TR_URI, TR_PARAMLIST, TR_NAMEADDR,
 enum _tr_s_subtype { 
 	TR_S_NONE=0, TR_S_LEN, TR_S_INT, TR_S_MD5, TR_S_SUBSTR,
 	TR_S_SELECT, TR_S_ENCODEHEXA, TR_S_DECODEHEXA,
+	TR_S_ENCODEBASE64, TR_S_DECODEBASE64,
 	TR_S_ESCAPECOMMON, TR_S_UNESCAPECOMMON, TR_S_ESCAPEUSER, TR_S_UNESCAPEUSER,
 	TR_S_ESCAPEPARAM, TR_S_UNESCAPEPARAM, TR_S_TOLOWER, TR_S_TOUPPER,
 	TR_S_STRIP, TR_S_STRIPTAIL, TR_S_PREFIXES, TR_S_PREFIXES_QUOT, TR_S_REPLACE,

+ 1 - 0
modules/snmpstats/snmpSIPPortTable.c

@@ -29,6 +29,7 @@
  * --------
  * 2006-11-23 initial version (jmagder)
  * 2013-02-24 Added SCTP support (oej)
+ * 2013-04-07 Added IPv6 support (oej)
  * 
  * Originally Generated with mib2c using mib2c.array-user.conf
  *