Browse Source

MeekConn now connects successfully. Bugs fixed: Write() always returned 0 bytes written; readPayload looped forever

Rod Hynes 11 years ago
parent
commit
ad070ce6f5
1 changed files with 6 additions and 2 deletions
  1. 6 2
      psiphon/meekConn.go

+ 6 - 2
psiphon/meekConn.go

@@ -220,6 +220,7 @@ func (meek *MeekConn) Write(buffer []byte) (n int, err error) {
 	if meek.closed() {
 		return 0, ContextError(errors.New("meek connection is closed"))
 	}
+	n = len(buffer)
 	// The data to send is split into MAX_SEND_PAYLOAD_LENGTH chunks as
 	// this is the most that will be sent per HTTP request.
 	for len(buffer) > 0 {
@@ -237,7 +238,7 @@ func (meek *MeekConn) Write(buffer []byte) (n int, err error) {
 			return 0, ContextError(errors.New("meek connection has closed"))
 		}
 	}
-	return len(buffer), nil
+	return n, nil
 }
 
 // Stub implementation of net.Conn.LocalAddr
@@ -325,11 +326,14 @@ func (meek *MeekConn) readPayload(receivedPayload io.ReadCloser) (totalSize int6
 			return 0, ContextError(err)
 		}
 		totalSize += n
-		if n > 0 {
+		if readBuffer.Len() > 0 {
 			meek.availableReadBuffer <- readBuffer
 		} else {
 			meek.emptyReadBuffer <- readBuffer
 		}
+		if n == 0 {
+			break
+		}
 	}
 	return totalSize, nil
 }