CVS: beepcore-java/src/org/beepcore/beep/core ChannelImpl.java,1.3,1.4 TuningProfile.java,1.9,1.10 SessionImpl.java,1.4,1.5

Huston Franklin <[email protected]> Tue, 27 May 2003 14:37:45 -0700
Newsgroups gmane.network.beep.beepcore.java.cvs
Message-ID <[email protected]>
Update of /cvsroot/beepcore-java/beepcore-java/src/org/beepcore/beep/core
In directory sc8-pr-cvs1:/tmp/cvs-serv19920/src/org/beepcore/beep/core

Modified Files:
	ChannelImpl.java TuningProfile.java SessionImpl.java 
Log Message:
initial windowing cleanup

Index: ChannelImpl.java
===================================================================
RCS file: /cvsroot/beepcore-java/beepcore-java/src/org/beepcore/beep/core/ChannelImpl.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -r1.3 -r1.4
*** ChannelImpl.java	16 May 2003 16:44:29 -0000	1.3
--- ChannelImpl.java	27 May 2003 21:37:40 -0000	1.4
***************
*** 115,121 ****
      private int recvWindowUsed;
  
!     private long prevAckno;
! 
!     private int prevWindowUsed;
  
      private boolean notifyOnFirstFrame = true;
--- 115,119 ----
      private int recvWindowUsed;
  
!     private int recvWindowFreed;
  
      private boolean notifyOnFirstFrame = true;
***************
*** 159,165 ****
          state = STATE_INITIALIZED;
          recvWindowUsed = 0;
          recvWindowSize = DEFAULT_WINDOW_SIZE;
-         prevAckno = 0;
-         prevWindowUsed = 0;
          peerWindowSize = DEFAULT_WINDOW_SIZE;
      }
--- 157,162 ----
          state = STATE_INITIALIZED;
          recvWindowUsed = 0;
+         recvWindowFreed = 0;
          recvWindowSize = DEFAULT_WINDOW_SIZE;
          peerWindowSize = DEFAULT_WINDOW_SIZE;
      }
***************
*** 235,247 ****
  
      /**
-      * Returns the size of the used portion of the receive buffer for this
-      * channel.
-      */
-     public synchronized int getBufferUsed()
-     {
-         return recvWindowUsed;
-     }
- 
-     /**
       * Returns the encoding used on this <code>Channel</code>
       * @todo look at removing this and adding the information to getProfile()
--- 232,235 ----
***************
*** 285,294 ****
              // in the buffer right now.
              if (size < recvWindowUsed) {
!                 throw new BEEPException("Size must be less than what is " +
                      "currently in use.");
              }
  
-             // @TODO what if they decide to shrink the buffer?  Is that even
-             // allowed?
              // set the new size and copy the buffer
              recvWindowSize = size;
--- 273,280 ----
              // in the buffer right now.
              if (size < recvWindowUsed) {
!                 throw new BEEPException("New size is less than what is " +
                      "currently in use.");
              }
  
              // set the new size and copy the buffer
              recvWindowSize = size;
***************
*** 299,311 ****
              }
  
!             // send a new SEQ message to update the buffer size
!             if (session.updateMyReceiveBufferSize(this, prevAckno,
!                                                   recvSequence,
!                                                   prevWindowUsed,
!                                                   recvWindowUsed,
!                                                   recvWindowSize)) {
!                 prevAckno = recvSequence;
!                 prevWindowUsed = recvWindowUsed;
!             }
          }
      }
--- 285,289 ----
              }
  
!             sendWindowUpdate();
          }
      }
***************
*** 653,666 ****
          // window is full, this is the last frame.
          synchronized (m) {
!             if (m.isNotified() || ((this.notifyOnFirstFrame == false)
!                 && (recvSequence - prevAckno)
!                     != (recvWindowSize - prevWindowUsed) &&
!                 (frame.isLast() == false)))
!             {
!                 if (log.isDebugEnabled()) {
!                     log.debug("recvWindowUsed = " + recvWindowUsed
!                               + " recvWindowSize = " + recvWindowSize
!                               + "\t\r\nNot notifying frame listener.");
!                 }
                  return;
              }
--- 631,635 ----
          // window is full, this is the last frame.
          synchronized (m) {
!             if (m.isNotified()) {
                  return;
              }
***************
*** 749,752 ****
--- 718,725 ----
              }
  
+             if (this.recvWindowFreed != 0) {
+                 sendWindowUpdate();
+             }
+             
              sendFrames(status);
  
***************
*** 872,875 ****
--- 845,860 ----
      }
  
+     private void sendWindowUpdate() throws BEEPException
+     {
+         if (session.updateMyReceiveBufferSize(this, recvSequence,
+                                               recvWindowSize -
+                                               (recvWindowUsed -
+                                                recvWindowFreed)))
+         {
+             recvWindowUsed -= recvWindowFreed;
+             recvWindowFreed = 0;
+         }
+     }
+ 
      /**
       * Method setState
***************
*** 1027,1053 ****
      synchronized void freeReceiveBufferBytes(int size)
      {
!         try {
!             if (log.isTraceEnabled()) {
!                 log.trace("Freed up " + size + " bytes on channel " + number);
!             }
  
!             recvWindowUsed -= size;
  
!             if (log.isTraceEnabled()) {
!                 log.trace("recvWindowUsed = " + recvWindowUsed);
!             }
  
!             if (session.updateMyReceiveBufferSize(this, prevAckno,
!                                                   recvSequence,
!                                                   prevWindowUsed,
!                                                   recvWindowUsed,
!                                                   recvWindowSize)) {
!                 prevAckno = recvSequence;
!                 prevWindowUsed = recvWindowUsed;
!             }
!         } catch (BEEPException e) {
  
!             // do nothing
!             log.fatal("Error updating receive buffer size", e);
          }
      }
--- 1012,1035 ----
      synchronized void freeReceiveBufferBytes(int size)
      {
!         if (log.isTraceEnabled()) {
!             log.trace("Freed up " + size + " bytes on channel " + number);
!         }
  
!         recvWindowFreed += size;
  
!         if (log.isTraceEnabled()) {
!             log.trace("recvWindowUsed = " + recvWindowUsed +
!                       " recvWindowFreed = " + recvWindowFreed +
!                       " recvWindowSize = " + recvWindowSize);
!         }
  
!         if (state == ChannelImpl.STATE_ACTIVE) {
!             try {
!                 sendWindowUpdate();
!             } catch (BEEPException e) {
  
!                 // do nothing
!                 log.fatal("Error updating receive buffer size", e);
!             }
          }
      }

Index: TuningProfile.java
===================================================================
RCS file: /cvsroot/beepcore-java/beepcore-java/src/org/beepcore/beep/core/TuningProfile.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -r1.9 -r1.10
*** TuningProfile.java	21 Apr 2003 15:09:10 -0000	1.9
--- TuningProfile.java	27 May 2003 21:37:41 -0000	1.10
***************
*** 105,108 ****
--- 105,109 ----
          try {
              tuningChannels.add(channel);
+             ((ChannelImpl)channel).setState(ChannelImpl.STATE_TUNING);
              session.sendProfile(profile, data, (ChannelImpl)channel);
              session.disableIO();

Index: SessionImpl.java
===================================================================
RCS file: /cvsroot/beepcore-java/beepcore-java/src/org/beepcore/beep/core/SessionImpl.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** SessionImpl.java	20 May 2003 17:10:51 -0000	1.4
--- SessionImpl.java	27 May 2003 21:37:41 -0000	1.5
***************
*** 854,862 ****
       */
      protected abstract boolean updateMyReceiveBufferSize(Channel channel,
-                                                          long previouslySeq,
                                                           long currentSeq,
!                                                          int previouslyUsed,
!                                                          int currentlyUsed,
!                                                          int bufferSize)
          throws BEEPException;
  
--- 854,859 ----
       */
      protected abstract boolean updateMyReceiveBufferSize(Channel channel,
                                                           long currentSeq,
!                                                          int currentAvail)
          throws BEEPException;
  



-------------------------------------------------------
This SF.net email is sponsored by: ObjectStore.
If flattening out C++ or Java code to make your application fit in a
relational database is painful, don't do it! Check out ObjectStore.
Now part of Progress Software. http://www.objectstore.net/sourceforge