Skip to content

Commit ec196f8

Browse files
committed
Merge branch 'master' of github.com:treeform/netty
2 parents 53a7bdc + a9b9d63 commit ec196f8

File tree

6 files changed

+95
-5
lines changed

6 files changed

+95
-5
lines changed

src/netty.nim

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
import hashes, nativesockets, net, random, sequtils, streams, strformat, times
1+
import hashes, nativesockets, net, netty/hexprint, random, sequtils, streams,
2+
strformat, times
23

3-
export Port
4+
export Port, hexprint
45

56
const
67
partMagic = uint32(0xFFDDFF33)

src/netty/flatty.nim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ proc toFlatty[T](s: Stream, x: seq[T]) =
6363
s.toFlatty(e)
6464
6565
proc fromFlatty[T](s: Stream, x: var seq[T]) =
66-
let len = s.readUint64()
66+
let len = s.readInt64()
6767
x.setLen(len)
6868
for i in 0 ..< len:
6969
s.fromFlatty(x[i])
@@ -107,7 +107,7 @@ proc toFlatty[K, V](s: Stream, x: Table[K, V]) =
107107
s.toFlatty(v)
108108
109109
proc fromFlatty[K, V](s: Stream, x: var Table[K, V]) =
110-
let len = s.readUint64()
110+
let len = s.readInt64()
111111
for i in 0 ..< len:
112112
var
113113
k: K

tests/test-output.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,4 @@ single client disconnect
4343
testing maxUdpPacket and maxInFlight
4444
sent6006
4545
testing retry
46+
testing junk data

tests/test.nim

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,38 @@ block:
291291

292292
assert c2s.sendParts[0].sentTime != firstSentTime # We sent the part again
293293

294+
block:
295+
s.writeLine "testing junk data"
296+
297+
var server = newReactor("127.0.0.1", 2015)
298+
var client = newReactor("127.0.0.1", 2016)
299+
300+
var c2s = client.connect(server.address)
301+
302+
client.rawSend(c2s.address, "asdf")
303+
304+
client.tick()
305+
server.tick()
306+
307+
# No new connection, no crash
308+
assert server.newConnections.len == 0
309+
assert server.connections.len == 0
310+
311+
var stream = newStringStream()
312+
stream.write(partMagic)
313+
stream.write("aasdfasdfaasdfaasdfasdfsdfsdasdfasdfsaasdfasdffsadfaasdfasdfa")
314+
stream.setPosition(0)
315+
let packet = stream.readAll()
316+
317+
client.rawSend(c2s.address, packet)
318+
319+
client.tick()
320+
server.tick()
321+
322+
# No new connection, no crash
323+
assert server.newConnections.len == 0
324+
assert server.connections.len == 0
325+
294326
s.close()
295327

296328
let (outp, _) = execCmdEx("git diff tests/test-output.txt")

tests/test_flatty.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,4 @@ assert arr.toFlatty.fromFlatty(array[3, int]) == arr
103103
var tup: tuple[count: int, id: byte, name: string] = (1, 2.byte, "3")
104104
assert tup.toFlatty.fromFlatty(tuple[count: int, id: byte, name: string]) == tup
105105
var tup2: tuple[foo: Foo, id: uint8] = (Foo(), 1.uint8)
106-
assert tup2.toFlatty.fromFlatty(tuple[foo: Foo, id: uint8] ) == tup2
106+
assert tup2.toFlatty.fromFlatty(tuple[foo: Foo, id: uint8]) == tup2

tests/vtune.nim

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import netty, strformat
2+
3+
var server = newReactor("127.0.0.1", 2002)
4+
var client = newReactor("127.0.0.1", 2003)
5+
6+
var c2s = client.connect(server.address)
7+
8+
var l: int
9+
10+
for i in 0 ..< 1000:
11+
block:
12+
var buffer = "large:"
13+
for i in 0 ..< 1000:
14+
buffer.add "<data>"
15+
16+
client.send(c2s, buffer)
17+
18+
for i in 0 ..< 10:
19+
client.tick()
20+
server.tick()
21+
22+
var a, b, c: Message
23+
for msg in server.messages:
24+
a = msg
25+
b = msg
26+
b = a
27+
c = a
28+
l += (a.data.len + b.data.len + c.data.len)
29+
30+
block:
31+
var dataToSend = newSeq[string]()
32+
for i in 0 ..< 1000:
33+
dataToSend.add &"data #{i}, its cool!"
34+
35+
for d in dataToSend:
36+
client.send(c2s, d)
37+
for i in 0 ..< 1000:
38+
client.tick()
39+
server.tick()
40+
41+
var a, b, c: Message
42+
for msg in server.messages:
43+
var index = dataToSend.find(msg.data)
44+
# make sure message is there
45+
assert index != -1
46+
dataToSend.delete(index)
47+
a = msg
48+
b = msg
49+
b = a
50+
c = a
51+
l += (a.data.len + b.data.len + c.data.len)
52+
if dataToSend.len == 0: break
53+
# make sure all messages made it
54+
assert dataToSend.len == 0, &"datatoSend.len: {datatoSend.len}"
55+
56+
echo l

0 commit comments

Comments
 (0)