aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchDirectory.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchDirectory.cs')
-rw-r--r--OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchDirectory.cs201
1 files changed, 105 insertions, 96 deletions
diff --git a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchDirectory.cs b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchDirectory.cs
index caec43d..af5692c 100644
--- a/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchDirectory.cs
+++ b/OpenSim/Region/OptionalModules/Avatar/Voice/FreeSwitchVoice/FreeSwitchDirectory.cs
@@ -38,103 +38,111 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
38 private static readonly ILog m_log = 38 private static readonly ILog m_log =
39 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 39 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
40 40
41 public Hashtable HandleDirectoryRequest(Hashtable request) 41 public Hashtable HandleDirectoryRequest(string Context, string Realm, Hashtable request)
42 { 42 {
43 m_log.DebugFormat("[FreeSwitchDirectory] HandleDirectoryRequest called with {0}",request.ToString()); 43 Hashtable response = new Hashtable();
44 string domain = (string) request["domain"];
45 if ( domain != Realm ) {
46 response["content_type"] = "text/xml";
47 response["keepalive"] = false;
48 response["int_response_code"] = 200;
49 response["str_response_string"] = "";
50 } else {
51 m_log.DebugFormat("[FreeSwitchDirectory] HandleDirectoryRequest called with {0}",request.ToString());
44 52
45 Hashtable response = new Hashtable();
46 53
47 // information in the request we might be interested in 54 // information in the request we might be interested in
48 55
49 // Request 1 sip_auth for users account 56 // Request 1 sip_auth for users account
50 57
51 //Event-Calling-Function=sofia_reg_parse_auth 58 //Event-Calling-Function=sofia_reg_parse_auth
52 //Event-Calling-Line-Number=1494 59 //Event-Calling-Line-Number=1494
53 //action=sip_auth 60 //action=sip_auth
54 //sip_user_agent=Vivox-SDK-2.1.3010.6151-Mac%20(Feb-11-2009/16%3A42%3A41) 61 //sip_user_agent=Vivox-SDK-2.1.3010.6151-Mac%20(Feb-11-2009/16%3A42%3A41)
55 //sip_auth_username=xhZuXKmRpECyr2AARJYyGgg%3D%3D (==) 62 //sip_auth_username=xhZuXKmRpECyr2AARJYyGgg%3D%3D (==)
56 //sip_auth_realm=9.20.151.43 63 //sip_auth_realm=9.20.151.43
57 //sip_contact_user=xhZuXKmRpECyr2AARJYyGgg%3D%3D (==) 64 //sip_contact_user=xhZuXKmRpECyr2AARJYyGgg%3D%3D (==)
58 //sip_contact_host=192.168.0.3 // this shouldnt really be a local IP, investigate STUN servers 65 //sip_contact_host=192.168.0.3 // this shouldnt really be a local IP, investigate STUN servers
59 //sip_to_user=xhZuXKmRpECyr2AARJYyGgg%3D%3D 66 //sip_to_user=xhZuXKmRpECyr2AARJYyGgg%3D%3D
60 //sip_to_host=9.20.151.43 67 //sip_to_host=9.20.151.43
61 //sip_auth_method=REGISTER 68 //sip_auth_method=REGISTER
62 //user=xhZuXKmRpECyr2AARJYyGgg%3D%3D 69 //user=xhZuXKmRpECyr2AARJYyGgg%3D%3D
63 //domain=9.20.151.43 70 //domain=9.20.151.43
64 //ip=9.167.220.137 // this is the correct IP rather than sip_contact_host above when through a vpn or NAT setup 71 //ip=9.167.220.137 // this is the correct IP rather than sip_contact_host above when through a vpn or NAT setup
65 72
66 foreach (DictionaryEntry item in request) 73 foreach (DictionaryEntry item in request)
67 { 74 {
68 m_log.InfoFormat("[FreeSwitchDirectory] requestBody item {0} {1}", item.Key, item.Value); 75 m_log.InfoFormat("[FreeSwitchDirectory] requestBody item {0} {1}", item.Key, item.Value);
69 } 76 }
70 77
71 string eventCallingFunction = (string) request["Event-Calling-Function"]; 78 string eventCallingFunction = (string) request["Event-Calling-Function"];
72 if (eventCallingFunction == null) 79 if (eventCallingFunction == null)
73 { 80 {
74 eventCallingFunction = "sofia_reg_parse_auth"; 81 eventCallingFunction = "sofia_reg_parse_auth";
75 } 82 }
76 83
77 if (eventCallingFunction.Length == 0) 84 if (eventCallingFunction.Length == 0)
78 { 85 {
79 eventCallingFunction = "sofia_reg_parse_auth"; 86 eventCallingFunction = "sofia_reg_parse_auth";
80 } 87 }
81 88
82 if (eventCallingFunction == "sofia_reg_parse_auth") 89 if (eventCallingFunction == "sofia_reg_parse_auth")
83 { 90 {
84 string sipAuthMethod = (string)request["sip_auth_method"]; 91 string sipAuthMethod = (string)request["sip_auth_method"];
85 92
86 if (sipAuthMethod == "REGISTER") 93 if (sipAuthMethod == "REGISTER")
87 { 94 {
88 response = HandleRegister(request); 95 response = HandleRegister(Context, Realm, request);
89 } 96 }
90 else if (sipAuthMethod == "INVITE") 97 else if (sipAuthMethod == "INVITE")
91 { 98 {
92 response = HandleInvite(request); 99 response = HandleInvite(Context, Realm, request);
93 } 100 }
94 else 101 else
95 { 102 {
96 m_log.ErrorFormat("[FreeSwitchVoice] HandleDirectoryRequest unknown sip_auth_method {0}",sipAuthMethod); 103 m_log.ErrorFormat("[FreeSwitchVoice] HandleDirectoryRequest unknown sip_auth_method {0}",sipAuthMethod);
97 response["int_response_code"] = 404; 104 response["int_response_code"] = 404;
98 response["content_type"] = "text/xml"; 105 response["content_type"] = "text/xml";
99 response["str_response_string"] = ""; 106 response["str_response_string"] = "";
100 } 107 }
101 } 108 }
102 else if (eventCallingFunction == "switch_xml_locate_user") 109 else if (eventCallingFunction == "switch_xml_locate_user")
103 { 110 {
104 response = HandleLocateUser(request); 111 response = HandleLocateUser(Realm, request);
105 } 112 }
106 else if (eventCallingFunction == "user_data_function") // gets called when an avatar to avatar call is made 113 else if (eventCallingFunction == "user_data_function") // gets called when an avatar to avatar call is made
107 { 114 {
108 response = HandleLocateUser(request); 115 response = HandleLocateUser(Realm, request);
109 } 116 }
110 else if (eventCallingFunction == "user_outgoing_channel") 117 else if (eventCallingFunction == "user_outgoing_channel")
111 { 118 {
112 response = HandleRegister(request); 119 response = HandleRegister(Context, Realm, request);
113 } 120 }
114 else if (eventCallingFunction == "config_sofia") // happens once on freeswitch startup 121 else if (eventCallingFunction == "config_sofia") // happens once on freeswitch startup
115 { 122 {
116 response = HandleConfigSofia(request); 123 response = HandleConfigSofia(Context, Realm, request);
117 } 124 }
118 else if (eventCallingFunction == "switch_load_network_lists") 125 else if (eventCallingFunction == "switch_load_network_lists")
119 { 126 {
120 //response = HandleLoadNetworkLists(request); 127 //response = HandleLoadNetworkLists(request);
121 response["int_response_code"] = 404; 128 response["int_response_code"] = 404;
122 response["keepalive"] = false; 129 response["keepalive"] = false;
123 response["content_type"] = "text/xml"; 130 response["content_type"] = "text/xml";
124 response["str_response_string"] = ""; 131 response["str_response_string"] = "";
125 } 132 }
126 else 133 else
127 { 134 {
128 m_log.ErrorFormat("[FreeSwitchVoice] HandleDirectoryRequest unknown Event-Calling-Function {0}",eventCallingFunction); 135 m_log.ErrorFormat("[FreeSwitchVoice] HandleDirectoryRequest unknown Event-Calling-Function {0}",eventCallingFunction);
129 response["int_response_code"] = 404; 136 response["int_response_code"] = 404;
130 response["keepalive"] = false; 137 response["keepalive"] = false;
131 response["content_type"] = "text/xml"; 138 response["content_type"] = "text/xml";
132 response["str_response_string"] = ""; 139 response["str_response_string"] = "";
133 } 140 }
134 return response; 141 }
142 return response;
135 } 143 }
136 144
137 private Hashtable HandleRegister(Hashtable request) 145 private Hashtable HandleRegister(string Context, string Realm, Hashtable request)
138 { 146 {
139 m_log.Info("[FreeSwitchDirectory] HandleRegister called"); 147 m_log.Info("[FreeSwitchDirectory] HandleRegister called");
140 148
@@ -147,7 +155,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
147 response["content_type"] = "text/xml"; 155 response["content_type"] = "text/xml";
148 response["keepalive"] = false; 156 response["keepalive"] = false;
149 response["int_response_code"] = 200; 157 response["int_response_code"] = 200;
150 response["str_response_string"] = String.Format( 158
159 response["str_response_string"] = String.Format(
151 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" + 160 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" +
152 "<document type=\"freeswitch/xml\">\r\n" + 161 "<document type=\"freeswitch/xml\">\r\n" +
153 "<section name=\"directory\" description=\"User Directory\">\r\n" + 162 "<section name=\"directory\" description=\"User Directory\">\r\n" +
@@ -158,19 +167,19 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
158 "<param name=\"dial-string\" value=\"{{sip_contact_user={1}}}{{presence_id=${{dialed_user}}@${{dialed_domain}}}}${{sofia_contact(${{dialed_user}}@${{dialed_domain}})}}\"/>\r\n" + 167 "<param name=\"dial-string\" value=\"{{sip_contact_user={1}}}{{presence_id=${{dialed_user}}@${{dialed_domain}}}}${{sofia_contact(${{dialed_user}}@${{dialed_domain}})}}\"/>\r\n" +
159 "</params>\r\n" + 168 "</params>\r\n" +
160 "<variables>\r\n" + 169 "<variables>\r\n" +
161 "<variable name=\"user_context\" value=\"default\" />\r\n" + 170 "<variable name=\"user_context\" value=\"{3}\" />\r\n" +
162 "<variable name=\"presence_id\" value=\"{1}@{0}\"/>"+ 171 "<variable name=\"presence_id\" value=\"{1}@{0}\"/>"+
163 "</variables>\r\n" + 172 "</variables>\r\n" +
164 "</user>\r\n" + 173 "</user>\r\n" +
165 "</domain>\r\n" + 174 "</domain>\r\n" +
166 "</section>\r\n" + 175 "</section>\r\n" +
167 "</document>\r\n", 176 "</document>\r\n",
168 domain , user, password); 177 domain , user, password, Context);
169 178
170 return response; 179 return response;
171 } 180 }
172 181
173 private Hashtable HandleInvite(Hashtable request) 182 private Hashtable HandleInvite(string Context, string Realm, Hashtable request)
174 { 183 {
175 m_log.Info("[FreeSwitchDirectory] HandleInvite called"); 184 m_log.Info("[FreeSwitchDirectory] HandleInvite called");
176 185
@@ -195,7 +204,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
195 "<param name=\"dial-string\" value=\"{{sip_contact_user={1}}}{{presence_id=${1}@${{dialed_domain}}}}${{sofia_contact(${1}@${{dialed_domain}})}}\"/>\r\n" + 204 "<param name=\"dial-string\" value=\"{{sip_contact_user={1}}}{{presence_id=${1}@${{dialed_domain}}}}${{sofia_contact(${1}@${{dialed_domain}})}}\"/>\r\n" +
196 "</params>\r\n" + 205 "</params>\r\n" +
197 "<variables>\r\n" + 206 "<variables>\r\n" +
198 "<variable name=\"user_context\" value=\"default\" />\r\n" + 207 "<variable name=\"user_context\" value=\"{4}\" />\r\n" +
199 "<variable name=\"presence_id\" value=\"{1}@$${{domain}}\"/>"+ 208 "<variable name=\"presence_id\" value=\"{1}@$${{domain}}\"/>"+
200 "</variables>\r\n" + 209 "</variables>\r\n" +
201 "</user>\r\n" + 210 "</user>\r\n" +
@@ -205,20 +214,20 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
205 "<param name=\"dial-string\" value=\"{{sip_contact_user={1}}}{{presence_id=${3}@${{dialed_domain}}}}${{sofia_contact(${3}@${{dialed_domain}})}}\"/>\r\n" + 214 "<param name=\"dial-string\" value=\"{{sip_contact_user={1}}}{{presence_id=${3}@${{dialed_domain}}}}${{sofia_contact(${3}@${{dialed_domain}})}}\"/>\r\n" +
206 "</params>\r\n" + 215 "</params>\r\n" +
207 "<variables>\r\n" + 216 "<variables>\r\n" +
208 "<variable name=\"user_context\" value=\"default\" />\r\n" + 217 "<variable name=\"user_context\" value=\"{4}\" />\r\n" +
209 "<variable name=\"presence_id\" value=\"{3}@$${{domain}}\"/>"+ 218 "<variable name=\"presence_id\" value=\"{3}@$${{domain}}\"/>"+
210 "</variables>\r\n" + 219 "</variables>\r\n" +
211 "</user>\r\n" + 220 "</user>\r\n" +
212 "</domain>\r\n" + 221 "</domain>\r\n" +
213 "</section>\r\n" + 222 "</section>\r\n" +
214 "</document>\r\n", 223 "</document>\r\n",
215 domain , user, password,sipRequestUser); 224 domain , user, password,sipRequestUser, Context);
216 225
217 return response; 226 return response;
218 } 227 }
219 228
220 229
221 private Hashtable HandleLocateUser(Hashtable request) 230 private Hashtable HandleLocateUser(String Realm, Hashtable request)
222 { 231 {
223 m_log.Info("[FreeSwitchDirectory] HandleLocateUser called"); 232 m_log.Info("[FreeSwitchDirectory] HandleLocateUser called");
224 233
@@ -252,7 +261,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
252 return response; 261 return response;
253 } 262 }
254 263
255 private Hashtable HandleConfigSofia(Hashtable request) 264 private Hashtable HandleConfigSofia(string Context, string Realm, Hashtable request)
256 { 265 {
257 m_log.Info("[FreeSwitchDirectory] HandleConfigSofia called"); 266 m_log.Info("[FreeSwitchDirectory] HandleConfigSofia called");
258 267
@@ -285,7 +294,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
285 "<param name=\"retry-seconds\" value=\"30\"/>\r\n"+ 294 "<param name=\"retry-seconds\" value=\"30\"/>\r\n"+
286 "<param name=\"extension\" value=\"$${{default_provider_contact}}\"/>\r\n"+ 295 "<param name=\"extension\" value=\"$${{default_provider_contact}}\"/>\r\n"+
287 "<param name=\"contact-params\" value=\"domain_name=$${{domain}}\"/>\r\n"+ 296 "<param name=\"contact-params\" value=\"domain_name=$${{domain}}\"/>\r\n"+
288 "<param name=\"context\" value=\"public\"/>\r\n"+ 297 "<param name=\"context\" value=\"{1}\"/>\r\n"+
289 "</gateway>\r\n"+ 298 "</gateway>\r\n"+
290 "</gateways>\r\n"+ 299 "</gateways>\r\n"+
291 "<params>\r\n"+ 300 "<params>\r\n"+
@@ -300,7 +309,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.Voice.FreeSwitchVoice
300 "</domain>\r\n" + 309 "</domain>\r\n" +
301 "</section>\r\n" + 310 "</section>\r\n" +
302 "</document>\r\n", 311 "</document>\r\n",
303 domain); 312 domain, Context);
304 313
305 return response; 314 return response;
306 } 315 }