|
1 |
| -import libssh2, types, session, utils |
| 1 | +import libssh2, types, session, utils, streams |
2 | 2 |
|
3 | 3 | proc initChannel*(ssh: SSHClient): SSHChannel =
|
4 | 4 | ## Establish a generic session channel
|
@@ -28,31 +28,35 @@ proc read*(channel: SSHChannel): string =
|
28 | 28 | var
|
29 | 29 | buffer: array[0..1024, char]
|
30 | 30 | rc: cint
|
| 31 | + stream = newStringStream() |
31 | 32 |
|
32 | 33 | while true:
|
33 |
| - zeroMem(addr buffer, buffer.len) |
34 | 34 | rc = channel.impl.channel_read(addr buffer, buffer.len)
|
35 | 35 | if rc > 0:
|
36 |
| - result.add($cast[cstring](addr buffer)) |
| 36 | + stream.writeData(addr buffer, rc) |
37 | 37 | elif rc == LIBSSH2_ERROR_EAGAIN:
|
38 | 38 | discard waitsocket(channel.client)
|
39 | 39 | else:
|
40 | 40 | break
|
| 41 | + stream.setPosition(0) |
| 42 | + result = stream.readAll() |
41 | 43 |
|
42 | 44 | proc readError*(channel: SSHChannel): string =
|
43 | 45 | var
|
44 | 46 | buffer: array[0..1024, char]
|
45 | 47 | rc: cint
|
| 48 | + stream = newStringStream() |
46 | 49 |
|
47 | 50 | while true:
|
48 |
| - zeroMem(addr buffer, buffer.len) |
49 | 51 | rc = channel.impl.channel_read_stderr(addr buffer, buffer.len)
|
50 | 52 | if rc > 0:
|
51 |
| - result.add($cast[cstring](addr buffer)) |
| 53 | + stream.writeData(addr buffer, rc) |
52 | 54 | elif rc == LIBSSH2_ERROR_EAGAIN:
|
53 | 55 | discard waitsocket(channel.client)
|
54 | 56 | else:
|
55 | 57 | break
|
| 58 | + stream.setPosition(0) |
| 59 | + result = stream.readAll() |
56 | 60 |
|
57 | 61 | proc close*(channel: SSHChannel): bool =
|
58 | 62 | var rc: cint
|
|
0 commit comments