@@ -2136,7 +2136,7 @@ static int sip_trace(struct sip_msg *msg, trace_info_p info, int leg_flag)
21362136 }
21372137
21382138 set_sock_columns ( db_vals [4 ], db_vals [5 ], db_vals [6 ], fromip_buff ,
2139- & msg -> rcv . src_ip , msg -> rcv . src_port , msg -> rcv .proto );
2139+ get_rcv_src_ip ( & msg -> rcv ), get_rcv_src_port ( & msg -> rcv ) , msg -> rcv .proto );
21402140
21412141 set_sock_columns ( db_vals [7 ], db_vals [8 ], db_vals [9 ], toip_buff ,
21422142 TRACE_GET_DST_IP (msg ), TRACE_GET_DST_PORT (msg ), msg -> rcv .proto );
@@ -2223,7 +2223,7 @@ static int sip_trace_instance(struct sip_msg* msg,
22232223 }
22242224
22252225 set_sock_columns ( db_vals [4 ], db_vals [5 ], db_vals [6 ], fromip_buff ,
2226- & msg -> rcv . src_ip , msg -> rcv . src_port , msg -> rcv .proto );
2226+ get_rcv_src_ip ( & msg -> rcv ), get_rcv_src_port ( & msg -> rcv ) , msg -> rcv .proto );
22272227
22282228 set_sock_columns ( db_vals [7 ], db_vals [8 ], db_vals [9 ], toip_buff ,
22292229 TRACE_GET_DST_IP (msg ), TRACE_GET_DST_PORT (msg ), msg -> rcv .proto );
@@ -2449,9 +2449,11 @@ static void trace_msg_out(struct sip_msg* msg, str *sbuf,
24492449{
24502450 static char fromip_buff [IP_ADDR_MAX_STR_SIZE + 12 ];
24512451 static char toip_buff [IP_ADDR_MAX_STR_SIZE + 12 ];
2452- struct ip_addr to_ip ;
2452+ struct ip_addr to_ip , * ip ;
2453+ struct receive_info ri ;
24532454 trace_instance_p instance ;
24542455 str from_tag ;
2456+ unsigned int port ;
24552457
24562458 if (parse_from_and_callid (msg , & from_tag ) != 0 )
24572459 {
@@ -2513,12 +2515,18 @@ static void trace_msg_out(struct sip_msg* msg, str *sbuf,
25132515 {
25142516 set_columns_to_any (db_vals [7 ], db_vals [8 ], db_vals [9 ]);
25152517 } else {
2518+ if (proto != PROTO_UDP && info -> conn_id &&
2519+ tcp_get_rcv (info -> conn_id , & ri ) == 0 ) {
2520+ ip = get_rcv_src_ip (& ri );
2521+ port = get_rcv_src_port (& ri );
2522+ } else {
2523+ ip = & to_ip ;
2524+ port = (unsigned int )(send_sock && send_sock -> last_real_ports -> remote ?
2525+ send_sock -> last_real_ports -> remote :su_getport (to ));
2526+ }
25162527 su2ip_addr (& to_ip , to );
25172528 set_sock_columns ( db_vals [7 ], db_vals [8 ], db_vals [9 ], toip_buff ,
2518- & to_ip ,
2519- (unsigned long )(send_sock && send_sock -> last_real_ports -> remote ?
2520- send_sock -> last_real_ports -> remote :su_getport (to )),
2521- proto );
2529+ ip , port , proto );
25222530 }
25232531
25242532 db_vals [10 ].val .time_val = time (NULL );
@@ -2621,7 +2629,7 @@ static void trace_onreply_in(struct cell* t, int type, struct tmcb_params *ps,
26212629 db_vals [3 ].val .str_val .len = len ;
26222630
26232631 set_sock_columns ( db_vals [4 ], db_vals [5 ], db_vals [6 ], fromip_buff ,
2624- & msg -> rcv . src_ip , msg -> rcv . src_port , msg -> rcv .proto );
2632+ get_rcv_src_ip ( & msg -> rcv ), get_rcv_src_port ( & msg -> rcv ) , msg -> rcv .proto );
26252633
26262634 if (trace_local_ip .s && trace_local_ip .len > 0 ){
26272635 set_columns_to_trace_local_ip (db_vals [7 ], db_vals [8 ], db_vals [9 ]);
@@ -2690,12 +2698,14 @@ static void trace_onreply_out(struct cell* t, int type, struct tmcb_params *ps,
26902698 static char toip_buff [IP_ADDR_MAX_STR_SIZE + 12 ];
26912699 trace_instance_p instance ;
26922700 struct sip_msg * msg ;
2693- struct ip_addr to_ip ;
2701+ struct ip_addr to_ip , * ip ;
2702+ struct receive_info ri ;
26942703 int len ;
26952704 char statusbuf [8 ];
26962705 str * sbuf ;
26972706 struct dest_info * dst ;
26982707 str from_tag ;
2708+ unsigned int port ;
26992709
27002710 trace_info_t info ;
27012711
@@ -2797,13 +2807,19 @@ static void trace_onreply_out(struct cell* t, int type, struct tmcb_params *ps,
27972807 {
27982808 set_columns_to_any ( db_vals [7 ], db_vals [8 ], db_vals [9 ]);
27992809 } else {
2810+ if (dst -> proto != PROTO_UDP && info .conn_id &&
2811+ tcp_get_rcv (info .conn_id , & ri ) == 0 ) {
2812+ ip = get_rcv_src_ip (& ri );
2813+ port = get_rcv_src_port (& ri );
2814+ } else {
2815+ ip = & to_ip ;
2816+ port = (unsigned int )(dst -> send_sock && dst -> send_sock -> last_real_ports -> remote ?
2817+ dst -> send_sock -> last_real_ports -> remote :su_getport (& dst -> to ));
2818+ }
28002819 memset (& to_ip , 0 , sizeof (struct ip_addr ));
28012820 su2ip_addr (& to_ip , & dst -> to );
28022821 set_sock_columns ( db_vals [7 ], db_vals [8 ], db_vals [9 ], toip_buff ,
2803- & to_ip ,
2804- (unsigned long )(dst -> send_sock && dst -> send_sock -> last_real_ports -> remote ?
2805- dst -> send_sock -> last_real_ports -> remote :su_getport (& dst -> to )),
2806- dst -> proto );
2822+ ip , port , dst -> proto );
28072823 }
28082824
28092825 db_vals [10 ].val .time_val = time (NULL );
0 commit comments