Revision: 44186
          http://brlcad.svn.sourceforge.net/brlcad/?rev=44186&view=rev
Author:   erikgreenwald
Date:     2011-04-04 17:56:01 +0000 (Mon, 04 Apr 2011)

Log Message:
-----------
fix off by one weirdness in chunk request

Modified Paths:
--------------
    geomcore/trunk/src/interfaces/cl/gsclient.lisp
    geomcore/trunk/src/interfaces/cl/gsnet.lisp
    geomcore/trunk/src/interfaces/cl/gsserver.lisp

Modified: geomcore/trunk/src/interfaces/cl/gsclient.lisp
===================================================================
--- geomcore/trunk/src/interfaces/cl/gsclient.lisp      2011-04-04 17:03:41 UTC 
(rev 44185)
+++ geomcore/trunk/src/interfaces/cl/gsclient.lisp      2011-04-04 17:56:01 UTC 
(rev 44186)
@@ -3,7 +3,7 @@
 
 (defpackage :gsclient
   (:use :cl :sb-unix)
-  (:export :login :logout :ping :getgeom))
+  (:export :login :logout :ping :getgeom :getgeomfile))
 
 (in-package :gsclient)
 
@@ -14,7 +14,7 @@
 ;; this should probably check to make sure things are ok
 (defun getgeom (s st uri &key (bot '()))
   (gsnet:writemsg s (make-instance (if bot 'gsnet:geombotreqmsg 
'gsnet:geomreqmsg) :uri uri))
-  (loop for i from 0 to (length (gsnet::manifest (gsnet:readmsg s))) do 
(write-sequence (gsnet::chunk (gsnet:readmsg s)) st)))
+  (loop for i from 1 to (length (gsnet::manifest (gsnet:readmsg s))) do 
(write-sequence (gsnet::chunk (gsnet:readmsg s)) st :end (- (length ch) 1))))
 
 (defun getgeomfile (s file uri &key (bot '()))
   (with-open-file (out file :element-type '(unsigned-byte 8) :direction 
:output)

Modified: geomcore/trunk/src/interfaces/cl/gsnet.lisp
===================================================================
--- geomcore/trunk/src/interfaces/cl/gsnet.lisp 2011-04-04 17:03:41 UTC (rev 
44185)
+++ geomcore/trunk/src/interfaces/cl/gsnet.lisp 2011-04-04 17:56:01 UTC (rev 
44186)
@@ -94,9 +94,9 @@
          ((= type +gsgbr+) (make-instance 'geombotreqmsg :uri (readgsstring 
(strm s))))
          ((= type +gsgm+) (make-instance 'geommanifestmsg :manifest (loop for 
i from 1 to (readuint32 (strm s)) collect (readgsstring (strm s)))))
          ((= type +gsgc+) (make-instance 'geomchunkmsg :chunk 
-                                 (let ((arr (make-array (+ (readuint32 (strm 
s)) 1) :element-type '(unsigned-byte 8))))
-                                         (read-sequence arr (strm s)) 
-                                         arr)))
+                                         (let ((arr (make-array (+ (readuint32 
(strm s) 1) :element-type '(unsigned-byte 8))))
+                                               (read-sequence arr (strm s))
+                                               arr))))
          ((= type +gsnsr+) (make-instance 'loginmsg :username (readgsstring 
(strm s)) :password (readgsstring (strm s))))
          (t (format t "Unknown type! ~x~%" type))))
       '()))
@@ -165,4 +165,4 @@
 
 (defclass geomchunkmsg (message) ((chunk :accessor chunk :initarg :chunk)))
 (defmethod writemsg :before (s (m geomchunkmsg)) (setf (msgtype m) +gsgc+) 
(setf (len m) (length (chunk m))))
-(defmethod writemsg :after (s (m geomchunkmsg)) (writeuint32 (strm s) (length 
(chunk m))) (write-sequence (chunk m) (strm s)))
+(defmethod writemsg :after (s (m geomchunkmsg)) (writeuint32 (strm s) (- 
(length (chunk m)) 1)) (write-sequence (chunk m) (strm s)))

Modified: geomcore/trunk/src/interfaces/cl/gsserver.lisp
===================================================================
--- geomcore/trunk/src/interfaces/cl/gsserver.lisp      2011-04-04 17:03:41 UTC 
(rev 44185)
+++ geomcore/trunk/src/interfaces/cl/gsserver.lisp      2011-04-04 17:56:01 UTC 
(rev 44186)
@@ -17,8 +17,8 @@
 
 (defun send-geom (s reuuid filename)
   (gsnet:writemsg s (make-instance 'gsnet:geommanifestmsg :manifest (list 
filename)))
-  (with-open-file (stream (concatenate +dbdir+ filename) :element-type 
'(unsigned-byte 8) :if-does-not-exist :error)
-    (let ((arr (make-array (file-length stream) :element-type '(unsigned-byte 
8))))
+  (with-open-file (stream (concatenate 'string +dbdir+ filename) :element-type 
'(unsigned-byte 8) :if-does-not-exist :error)
+    (let ((arr (make-array (+ (file-length stream) 1) :element-type 
'(unsigned-byte 8))))
       (read-sequence arr stream)
       (gsnet:writemsg s (make-instance 'gsnet:geomchunkmsg :chunk arr :reuuid 
reuuid)))))
 


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Create and publish websites with WebMatrix
Use the most popular FREE web apps or write code yourself; 
WebMatrix provides all the features you need to develop and 
publish your website. http://p.sf.net/sfu/ms-webmatrix-sf
_______________________________________________
BRL-CAD Source Commits mailing list
brlcad-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to