]>
Commit | Line | Data |
---|---|---|
07659514 JS |
1 | # Copyright (c) 2015 Nicira, Inc. |
2 | # | |
3 | # Licensed under the Apache License, Version 2.0 (the "License"); | |
4 | # you may not use this file except in compliance with the License. | |
5 | # You may obtain a copy of the License at: | |
6 | # | |
7 | # http://www.apache.org/licenses/LICENSE-2.0 | |
8 | # | |
9 | # Unless required by applicable law or agreed to in writing, software | |
10 | # distributed under the License is distributed on an "AS IS" BASIS, | |
11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
12 | # See the License for the specific language governing permissions and | |
13 | # limitations under the License. | |
14 | ||
15 | import argparse | |
16 | import socket | |
17 | ||
18 | from BaseHTTPServer import HTTPServer | |
19 | from SimpleHTTPServer import SimpleHTTPRequestHandler | |
20 | from SocketServer import TCPServer | |
21 | ||
22 | ||
23 | class TCPServerV6(HTTPServer): | |
24 | address_family = socket.AF_INET6 | |
25 | ||
26 | ||
27 | def get_ftpd(): | |
28 | try: | |
29 | from pyftpdlib.authorizers import DummyAuthorizer | |
30 | from pyftpdlib.handlers import FTPHandler | |
31 | from pyftpdlib.servers import FTPServer | |
32 | ||
2a33a3c2 JR |
33 | import logging |
34 | import pyftpdlib.log | |
35 | pyftpdlib.log.LEVEL = logging.DEBUG | |
36 | ||
07659514 JS |
37 | class OVSFTPHandler(FTPHandler): |
38 | authorizer = DummyAuthorizer() | |
39 | authorizer.add_anonymous("/tmp") | |
508509b2 JR |
40 | # Hack around a bug in pyftpdlib, which rejects EPRT |
41 | # connection due to mismatching textual representation of | |
42 | # the IPv6 address. | |
43 | permit_foreign_addresses = True | |
07659514 JS |
44 | server = [FTPServer, OVSFTPHandler, 21] |
45 | except ImportError: | |
46 | server = None | |
47 | pass | |
48 | return server | |
49 | ||
50 | ||
51 | def main(): | |
52 | SERVERS = { | |
a0631d92 | 53 | 'http': [TCPServer, SimpleHTTPRequestHandler, 80], |
07659514 JS |
54 | 'http6': [TCPServerV6, SimpleHTTPRequestHandler, 80], |
55 | } | |
56 | ||
57 | ftpd = get_ftpd() | |
58 | if ftpd is not None: | |
59 | SERVERS['ftp'] = ftpd | |
60 | ||
61 | protocols = [srv for srv in SERVERS] | |
62 | parser = argparse.ArgumentParser( | |
63 | description='Run basic application servers.') | |
64 | parser.add_argument('proto', default='http', nargs='?', | |
65 | help='protocol to serve (%s)' % protocols) | |
66 | args = parser.parse_args() | |
67 | ||
68 | if args.proto not in SERVERS: | |
69 | parser.print_help() | |
70 | exit(1) | |
71 | ||
72 | constructor = SERVERS[args.proto][0] | |
73 | handler = SERVERS[args.proto][1] | |
74 | port = SERVERS[args.proto][2] | |
75 | srv = constructor(('', port), handler) | |
76 | srv.serve_forever() | |
77 | ||
78 | ||
79 | if __name__ == '__main__': | |
80 | main() |