Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1ee53587 authored by qctecmdr Service's avatar qctecmdr Service Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: netfilter: changes to handle contact address modification in SIP ALG"

parents 8dad0ded ca6ee8f6
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -111,13 +111,26 @@ static int map_addr(struct sk_buff *skb, unsigned int protoff,
		newaddr = ct->tuplehash[!dir].tuple.src.u3;
		newport = ct_sip_info->forced_dport ? :
			  ct->tuplehash[!dir].tuple.src.u.udp.port;
	} else if (nf_inet_addr_cmp(&ct->tuplehash[dir].tuple.src.u3, addr) &&
	    ct->tuplehash[dir].tuple.src.u.udp.port != port) {
		newaddr = ct->tuplehash[!dir].tuple.dst.u3;
		newport = 0;
	} else if (nf_inet_addr_cmp(&ct->tuplehash[dir].tuple.dst.u3, addr) &&
		   ct->tuplehash[dir].tuple.dst.u.udp.port != port) {
		newaddr = ct->tuplehash[!dir].tuple.src.u3;
		newport = 0;
	} else
		return 1;

	if (nf_inet_addr_cmp(&newaddr, addr) && newport == port)
		return 1;

	buflen = sip_sprintf_addr_port(ct, buffer, &newaddr, ntohs(newport));
	if (newport == 0)
		buflen = sip_sprintf_addr(ct, buffer, &newaddr, false);
	else
		buflen = sip_sprintf_addr_port(ct, buffer, &newaddr,
					       ntohs(newport));

	return mangle_packet(skb, protoff, dataoff, dptr, datalen,
			     matchoff, matchlen, buffer, buflen);
}