[Javanetsim-cvs] javaNetSim/core/protocolsuite/tcp_ip Echo_tcp.java,1.11,1.12 ProtocolStack.java,1.2
Status: Beta
Brought to you by:
darkkey
From: gift <gi...@us...> - 2005-11-30 13:02:40
|
Update of /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14143/core/protocolsuite/tcp_ip Modified Files: Echo_tcp.java ProtocolStack.java Tcp.java Log Message: TCP working v.2.0 Index: ProtocolStack.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip/ProtocolStack.java,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** ProtocolStack.java 29 Nov 2005 23:31:58 -0000 1.23 --- ProtocolStack.java 30 Nov 2005 13:02:32 -0000 1.24 *************** *** 1759,1763 **** SourceIPAddress=getIPAddress(FirstInterfaceName); ! TCP_packet tosend = mTCPprotocol.sendTCPPacket(DestIPAddress,SourceIPAddress,destPort,srcPort,inTCPMessage,flags,acknow_num); return tosend; --- 1759,1763 ---- SourceIPAddress=getIPAddress(FirstInterfaceName); ! TCP_packet tosend = mTCPprotocol.getTCPPacket_clone(DestIPAddress,SourceIPAddress,destPort,srcPort,inTCPMessage,flags,acknow_num); return tosend; Index: Tcp.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip/Tcp.java,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** Tcp.java 29 Nov 2005 23:31:59 -0000 1.16 --- Tcp.java 30 Nov 2005 13:02:32 -0000 1.17 *************** *** 174,188 **** this.sent_duplicates=0; this.seq_number=0; if (!this.ReceivedSegments.isEmpty()) this.ReceivedSegments.removeAllElements(); ! if (!this.SentACKs.isEmpty()) ! { ! Set set = this.SentACKs.keySet(); ! Iterator itr = set.iterator(); ! while (itr.hasNext()) { ! this.SentACKs.remove(itr.next()); } ! } ! if (!this.ReceivedACKs.isEmpty()) this.ReceivedACKs.removeAllElements(); if (!this.SegmentsToResend.isEmpty()) { --- 174,198 ---- this.sent_duplicates=0; this.seq_number=0; + if (!this.ReceivedSegments.isEmpty()) this.ReceivedSegments.removeAllElements(); ! if (!this.ReceivedACKs.isEmpty()) this.ReceivedACKs.removeAllElements(); ! ! try { ! if (!this.SentACKs.isEmpty()) { ! Set set = this.SentACKs.keySet(); ! Iterator itr = set.iterator(); ! while (itr.hasNext()) ! { ! this.SentACKs.remove(itr.next()); ! } } ! } catch(Exception e) ! { ! System.out.println("TCP Element.SentACKs reset error: " + e.toString()); ! } ! ! ! try { if (!this.SegmentsToResend.isEmpty()) { *************** *** 194,200 **** } } this.isFIN_sent=false; this.isFIN_confirmed=false; ! this.isPassive=false; } } --- 204,216 ---- } } + + } catch(Exception e) + { + System.out.println("TCP Element.SegmentsToResend reset error: " + e.toString()); + } + this.isFIN_sent=false; this.isFIN_confirmed=false; ! this.isPassive=false; } } *************** *** 468,472 **** newElm.connectedtoPort=0; ! PortTable.put(inPort,newElm); //hash table update } } else // --- 484,488 ---- newElm.connectedtoPort=0; ! PortTable.put(new Integer (inPort),newElm); //hash table update } } else // *************** *** 645,649 **** //pushing a copy into Hashtable ! Elm.SegmentsToResend.put((Integer)s_num, tosend_clone); if (a_num==0 && flags[4]) //first SYN packet was sent => now he have to change port status to busy, as we will get reply to this port --- 661,665 ---- //pushing a copy into Hashtable ! Elm.SegmentsToResend.put(new Integer(s_num), tosend_clone); if (a_num==0 && flags[4]) //first SYN packet was sent => now he have to change port status to busy, as we will get reply to this port *************** *** 656,661 **** if (flags[5]) Elm.isFIN_sent=true; ! Elm=null; ! /* URG, ACK, PSH, RST, SYN, FIN */ //Create Layer info LayerInfo TCP_Info = new LayerInfo(getClass().getName()); --- 672,676 ---- if (flags[5]) Elm.isFIN_sent=true; ! Elm=null; //Create Layer info LayerInfo TCP_Info = new LayerInfo(getClass().getName()); *************** *** 667,671 **** if (flags[4]) s="Created TCP SYN-packet for " + inDestIPAddress + ":" + indestPort +"."; if (flags[5]) s="Created TCP FIN-packet for " + inDestIPAddress + ":" + indestPort +"."; ! if (! (flags[4] || flags[5]) ) s="Created TCP packet for " + inDestIPAddress + ":" + indestPort +"."; TCP_Info.setDescription(s); Simulation.addLayerInfo(TCP_Info); --- 682,687 ---- if (flags[4]) s="Created TCP SYN-packet for " + inDestIPAddress + ":" + indestPort +"."; if (flags[5]) s="Created TCP FIN-packet for " + inDestIPAddress + ":" + indestPort +"."; ! if (!(flags[4] || flags[5])) s="Created TCP data packet for " + inDestIPAddress + ":" + indestPort +"."; ! if (!(flags[4] || flags[5]) && flags[1]) s="Created TCP acknowledgement packet for " + inDestIPAddress + ":" + indestPort +"."; TCP_Info.setDescription(s); Simulation.addLayerInfo(TCP_Info); *************** *** 762,766 **** { //we have sent ACK for received segment => adding it to SentACKs ! Elm.SentACKs.put((Integer)inPacket.get_sequence_number(), (TCP_packet) mParentStack.getTCPSegment_clone(listener,msg,flags,ack_num)); } //listener.RecvData(inPacket.getTCP_message()); we do not receive segment because this is a SYN-packet --- 778,782 ---- { //we have sent ACK for received segment => adding it to SentACKs ! Elm.SentACKs.put(new Integer(inPacket.get_sequence_number()), (TCP_packet) mParentStack.getTCPSegment_clone(listener,msg,flags,ack_num)); } //listener.RecvData(inPacket.getTCP_message()); we do not receive segment because this is a SYN-packet *************** *** 809,812 **** --- 825,829 ---- //deleting from SegmentsToResend the segmet with the acknowledgment number we have received NOTE: dec by 1 is used see RFC Elm.SegmentsToResend.remove((Integer)our_ack-1); + // if (Elm.SegmentsToResend.remove((Integer)our_ack-1)==null) {System.out.println("Error here");} //now we have to send last ACK-segment (with SYN=false, seq_num=1, ack_num=1) *************** *** 820,824 **** { //we have sent ACK for received segment => adding it to SentACKs ! Elm.SentACKs.put((Integer)inPacket.get_sequence_number(), (TCP_packet) mParentStack.getTCPSegment_clone(listener,msg,flags,ack_num)); } //listener.RecvData(inPacket.getTCP_message()); we do not receive segment because this is a SYN-packet --- 837,841 ---- { //we have sent ACK for received segment => adding it to SentACKs ! Elm.SentACKs.put(new Integer(inPacket.get_sequence_number()), (TCP_packet) mParentStack.getTCPSegment_clone(listener,msg,flags,ack_num)); } //listener.RecvData(inPacket.getTCP_message()); we do not receive segment because this is a SYN-packet *************** *** 871,878 **** //deleting from SegmentsToResend the segmet with the acknowledgment number we have received NOTE: dec by 1 is used see RFC ! Elm.SegmentsToResend.remove((Integer)our_ack-1); //now we have to send ACK-segment (with SYN=false, seq_num=XX, ack_num=XX) ! if (Elm.isFIN_sent==false) { Elm.isPassive=true; --- 888,895 ---- //deleting from SegmentsToResend the segmet with the acknowledgment number we have received NOTE: dec by 1 is used see RFC ! //if (Elm.SegmentsToResend.remove((Integer)our_ack-1)==null) {System.out.println("Error here");} //now we have to send ACK-segment (with SYN=false, seq_num=XX, ack_num=XX) ! if (!Elm.isFIN_sent) { Elm.isPassive=true; *************** *** 886,894 **** { //we have sent ACK for received segment => adding it to SentACKs ! Elm.SentACKs.put((Integer)inPacket.get_sequence_number(), (TCP_packet) mParentStack.getTCPSegment_clone(listener,msg,flags,ack_num)); } } else { ! if (Elm.isFIN_confirmed==false) { String msg=""; --- 903,911 ---- { //we have sent ACK for received segment => adding it to SentACKs ! Elm.SentACKs.put(new Integer(inPacket.get_sequence_number()), (TCP_packet) mParentStack.getTCPSegment_clone(listener,msg,flags,ack_num)); } } else { ! if (!Elm.isFIN_confirmed) { String msg=""; *************** *** 901,905 **** { //we have sent ACK for received segment => adding it to SentACKs ! Elm.SentACKs.put((Integer)inPacket.get_sequence_number(), (TCP_packet) mParentStack.getTCPSegment_clone(listener,msg,flags,ack_num)); } } else --- 918,922 ---- { //we have sent ACK for received segment => adding it to SentACKs ! Elm.SentACKs.put(new Integer(inPacket.get_sequence_number()), (TCP_packet) mParentStack.getTCPSegment_clone(listener,msg,flags,ack_num)); } } else *************** *** 914,921 **** { //we have sent ACK for received segment => adding it to SentACKs ! Elm.SentACKs.put((Integer)inPacket.get_sequence_number(), (TCP_packet) mParentStack.getTCPSegment_clone(listener,msg,flags,ack_num)); ! } } ! ClosePort((Application)Elm.application); //FIN sent and confirmed!!! Closing connection } --- 931,942 ---- { //we have sent ACK for received segment => adding it to SentACKs ! Elm.SentACKs.put(new Integer(inPacket.get_sequence_number()), (TCP_packet) mParentStack.getTCPSegment_clone(listener,msg,flags,ack_num)); ! } ! } else ! { ! ClosePort((Application)Elm.application); //FIN sent and confirmed!!! Closing connection in case isPassive==true } ! // Active application has to disconnect by calling Application.Disconnect(); ! } *************** *** 971,974 **** --- 992,996 ---- //deleting from SegmentsToResend the segmet with the acknowledgment number we have received NOTE: dec by 1 is used see RFC Elm.SegmentsToResend.remove((Integer)our_ack-1); + // if (Elm.SegmentsToResend.remove((Integer)our_ack-1)==null) {System.out.println("Error here");} } else *************** *** 983,991 **** //our_ack==2 when connection is established // if ((our_ack!=2 || Elm.sent_segments!=2) && Elm.PortStatus!=1) ! //{ if (mParentStack.sendTCPSegment(listener,msg,flags,ack_num)) { //we have sent ACK for received segment => adding it to SentACKs ! Elm.SentACKs.put((Integer)inPacket.get_sequence_number(), (TCP_packet) mParentStack.getTCPSegment_clone(listener,msg,flags,ack_num)); } //} --- 1005,1013 ---- //our_ack==2 when connection is established // if ((our_ack!=2 || Elm.sent_segments!=2) && Elm.PortStatus!=1) ! //{ if (mParentStack.sendTCPSegment(listener,msg,flags,ack_num)) { //we have sent ACK for received segment => adding it to SentACKs ! Elm.SentACKs.put(new Integer(inPacket.get_sequence_number()), (TCP_packet) mParentStack.getTCPSegment_clone(listener,msg,flags,ack_num)); } //} *************** *** 1004,1009 **** Simulation.addLayerInfo(TCP_Info); ! //if (Elm.received_segments>2) ! listener.RecvData(inPacket.getTCP_message()); } --- 1026,1031 ---- Simulation.addLayerInfo(TCP_Info); ! // if (Elm.received_segments>2) ! listener.RecvData(inPacket.getTCP_message()); } *************** *** 1035,1038 **** --- 1057,1110 ---- } } + + + + /** + * This method returns the TCP packet + * @author gift (sourceforge.net user) + * @param inDestIPAddress destination IP address + * @param inSourceIPAddress our IP address + * @param indestPort destination port number + * @param insrcPort our port number + * @param inMessage TCP message to send + * @param flags[] 6 flags to set in segment + * @param acknow_num int ack number of the segment we want to send + * @return TCP_packet to send in Network Layer + * @exception TransportLayerException + * @version v0.30 + * @see TransportLayerException + */ + + public TCP_packet getTCPPacket_clone(String inDestIPAddress,String inSourceIPAddress, int indestPort, int insrcPort, String inMessage, boolean flags[], int acknow_num) throws TransportLayerException, LowLinkException + { + //check if window is available + TCP_HashTableElement Elm; + Elm = (TCP_HashTableElement) PortTable.get(insrcPort); + + int s_num; + int a_num; + TCP_packet tosend_clone = new TCP_packet(inDestIPAddress,inSourceIPAddress,indestPort,insrcPort); + + tosend_clone.setTCP_message(inMessage); + //now we set all the flags + /* URG, ACK, PSH, RST, SYN, FIN */ + tosend_clone.set_URG_flag(flags[0]); + tosend_clone.set_ACK_flag(flags[1]); + tosend_clone.set_PSH_flag(flags[2]); + tosend_clone.set_RST_flag(flags[3]); + tosend_clone.set_SYN_flag(flags[4]); + tosend_clone.set_FIN_flag(flags[5]); + + //here we push out segment in Hashtable SegmentsToResend and increment counters + s_num=Elm.seq_number; //getting sequence number 0-for SYN + if (Elm.ReceivedSegments.isEmpty()) a_num=0; else a_num=acknow_num; //(Integer)Elm.ReceivedSegments.lastElement()+1; //getting ACK number 0 - for SYN, 1 - as a reply for SYN ... so on + + tosend_clone.set_sequence_number(s_num); + tosend_clone.set_acknowledgment_number(a_num); + + Elm=null; + + return tosend_clone; + } Index: Echo_tcp.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip/Echo_tcp.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** Echo_tcp.java 29 Nov 2005 23:31:58 -0000 1.11 --- Echo_tcp.java 30 Nov 2005 13:02:32 -0000 1.12 *************** *** 25,28 **** --- 25,29 ---- * * @author key + * @author gift (sourceforge.net user) */ public class Echo_tcp extends Application{ *************** *** 159,163 **** SendData(Data); ! mParentStack.FinalizeTCP(this); //will close both connections LayerInfo protInfo3 = new LayerInfo(getClass().getName()); --- 160,164 ---- SendData(Data); ! mParentStack.FinalizeTCP(this); //will close client connection LayerInfo protInfo3 = new LayerInfo(getClass().getName()); *************** *** 167,173 **** protInfo3.setDescription("Server closing connection. Now listening on " + listenPort + "."); Simulation.addLayerInfo(protInfo3); - // Disconnect(); Listen(); }catch(Exception e){ ///*TODO*: here to catch --- 168,177 ---- protInfo3.setDescription("Server closing connection. Now listening on " + listenPort + "."); Simulation.addLayerInfo(protInfo3); + + + Disconnect(); Listen(); + }catch(Exception e){ ///*TODO*: here to catch *************** *** 196,200 **** Simulation.addLayerInfo(protInfo); ! SendData(Data); } else { --- 200,206 ---- Simulation.addLayerInfo(protInfo); ! SendData(Data); ! ! //SendData("CLIENTTTTT-Botva"); } else { |