51 rsp = wireproto.dispatch(self._repo, self, b'between') |
51 rsp = wireproto.dispatch(self._repo, self, b'between') |
52 self._handlers[rsp.__class__](self, rsp) |
52 self._handlers[rsp.__class__](self, rsp) |
53 |
53 |
54 super(prehelloserver, self).serve_forever() |
54 super(prehelloserver, self).serve_forever() |
55 |
55 |
|
56 class upgradev2server(wireprotoserver.sshserver): |
|
57 """Tests behavior for clients that issue upgrade to version 2.""" |
|
58 def serve_forever(self): |
|
59 name = wireprotoserver.SSHV2 |
|
60 l = self._fin.readline() |
|
61 assert l.startswith(b'upgrade ') |
|
62 token, caps = l[:-1].split(b' ')[1:] |
|
63 assert caps == b'proto=%s' % name |
|
64 |
|
65 # Filter hello and between requests. |
|
66 l = self._fin.readline() |
|
67 assert l == b'hello\n' |
|
68 l = self._fin.readline() |
|
69 assert l == b'between\n' |
|
70 l = self._fin.readline() |
|
71 assert l == 'pairs 81\n' |
|
72 self._fin.read(81) |
|
73 |
|
74 # Send the upgrade response. |
|
75 self._fout.write(b'upgraded %s %s\n' % (token, name)) |
|
76 servercaps = wireproto.capabilities(self._repo, self) |
|
77 rsp = b'capabilities: %s' % servercaps |
|
78 self._fout.write(b'%d\n' % len(rsp)) |
|
79 self._fout.write(rsp) |
|
80 self._fout.write(b'\n') |
|
81 self._fout.flush() |
|
82 |
|
83 super(upgradev2server, self).serve_forever() |
|
84 |
56 def performhandshake(orig, ui, stdin, stdout, stderr): |
85 def performhandshake(orig, ui, stdin, stdout, stderr): |
57 """Wrapped version of sshpeer._performhandshake to send extra commands.""" |
86 """Wrapped version of sshpeer._performhandshake to send extra commands.""" |
58 mode = ui.config(b'sshpeer', b'handshake-mode') |
87 mode = ui.config(b'sshpeer', b'handshake-mode') |
59 if mode == b'pre-no-args': |
88 if mode == b'pre-no-args': |
60 ui.debug(b'sending no-args command\n') |
89 ui.debug(b'sending no-args command\n') |
83 |
112 |
84 if servermode == b'banner': |
113 if servermode == b'banner': |
85 wireprotoserver.sshserver = bannerserver |
114 wireprotoserver.sshserver = bannerserver |
86 elif servermode == b'no-hello': |
115 elif servermode == b'no-hello': |
87 wireprotoserver.sshserver = prehelloserver |
116 wireprotoserver.sshserver = prehelloserver |
|
117 elif servermode == b'upgradev2': |
|
118 wireprotoserver.sshserver = upgradev2server |
88 elif servermode: |
119 elif servermode: |
89 raise error.ProgrammingError(b'unknown server mode: %s' % servermode) |
120 raise error.ProgrammingError(b'unknown server mode: %s' % servermode) |
90 |
121 |
91 peermode = ui.config(b'sshpeer', b'mode') |
122 peermode = ui.config(b'sshpeer', b'mode') |
92 |
123 |