[Javanetsim-cvs] javaNetSim/core/protocolsuite/tcp_ip Echo.java,1.12,1.13 Udp.java,1.22,1.23
Status: Beta
Brought to you by:
darkkey
From: gift <gi...@us...> - 2005-11-21 14:56:13
|
Update of /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9298/core/protocolsuite/tcp_ip Modified Files: Echo.java Udp.java Log Message: Check LayerInfo - BUGS Index: Udp.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip/Udp.java,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** Udp.java 20 Nov 2005 22:03:59 -0000 1.22 --- Udp.java 21 Nov 2005 14:56:01 -0000 1.23 *************** *** 141,145 **** private ProtocolStack mParentStack; private static final int PORT_QUANT=100; //should be 100, only for dbg purposes ! private static final int PORT_START_NUMBER=3000; /** --- 141,146 ---- private ProtocolStack mParentStack; private static final int PORT_QUANT=100; //should be 100, only for dbg purposes ! private static final int PORT_START_NUMBER=3000; ! private static final int PORT_INIT = -1; //used in ListenPort && AlreadyListens /** *************** *** 523,527 **** --- 524,551 ---- }catch(Exception e){} } + + /** + * This method checks whether server is already listening to port + * @author gift (sourceforge.net user) + * @param application application that uses port + * @return int - port number if listens or PORT_INIT if not listens + * @version v0.10 + */ + public int AlreadyListens(Object application) + { + boolean bo=false; + int listensto=PORT_INIT; + int localPort; + + try { + localPort=getApplicationLocalPortNumber(application); + listensto=localPort; + } catch (TransportLayerException e) + {} + return listensto; + } + + /** * This method sets the UDP port status to 1 (is being listened to) *************** *** 539,593 **** public void ListenPort(Object application, int in_Port) throws TransportLayerException ! { ! Integer inPort = new Integer(in_Port); ! if (inPort>=0 && inPort<=10000) ! { ! //UDP_HashTableElement oldElm = null; ! UDP_HashTableElement Elm = null; ! ! if ( (Elm =(UDP_HashTableElement)PortTable.get(inPort)) !=null ) ! { ! switch(Elm.PortStatus) ! { ! case 0: //port is free => update such a record in hashtable ! ! //UDP_HashTableElement Elm = new UDP_HashTableElement(); ! Elm.PortStatus=1; ! Elm.application=application; ! Elm.connectedtoIP=""; ! Elm.connectedtoPort=0; ! ! //PortTable.remove(inPort); //delete old element ! //PortTable.put(inPort,Elm); //hash table update ! break; ! case 1: // port is being listened to by whom? ! int UID1=-2; ! int UID2=-1; ! UID1=((Application)Elm.application).getUID(); ! UID2=((Application)application).getUID(); ! ! if (UID1==UID2) ! { ! throw new TransportLayerException("UDP Error: already listening to port "+ inPort +"!"); ! } else throw new TransportLayerException("UDP Error: port "+ inPort +" is being listened to by another application! Can listen only to free ports." ); ! case 2: //port is busy => error ! throw new TransportLayerException("UDP Error: port "+ inPort +" is busy! Can listen only to free ports." ); ! // no "break" needed ;) ! default: //unknown port status ! throw new TransportLayerException("UDP Error: unknown port status! Port "+ inPort +" on host \""+ mParentStack.getParentNodeName()+"\"."); ! } ! } else ! { ! //create such a record in hashtable ! UDP_HashTableElement newElm = new UDP_HashTableElement(); ! newElm.PortStatus=1; ! newElm.application=application; ! newElm.connectedtoIP=""; ! newElm.connectedtoPort=0; ! ! PortTable.put(inPort,newElm); //hash table update ! } ! } else throw new TransportLayerException("UDP Error: can not listen to port "+ inPort +"! Use port range from 0 to 10000 to listen to."); } --- 563,638 ---- public void ListenPort(Object application, int in_Port) throws TransportLayerException ! { ! int lsPort=PORT_INIT; ! Integer inPort = new Integer(in_Port); ! ! if ( (lsPort=AlreadyListens(application)) == PORT_INIT ) ! { ! ! if (inPort>=0 && inPort<=10000) ! { ! //UDP_HashTableElement oldElm = null; ! UDP_HashTableElement Elm = null; ! if ( (Elm =(UDP_HashTableElement)PortTable.get(inPort)) !=null ) ! { ! switch(Elm.PortStatus) ! { ! case 0: //port is free => update such a record in hashtable ! ! //UDP_HashTableElement Elm = new UDP_HashTableElement(); ! Elm.PortStatus=1; ! Elm.application=application; ! Elm.connectedtoIP=""; ! Elm.connectedtoPort=0; ! ! //PortTable.remove(inPort); //delete old element ! //PortTable.put(inPort,Elm); //hash table update ! break; ! case 1: // port is being listened to by whom? ! int UID1=-2; ! int UID2=-1; ! UID1=((Application)Elm.application).getUID(); ! UID2=((Application)application).getUID(); ! ! if (UID1==UID2) ! { ! throw new TransportLayerException("UDP Error: already listening to port "+ inPort +"!"); ! } else throw new TransportLayerException("UDP Error: port "+ inPort +" is being listened to by another application! Can listen only to free ports." ); ! case 2: //port is busy => error ! throw new TransportLayerException("UDP Error: port "+ inPort +" is busy! Can listen only to free ports." ); ! // no "break" needed ;) ! default: //unknown port status ! throw new TransportLayerException("UDP Error: unknown port status! Port "+ inPort +" on host \""+ mParentStack.getParentNodeName()+"\"."); ! } ! ! } else ! { ! //create such a record in hashtable ! UDP_HashTableElement newElm = new UDP_HashTableElement(); ! newElm.PortStatus=1; ! newElm.application=application; ! newElm.connectedtoIP=""; ! newElm.connectedtoPort=0; ! ! PortTable.put(inPort,newElm); //hash table update ! } ! } else throw new TransportLayerException("UDP Error: can not listen to port "+ inPort +"! Use port range from 0 to 10000 to listen to."); ! } else throw new TransportLayerException("UDP Error: can not listen to port "+ inPort +"! Already listening to port " + lsPort + "."); ! /* { ! LayerInfo UDP_Info = new LayerInfo(getClass().getName()); ! UDP_Info.setObjectName(mParentStack.getParentNodeName()); ! UDP_Info.setDataType("UDP Packet"); ! UDP_Info.setLayer("Transport"); ! UDP_Info.setDescription("UDP port listening: \"UDP Error: can not listen to port "+ inPort +"! Already listening to port " + lsPort + ".\"."); ! Simulation.addLayerInfo(UDP_Info); ! } */ ! ! LayerInfo UDP_Info = new LayerInfo(getClass().getName()); ! UDP_Info.setObjectName(mParentStack.getParentNodeName()); ! UDP_Info.setDataType("UDP Applicaion"); ! UDP_Info.setLayer("Transport"); ! UDP_Info.setDescription("UDP application is now listening on UDP port "+ inPort +"."); ! Simulation.addLayerInfo(UDP_Info); } *************** *** 617,621 **** * This method finds LOCAL port number for an application. Port number range: [PORT_START_NUMBER; PORT_START_NUMBER+PORT_QUANT] * @author gift (sourceforge.net user) ! * @param application that will: take free port or take already occupied port (only by itself) or tell that all ports are busy :( * @return int port number that has been reserved for application * @exception TransportLayerException in several cases --- 662,666 ---- * This method finds LOCAL port number for an application. Port number range: [PORT_START_NUMBER; PORT_START_NUMBER+PORT_QUANT] * @author gift (sourceforge.net user) ! * @param application which local port will be returned * @return int port number that has been reserved for application * @exception TransportLayerException in several cases Index: Echo.java =================================================================== RCS file: /cvsroot/javanetsim/javaNetSim/core/protocolsuite/tcp_ip/Echo.java,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** Echo.java 20 Nov 2005 21:06:50 -0000 1.12 --- Echo.java 21 Nov 2005 14:56:01 -0000 1.13 *************** *** 40,44 **** public void Listen() throws TransportLayerException{ //throw new TransportLayerException("Cannot bind port " + listenPort + "."); ! mParentStack.ListenUDP(this, listenPort); } --- 40,49 ---- public void Listen() throws TransportLayerException{ //throw new TransportLayerException("Cannot bind port " + listenPort + "."); ! try{ ! mParentStack.ListenUDP(this, listenPort); ! } catch (TransportLayerException e) ! { ! ! } } |