1 |
#!/usr/bin/python |
2 |
|
3 |
import cgi, Cookie |
4 |
import cgitb; cgitb.enable() |
5 |
import Asterisk.Manager |
6 |
import time |
7 |
import os |
8 |
|
9 |
_header_printed = False |
10 |
|
11 |
def print_header(headers=None, cookies=None): |
12 |
"""Spit out the required headers for a CGI script. Optionally set cookies""" |
13 |
|
14 |
global _header_printed |
15 |
if not _header_printed: |
16 |
print "Content-type: text/html" |
17 |
if cookies: |
18 |
print cookies |
19 |
if headers: |
20 |
for header in headers.keys(): |
21 |
print "%s: %s" % (header, headers.get(header)) |
22 |
print "\n" |
23 |
_header_printed = True |
24 |
|
25 |
|
26 |
def make_options(options={}, default=""): |
27 |
html = "" |
28 |
individual_options = [] |
29 |
for optionvalue in options.keys(): |
30 |
if optionvalue == default: |
31 |
individual_options.append("""<option value="%s"%s>%s</option>""" % (optionvalue, " selected", options.get(optionvalue))) |
32 |
else: |
33 |
individual_options.append("""<option value="%s"%s>%s</option>""" % (optionvalue, "", options.get(optionvalue))) |
34 |
html = "".join(individual_options) |
35 |
return html |
36 |
|
37 |
|
38 |
def display_form(default_source="", default_destination="", default_transport="", remember=False): |
39 |
"""Display the form HTML, optionally set default values""" |
40 |
|
41 |
print_header() |
42 |
if remember: |
43 |
remember = " checked" |
44 |
print """<html> |
45 |
<head> |
46 |
<title>Click to call</title> |
47 |
</head> |
48 |
<body> |
49 |
<h1>Asterisk click to call gateway</h1> |
50 |
<form method="post"> |
51 |
<table> |
52 |
<tr> |
53 |
<td>Your number</td><td><input type="text" name="source" value="%(default_source)s"></td><td>via <select name="transport">%(options)s</select> (as dialled via the transport)</td> |
54 |
</tr> |
55 |
<tr> |
56 |
<td>Number to call</td><td><input type="text" name="destination" value="%(default_destination)s"></td><td>(as dialled internally)</td> |
57 |
</tr> |
58 |
<tr> |
59 |
<td colspan=3><input type="checkbox" name="save_source"%(remember)s> Remember my number and transport</td> |
60 |
</tr> |
61 |
<tr> |
62 |
<td colspan=3><input type="submit" name="submit" value="Place call"><input type="reset" value="Clear"></td> |
63 |
</tr> |
64 |
</table> |
65 |
</form> |
66 |
</body> |
67 |
</html> |
68 |
""" % { 'default_source': default_source, |
69 |
'default_destination': default_destination, |
70 |
'options': make_options({"Zap/g3": "US Landline", "SIP/engin": "Australian SIP", "SIP": "Internal SIP extension"}, default_transport), |
71 |
'remember': remember |
72 |
} |
73 |
|
74 |
|
75 |
def process_form(form): |
76 |
"""Process a submitted form""" |
77 |
|
78 |
if "source" not in form.keys(): |
79 |
display_form() |
80 |
elif "destination" not in form.keys(): |
81 |
display_form(default_source=form.getfirst("source")) |
82 |
else: |
83 |
cookie = Cookie.SimpleCookie() |
84 |
if "save_source" in form.keys(): |
85 |
cookie["source"] = form.getfirst("source") |
86 |
cookie["source"]["expires"] = time.asctime(tuple([time.gmtime()[0]+1] + list(time.gmtime()[1:]))) |
87 |
cookie["transport"] = form.getfirst("transport") |
88 |
cookie["transport"]["expires"] = cookie["source"]["expires"] |
89 |
else: |
90 |
cookie.load(os.environ.get("HTTP_COOKIE", "")) |
91 |
if "source" in cookie: |
92 |
cookie["source"] = "" |
93 |
cookie["source"]["expires"] = time.asctime(time.gmtime()) |
94 |
if "transport" in cookie: |
95 |
cookie["transport"] = "" |
96 |
cookie["transport"]["expires"] = time.asctime(time.gmtime()) |
97 |
print_header(cookies=cookie) |
98 |
print "<h1>Asterisk click to call gateway</h1>" |
99 |
manager = None |
100 |
try: |
101 |
manager = Asterisk.Manager.Manager(("localhost", 5038), "apache", "letmein") |
102 |
except Exception, e: |
103 |
print "Sorry, got an exception (%s) when trying to connect to Asterisk" % e |
104 |
#result = { "Message": "Simulating", "Response": "Success" } |
105 |
if manager: |
106 |
try: |
107 |
result = manager.Originate(channel="%s/%s" % (form.getfirst("transport"), form.getfirst("source")), context="internal-ctc", extension="%s" % form.getfirst("destination"), priority=1) |
108 |
if result: |
109 |
print "%(Response)s: %(Message)s" % result |
110 |
except Exception, e: |
111 |
print "Got an exception: %s" % e |
112 |
|
113 |
|
114 |
if __name__ == "__main__": |
115 |
form = cgi.FieldStorage() |
116 |
if not(form.has_key("submit")): |
117 |
print_header() |
118 |
cookies = Cookie.SimpleCookie() |
119 |
cookies.load(os.environ.get("HTTP_COOKIE", "")) |
120 |
default_source=cookies.get("source", "") |
121 |
default_transport=cookies.get("transport", "") |
122 |
if default_source: |
123 |
default_source = default_source.value |
124 |
if default_transport: |
125 |
default_transport = default_transport.value |
126 |
display_form(default_source=default_source, default_transport=default_transport, remember="source" in cookies) |
127 |
else: |
128 |
process_form(form) |