if (dh->dccph_type == DCCP_PKT_DATAACK) { 
if (dh->dccph_type == DCCP_PKT_DATAACK || dh->dccph_type == DCCP_PKT_DATA) { 
static int dccp_rcv_respond_partopen_state_process(struct sock *sk,						   struct sk_buff *skb,						   const struct dccp_hdr *dh,						   const unsigned len){	int queued = 0;	switch (dh->dccph_type) {	case DCCP_PKT_RESET:		inet_csk_clear_xmit_timer(sk, ICSK_TIME_DACK);		break;	case DCCP_PKT_DATAACK:	case DCCP_PKT_ACK:		/*		 * FIXME: we should be reseting the PARTOPEN (DELACK) timer		 * here but only if we haven't used the DELACK timer for		 * something else, like sending a delayed ack for a TIMESTAMP		 * echo, etc, for now were not clearing it, sending an extra		 * ACK when there is nothing else to do in DELACK is not a big		 * deal after all.		 */		/* Stop the PARTOPEN timer */		if (sk->sk_state == DCCP_PARTOPEN)			inet_csk_clear_xmit_timer(sk, ICSK_TIME_DACK);		dccp_sk(sk)->dccps_osr = DCCP_SKB_CB(skb)->dccpd_seq;		dccp_set_state(sk, DCCP_OPEN);		if (dh->dccph_type == DCCP_PKT_DATAACK) {			dccp_rcv_established(sk, skb, dh, len);			queued = 1; /* packet was queued				       (by dccp_rcv_established) */		}		break;	}	return queued;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/2a9bc9bb4d3a4570a8a48aadf071b91e657adb89/input.c/clean/net/dccp/input.c