Show More
@@ -527,24 +527,34 class sshserver: | |||||
527 | def __init__(self, ui, repo, logfh=None, accesshidden=False): |
|
527 | def __init__(self, ui, repo, logfh=None, accesshidden=False): | |
528 | self._ui = ui |
|
528 | self._ui = ui | |
529 | self._repo = repo |
|
529 | self._repo = repo | |
530 | self._fin, self._fout = ui.protectfinout() |
|
|||
531 | self._accesshidden = accesshidden |
|
530 | self._accesshidden = accesshidden | |
532 |
|
531 | self._logfh = logfh | ||
533 | # Log write I/O to stdout and stderr if configured. |
|
|||
534 | if logfh: |
|
|||
535 | self._fout = util.makeloggingfileobject( |
|
|||
536 | logfh, self._fout, b'o', logdata=True |
|
|||
537 | ) |
|
|||
538 | ui.ferr = util.makeloggingfileobject( |
|
|||
539 | logfh, ui.ferr, b'e', logdata=True |
|
|||
540 | ) |
|
|||
541 |
|
532 | |||
542 | def serve_forever(self): |
|
533 | def serve_forever(self): | |
543 | self.serveuntil(threading.Event()) |
|
534 | self.serveuntil(threading.Event()) | |
544 | self._ui.restorefinout(self._fin, self._fout) |
|
|||
545 |
|
535 | |||
546 | def serveuntil(self, ev): |
|
536 | def serveuntil(self, ev): | |
547 | """Serve until a threading.Event is set.""" |
|
537 | """Serve until a threading.Event is set.""" | |
548 | _runsshserver( |
|
538 | with self._ui.protectedfinout() as (fin, fout): | |
549 | self._ui, self._repo, self._fin, self._fout, ev, self._accesshidden |
|
539 | if self._logfh: | |
550 | ) |
|
540 | # Log write I/O to stdout and stderr if configured. | |
|
541 | fout = util.makeloggingfileobject( | |||
|
542 | self._logfh, | |||
|
543 | fout, | |||
|
544 | b'o', | |||
|
545 | logdata=True, | |||
|
546 | ) | |||
|
547 | self._ui.ferr = util.makeloggingfileobject( | |||
|
548 | self._logfh, | |||
|
549 | self._ui.ferr, | |||
|
550 | b'e', | |||
|
551 | logdata=True, | |||
|
552 | ) | |||
|
553 | _runsshserver( | |||
|
554 | self._ui, | |||
|
555 | self._repo, | |||
|
556 | fin, | |||
|
557 | fout, | |||
|
558 | ev, | |||
|
559 | self._accesshidden, | |||
|
560 | ) |
@@ -30,7 +30,7 class bannerserver(wireprotoserver.sshse | |||||
30 |
|
30 | |||
31 | def serve_forever(self): |
|
31 | def serve_forever(self): | |
32 | for i in range(10): |
|
32 | for i in range(10): | |
33 | self._fout.write(b'banner: line %d\n' % i) |
|
33 | self._ui.fout.write(b'banner: line %d\n' % i) | |
34 |
|
34 | |||
35 | super(bannerserver, self).serve_forever() |
|
35 | super(bannerserver, self).serve_forever() | |
36 |
|
36 | |||
@@ -45,17 +45,16 class prehelloserver(wireprotoserver.ssh | |||||
45 | """ |
|
45 | """ | |
46 |
|
46 | |||
47 | def serve_forever(self): |
|
47 | def serve_forever(self): | |
48 |
|
|
48 | ui = self._ui | |
|
49 | l = ui.fin.readline() | |||
49 | assert l == b'hello\n' |
|
50 | assert l == b'hello\n' | |
50 | # Respond to unknown commands with an empty reply. |
|
51 | # Respond to unknown commands with an empty reply. | |
51 |
wireprotoserver._sshv1respondbytes( |
|
52 | wireprotoserver._sshv1respondbytes(ui.fout, b'') | |
52 |
l = |
|
53 | l = ui.fin.readline() | |
53 | assert l == b'between\n' |
|
54 | assert l == b'between\n' | |
54 | proto = wireprotoserver.sshv1protocolhandler( |
|
55 | proto = wireprotoserver.sshv1protocolhandler(ui, ui.fin, ui.fout) | |
55 | self._ui, self._fin, self._fout |
|
|||
56 | ) |
|
|||
57 | rsp = wireprotov1server.dispatch(self._repo, proto, b'between') |
|
56 | rsp = wireprotov1server.dispatch(self._repo, proto, b'between') | |
58 |
wireprotoserver._sshv1respondbytes( |
|
57 | wireprotoserver._sshv1respondbytes(ui.fout, rsp.data) | |
59 |
|
58 | |||
60 | super(prehelloserver, self).serve_forever() |
|
59 | super(prehelloserver, self).serve_forever() | |
61 |
|
60 |
@@ -25,9 +25,8 class SSHServerGetArgsTests(unittest.Tes | |||||
25 |
|
25 | |||
26 | def assertparse(self, cmd, input, expected): |
|
26 | def assertparse(self, cmd, input, expected): | |
27 | server = mockserver(input) |
|
27 | server = mockserver(input) | |
28 | proto = wireprotoserver.sshv1protocolhandler( |
|
28 | ui = server._ui | |
29 | server._ui, server._fin, server._fout |
|
29 | proto = wireprotoserver.sshv1protocolhandler(ui, ui.fin, ui.fout) | |
30 | ) |
|
|||
31 | _func, spec = wireprotov1server.commands[cmd] |
|
30 | _func, spec = wireprotov1server.commands[cmd] | |
32 | self.assertEqual(proto.getargs(spec), expected) |
|
31 | self.assertEqual(proto.getargs(spec), expected) | |
33 |
|
32 | |||
@@ -35,6 +34,9 class SSHServerGetArgsTests(unittest.Tes | |||||
35 | def mockserver(inbytes): |
|
34 | def mockserver(inbytes): | |
36 | ui = mockui(inbytes) |
|
35 | ui = mockui(inbytes) | |
37 | repo = mockrepo(ui) |
|
36 | repo = mockrepo(ui) | |
|
37 | # note: this test unfortunately doesn't really test anything about | |||
|
38 | # `sshserver` class anymore: the entirety of logic of that class lives | |||
|
39 | # in `serveuntil`, and that function is not even called by this test. | |||
38 | return wireprotoserver.sshserver(ui, repo) |
|
40 | return wireprotoserver.sshserver(ui, repo) | |
39 |
|
41 | |||
40 |
|
42 |
General Comments 0
You need to be logged in to leave comments.
Login now