Mercurial > hg
comparison tests/sshprotoext.py @ 36214:3b3a987bbbaa
wireprotoserver: move SSH server operation to a standalone function
The server-side processing logic will soon get a bit more complicated
in order to handle protocol switches. We will use a state machine
to help make the transitions clearer.
To prepare for this, we move SSH server operation into a standalone
function. We structure it as a very simple state machine. It only
has two states for now, with one state containing the bulk of the
logic. But things will evolve shortly.
Differential Revision: https://phab.mercurial-scm.org/D2203
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Thu, 08 Feb 2018 15:09:59 -0800 |
parents | 30cc9f9780df |
children | 464bedc0fdb4 |
comparison
equal
deleted
inserted
replaced
36213:b67d4b7e8235 | 36214:3b3a987bbbaa |
---|---|
46 assert l == b'hello\n' | 46 assert l == b'hello\n' |
47 # Respond to unknown commands with an empty reply. | 47 # Respond to unknown commands with an empty reply. |
48 wireprotoserver._sshv1respondbytes(self._fout, b'') | 48 wireprotoserver._sshv1respondbytes(self._fout, b'') |
49 l = self._fin.readline() | 49 l = self._fin.readline() |
50 assert l == b'between\n' | 50 assert l == b'between\n' |
51 rsp = wireproto.dispatch(self._repo, self._proto, b'between') | 51 proto = wireprotoserver.sshv1protocolhandler(self._ui, self._fin, |
52 self._fout) | |
53 rsp = wireproto.dispatch(self._repo, proto, b'between') | |
52 wireprotoserver._sshv1respondbytes(self._fout, rsp.data) | 54 wireprotoserver._sshv1respondbytes(self._fout, rsp.data) |
53 | 55 |
54 super(prehelloserver, self).serve_forever() | 56 super(prehelloserver, self).serve_forever() |
55 | 57 |
56 class upgradev2server(wireprotoserver.sshserver): | 58 class upgradev2server(wireprotoserver.sshserver): |
70 l = self._fin.readline() | 72 l = self._fin.readline() |
71 assert l == b'pairs 81\n' | 73 assert l == b'pairs 81\n' |
72 self._fin.read(81) | 74 self._fin.read(81) |
73 | 75 |
74 # Send the upgrade response. | 76 # Send the upgrade response. |
77 proto = wireprotoserver.sshv1protocolhandler(self._ui, self._fin, | |
78 self._fout) | |
75 self._fout.write(b'upgraded %s %s\n' % (token, name)) | 79 self._fout.write(b'upgraded %s %s\n' % (token, name)) |
76 servercaps = wireproto.capabilities(self._repo, self._proto) | 80 servercaps = wireproto.capabilities(self._repo, proto) |
77 rsp = b'capabilities: %s' % servercaps.data | 81 rsp = b'capabilities: %s' % servercaps.data |
78 self._fout.write(b'%d\n' % len(rsp)) | 82 self._fout.write(b'%d\n' % len(rsp)) |
79 self._fout.write(rsp) | 83 self._fout.write(rsp) |
80 self._fout.write(b'\n') | 84 self._fout.write(b'\n') |
81 self._fout.flush() | 85 self._fout.flush() |