Ver código fonte

Avoid calling NULL methods!

tags/v0.9.3
Michael Brown 18 anos atrás
pai
commit
3fbfbad0f7
1 arquivos alterados com 22 adições e 12 exclusões
  1. 22
    12
      src/net/tcp.c

+ 22
- 12
src/net/tcp.c Ver arquivo

497
 	case TCP_SYN_RCVD:
497
 	case TCP_SYN_RCVD:
498
 	case TCP_ESTABLISHED:
498
 	case TCP_ESTABLISHED:
499
 		tcp_trans ( conn, TCP_FIN_WAIT_1 );
499
 		tcp_trans ( conn, TCP_FIN_WAIT_1 );
500
-		conn->tcp_op->closed ( conn, CONN_SNDCLOSE ); /* TODO: Check! */
500
+		if ( conn->tcp_op->closed )
501
+			conn->tcp_op->closed ( conn, CONN_SNDCLOSE ); /* TODO: Check! */
501
 		/* FIN consumes one byte on the snd stream */
502
 		/* FIN consumes one byte on the snd stream */
502
 //		conn->snd_una++;
503
 //		conn->snd_una++;
503
 		goto send_tcp_nomsg;
504
 		goto send_tcp_nomsg;
510
 		 */
511
 		 */
511
 		list_del ( &conn->list );
512
 		list_del ( &conn->list );
512
 		tcp_trans ( conn, TCP_CLOSED );
513
 		tcp_trans ( conn, TCP_CLOSED );
513
-		conn->tcp_op->closed ( conn, CONN_SNDCLOSE );
514
+		if ( conn->tcp_op->closed )
515
+			conn->tcp_op->closed ( conn, CONN_SNDCLOSE );
514
 		return 0;
516
 		return 0;
515
 	case TCP_CLOSE_WAIT:
517
 	case TCP_CLOSE_WAIT:
516
 		tcp_trans ( conn, TCP_LAST_ACK );
518
 		tcp_trans ( conn, TCP_LAST_ACK );
517
-		conn->tcp_op->closed ( conn, CONN_SNDCLOSE ); /* TODO: Check! */
519
+		if ( conn->tcp_op->closed )
520
+			conn->tcp_op->closed ( conn, CONN_SNDCLOSE ); /* TODO: Check! */
518
 		/* FIN consumes one byte on the snd stream */
521
 		/* FIN consumes one byte on the snd stream */
519
 //		conn->snd_una++;
522
 //		conn->snd_una++;
520
 		goto send_tcp_nomsg;
523
 		goto send_tcp_nomsg;
630
 	/* Set the advertised window */
633
 	/* Set the advertised window */
631
 	conn->rcv_win = pkb_available ( conn->tx_pkb );
634
 	conn->rcv_win = pkb_available ( conn->tx_pkb );
632
 	/* Call the senddata() call back function */
635
 	/* Call the senddata() call back function */
633
-	conn->tcp_op->senddata ( conn, conn->tx_pkb->data, 
634
-					pkb_available ( conn->tx_pkb ) );
636
+	if ( conn->tcp_op->senddata )
637
+		conn->tcp_op->senddata ( conn, conn->tx_pkb->data, 
638
+					 pkb_available ( conn->tx_pkb ) );
635
 	/* Send pure ACK if senddata() didn't call tcp_send() */
639
 	/* Send pure ACK if senddata() didn't call tcp_send() */
636
 	if ( conn->tx_pkb ) {
640
 	if ( conn->tx_pkb ) {
637
 		tcp_send ( conn, TCP_NOMSG, TCP_NOMSG_LEN );
641
 		tcp_send ( conn, TCP_NOMSG, TCP_NOMSG_LEN );
796
 				 * acked() callback function.
800
 				 * acked() callback function.
797
 				 */
801
 				 */
798
 				conn->snd_una = ntohl ( tcphdr->ack );
802
 				conn->snd_una = ntohl ( tcphdr->ack );
799
-				conn->tcp_op->connected ( conn );
803
+				if ( conn->tcp_op->connected )
804
+					conn->tcp_op->connected ( conn );
800
 				conn->tcp_flags |= TCP_ACK;
805
 				conn->tcp_flags |= TCP_ACK;
801
 				tcp_senddata ( conn );
806
 				tcp_senddata ( conn );
802
 				rc = 0;
807
 				rc = 0;
812
 	case TCP_SYN_RCVD:
817
 	case TCP_SYN_RCVD:
813
 		if ( tcphdr->flags & TCP_RST ) {
818
 		if ( tcphdr->flags & TCP_RST ) {
814
 			tcp_trans ( conn, TCP_LISTEN );
819
 			tcp_trans ( conn, TCP_LISTEN );
815
-			conn->tcp_op->closed ( conn, CONN_RESTART );
820
+			if ( conn->tcp_op->closed )
821
+				conn->tcp_op->closed ( conn, CONN_RESTART );
816
 			rc = 0;
822
 			rc = 0;
817
 			goto done;
823
 			goto done;
818
 		}
824
 		}
823
 			 * function nor does it send an ACK.
829
 			 * function nor does it send an ACK.
824
 			 */
830
 			 */
825
 			conn->snd_una = tcphdr->ack - 1;
831
 			conn->snd_una = tcphdr->ack - 1;
826
-			conn->tcp_op->connected ( conn );
832
+			if ( conn->tcp_op->connected )
833
+				conn->tcp_op->connected ( conn );
827
 			rc = 0;
834
 			rc = 0;
828
 			goto done;
835
 			goto done;
829
 		}
836
 		}
849
 		if ( tcphdr->flags & TCP_FIN ) {
856
 		if ( tcphdr->flags & TCP_FIN ) {
850
 			conn->rcv_nxt++;
857
 			conn->rcv_nxt++;
851
 			conn->tcp_flags |= TCP_ACK;
858
 			conn->tcp_flags |= TCP_ACK;
852
-			conn->tcp_op->closed ( conn, CONN_SNDCLOSE );
859
+			if ( conn->tcp_op->closed )
860
+				conn->tcp_op->closed ( conn, CONN_SNDCLOSE );
853
 
861
 
854
 			if ( tcphdr->flags & TCP_ACK ) {
862
 			if ( tcphdr->flags & TCP_ACK ) {
855
 				tcp_trans ( conn, TCP_TIME_WAIT );
863
 				tcp_trans ( conn, TCP_TIME_WAIT );
920
 		}
928
 		}
921
 		/* Invoke the acked() callback */
929
 		/* Invoke the acked() callback */
922
 		conn->snd_una += acked;
930
 		conn->snd_una += acked;
923
-		conn->tcp_op->acked ( conn, acked );
931
+		if ( conn->tcp_op->acked )
932
+			conn->tcp_op->acked ( conn, acked );
924
 	}
933
 	}
925
 	
934
 	
926
 	/**
935
 	/**
931
 		/* Check the sequence number */
940
 		/* Check the sequence number */
932
 		if ( conn->rcv_nxt == ntohl ( tcphdr->seq ) ) {
941
 		if ( conn->rcv_nxt == ntohl ( tcphdr->seq ) ) {
933
 			conn->rcv_nxt += toack;
942
 			conn->rcv_nxt += toack;
934
-			conn->tcp_op->newdata ( conn,
935
-						pkb->data + hlen, toack );
943
+			if ( conn->tcp_op->newdata )
944
+				conn->tcp_op->newdata ( conn, pkb->data + hlen,
945
+							toack );
936
 		} else {
946
 		} else {
937
 			DBG ( "Unexpected sequence number %lx (wanted %lx)\n",
947
 			DBG ( "Unexpected sequence number %lx (wanted %lx)\n",
938
 				ntohl ( tcphdr->ack ), conn->rcv_nxt );
948
 				ntohl ( tcphdr->ack ), conn->rcv_nxt );

Carregando…
Cancelar
Salvar