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()