Merge: Websockets
authorJean Privat <jean@pryen.org>
Wed, 14 Jan 2015 01:16:51 +0000 (20:16 -0500)
committerJean Privat <jean@pryen.org>
Wed, 14 Jan 2015 01:16:51 +0000 (20:16 -0500)
Fixed websockets with the new and improved sockets.

While I'm at it, changed a bit the way it works, the old one was a bit (a lot ?) quick and dirty, so here's that.

Pull-Request: #1096
Reviewed-by: Jean Privat <jean@pryen.org>
Reviewed-by: Alexandre Terrasa <alexandre@moz-code.org>

1  2 
lib/socket/socket.nit
lib/standard/string.nit

diff --combined lib/socket/socket.nit
@@@ -66,11 -66,7 +66,11 @@@ class TCPStrea
                        closed = true
                        return
                end
 -              socket.setsockopt(new NativeSocketOptLevels.socket, new NativeSocketOptNames.reuseaddr, 1)
 +              if not socket.setsockopt(new NativeSocketOptLevels.socket, new NativeSocketOptNames.reuseaddr, 1) then
 +                      end_reached = true
 +                      closed = true
 +                      return
 +              end
                var hostname = socket.gethostbyname(host)
                addrin = new NativeSocketAddrIn.with_hostent(hostname, port)
  
        fun ready_to_read(timeout: Int): Bool
        do
                if _buffer_pos < _buffer.length then return true
-               if eof then return false
+               if end_reached then return false
                var events = [new NativeSocketPollValues.pollin]
                return pollin(events, timeout).length != 0
        end
                if closed then return
                if socket.close >= 0 then
                        closed = true
+                       end_reached = true
                end
        end
  
        # Send the data present in the socket buffer
        fun flush
        do
 -              socket.setsockopt(new NativeSocketOptLevels.tcp, new NativeSocketOptNames.tcp_nodelay, 1)
 -              socket.setsockopt(new NativeSocketOptLevels.tcp, new NativeSocketOptNames.tcp_nodelay, 0)
 +              if not socket.setsockopt(new NativeSocketOptLevels.tcp, new NativeSocketOptNames.tcp_nodelay, 1) or
 +                 not socket.setsockopt(new NativeSocketOptLevels.tcp, new NativeSocketOptNames.tcp_nodelay, 0) then
 +                      closed = true
 +              end
        end
  end
  
@@@ -199,10 -194,7 +200,10 @@@ class TCPServe
                socket = new NativeSocket.socket(new NativeSocketAddressFamilies.af_inet,
                        new NativeSocketTypes.sock_stream, new NativeSocketProtocolFamilies.pf_null)
                assert not socket.address_is_null
 -              socket.setsockopt(new NativeSocketOptLevels.socket, new NativeSocketOptNames.reuseaddr, 1)
 +              if not socket.setsockopt(new NativeSocketOptLevels.socket, new NativeSocketOptNames.reuseaddr, 1) then
 +                      closed = true
 +                      return
 +              end
                addrin = new NativeSocketAddrIn.with(port, new NativeSocketAddressFamilies.af_inet)
                address = addrin.address
  
diff --combined lib/standard/string.nit
@@@ -1092,15 -1092,19 +1092,19 @@@ class FlatStrin
                        from = 0
                end
  
-               var realFrom = index_from + from
+               var new_from = index_from + from
  
-               if (realFrom + count) > index_to then return new FlatString.with_infos(items, index_to - realFrom + 1, realFrom, index_to)
+               if (new_from + count) > index_to then
+                       var new_len = index_to - new_from + 1
+                       if new_len <= 0 then return empty
+                       return new FlatString.with_infos(items, new_len, new_from, index_to)
+               end
  
-               if count == 0 then return empty
+               if count <= 0 then return empty
  
-               var to = realFrom + count - 1
+               var to = new_from + count - 1
  
-               return new FlatString.with_infos(items, to - realFrom + 1, realFrom, to)
+               return new FlatString.with_infos(items, to - new_from + 1, new_from, to)
        end
  
        redef fun empty do return "".as(FlatString)
@@@ -2174,7 -2178,7 +2178,7 @@@ redef class Map[K,V
                var i = iterator
                var k = i.key
                var e = i.item
 -              s.append("{k}{couple_sep}{e or else "<null>"}")
 +              s.append("{k or else "<null>"}{couple_sep}{e or else "<null>"}")
  
                # Concat other items
                i.next
                        s.append(sep)
                        k = i.key
                        e = i.item
 -                      s.append("{k}{couple_sep}{e or else "<null>"}")
 +                      s.append("{k or else "<null>"}{couple_sep}{e or else "<null>"}")
                        i.next
                end
                return s.to_s