Rev 2050 | Rev 2092 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed
| Rev 2050 | Rev 2091 | ||
|---|---|---|---|
| Line 38... | Line 38... | ||
| 38 | 38 | ||
| 39 | return true; |
39 | return true; |
| 40 | } |
40 | } |
| 41 | Console_RegisterCommand(Sensor_SetReportInterval, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Sensor_Aliases(), Sensor_Intervals()); }); |
41 | Console_RegisterCommand(Sensor_SetReportInterval, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args, Sensor_Aliases(), Sensor_Intervals()); }); |
| 42 | 42 | ||
| 43 | Sensor_OnNewPhonenumberFunctions = |
43 | Sensor_OnNewPhonenumberFunctions = []; |
| 44 | 44 | ||
| 45 | function Sensor_RegisterToNewPhonenumber(alias_name, callback) |
45 | function Sensor_RegisterToNewPhonenumber(alias_name, callback) |
| 46 | { |
46 | { |
| 47 |
|
47 | if (!Sensor_OnNewPhonenumberFunctions[alias_name]) |
| 48 | { |
48 | { |
| 49 |
|
49 | Sensor_OnNewPhonenumberFunctions[alias_name] = []; |
| 50 | } |
50 | } |
| 51 | 51 | ||
| 52 | if (!Sensor_OnNewPhonenumberFunctions[alias_name]) |
- | |
| 53 | { |
- | |
| 54 | Sensor_OnNewPhonenumberFunctions[alias_name] = new Array(); |
- | |
| 55 | } |
- | |
| 56 | - | ||
| 57 | Sensor_OnNewPhonenumberFunctions[alias_name].push(callback); |
52 | Sensor_OnNewPhonenumberFunctions[alias_name].push(callback); |
| 58 | } |
53 | } |
| 59 | 54 | ||
| 60 | function Sensor_OnMessage(module_name, module_id, command, variables) |
55 | function Sensor_OnMessage(module_name, module_id, command, variables) |
| 61 | { |
56 | { |
| 62 | if (in_array(Sensor_ModuleNames, module_name)) |
57 | if (in_array(Sensor_ModuleNames, module_name)) |
| Line 69... | Line 64... | ||
| 69 | 64 | ||
| 70 | switch (command) |
65 | switch (command) |
| 71 | { |
66 | { |
| 72 | case "Phonenumber": |
67 | case "Phonenumber": |
| 73 | { |
68 | { |
| 74 | for (var alias_name in aliases_data) |
69 | for (var alias_name in aliases_data) |
| 75 | { |
70 | { |
| 76 |
|
71 | var number = variables["Number"]; |
| 77 | { |
- | |
| 78 | var direction; |
- | |
| 79 |
|
72 | var incommingCall = true; |
| - | 73 | ||
| 80 |
|
74 | if (variables["Number"].length > 6) |
| 81 |
|
75 | { |
| - | 76 | /* A seems to mean it is an outgoing call! */ |
|
| 82 |
|
77 | if (number.charAt(0) === 'A') |
| 83 |
|
78 | { |
| 84 |
|
79 | incommingCall = false; |
| 85 | } |
80 | |
| 86 | var endIndex = variables["Number"].indexOf('C'); |
- | |
| 87 |
|
81 | /* Remove leading A */ |
| 88 |
|
82 | number = number.substring(1); |
| 89 | } |
83 | } |
| 90 |
|
84 | else /* Incomming call */ |
| 91 |
|
85 | { |
| 92 |
|
86 | incommingCall = true; |
| 93 | 87 | ||
| - | 88 | /* Remove leading D if needed */ |
|
| 94 |
|
89 | if (number.charAt(0) === 'D') |
| 95 | { |
90 | { |
| 96 |
|
91 | number = number.substring(1); |
| - | 92 | } |
|
| 97 | } |
93 | } |
| 98 | 94 | ||
| 99 |
|
95 | /* A number can have a trailing C */ |
| 100 | - | ||
| 101 |
|
96 | var endIndex = number.indexOf('C'); |
| 102 | 97 | ||
| 103 | var all_numbers = Storage_GetParameters("PhoneCalls"); |
- | |
| 104 | var newString = "{\"number\":\"" + variables["Number"] + "\",\"module\":\"" + alias_name + "\",\"direction\":\"" + direction + "\"}"; |
- | |
| 105 | Storage_SetParameter("PhoneCalls", get_time(), newString); |
- | |
| 106 |
|
98 | if (endIndex !== -1) |
| 107 | Sensor_StoreNumberInPhonebook(variables["Number"]); |
- | |
| 108 | if (Sensor_OnNewPhonenumberFunctions[alias_name]) |
- | |
| 109 | { |
99 | { |
| 110 |
|
100 | /* Remove trailing C */ |
| 111 | { |
- | |
| 112 |
|
101 | number = number.substring(0, endIndex); |
| 113 | Sensor_OnNewPhonenumberFunctions[alias_name][n](alias_name, variables["Number"], direction); |
- | |
| 114 | } |
102 | } |
| 115 | } |
- | |
| 116 | } |
103 | } |
| 117 | else if (variables["Number"].length > 1) |
- | |
| 118 | { |
- | |
| 119 |
|
104 | else if (number == "B00C") |
| 120 | { |
105 | { |
| 121 | /* Unknown number */ |
106 | /* Unknown number */ |
| 122 | var newString = "{\"number\":\"" + variables["Number"] + "\",\"module\":\"" + alias_name + "\",\"direction\":\"" + "in" + "\"}"; |
- | |
| 123 | Storage_SetParameter("PhoneCalls", get_time(), newString); |
- | |
| 124 |
|
107 | number = "Unknown"; |
| 125 | { |
- | |
| 126 |
|
108 | incommingCall = true; |
| 127 | { |
- | |
| 128 | /* Call callback with arguments number, direction */ |
- | |
| 129 | Sensor_OnNewPhonenumberFunctions[alias_name][n](alias_name, variables["Number"], "in"); |
- | |
| 130 | } |
- | |
| 131 | } |
- | |
| 132 | } |
109 | } |
| 133 |
|
110 | else if (number == "B10C") |
| 134 | { |
111 | { |
| 135 | /* Secret/protected number */ |
112 | /* Secret/protected number */ |
| 136 | var newString = "{\"number\":\"" + variables["Number"] + "\",\"module\":\"" + alias_name + "\",\"direction\":\"" + "in" + "\"}"; |
- | |
| 137 | Storage_SetParameter("PhoneCalls", get_time(), newString); |
- | |
| 138 |
|
113 | number = "Protected"; |
| 139 | { |
- | |
| 140 |
|
114 | incommingCall = true; |
| 141 | { |
- | |
| 142 | /* Call callback with arguments number, direction */ |
- | |
| 143 | Sensor_OnNewPhonenumberFunctions[alias_name][n](alias_name, variables["Number"], "in"); |
- | |
| 144 | } |
- | |
| 145 | } |
115 | } |
| - | 116 | else |
|
| - | 117 | { |
|
| - | 118 | Log("DTMF decoded number is to short, number: \"" + number + "\", length: " + number.length); |
|
| - | 119 | return; |
|
| - | 120 | } |
|
| - | 121 | ||
| - | 122 | ||
| - | 123 | /* Store number and direction in last values */ |
|
| - | 124 | var lastValue = {}; |
|
| - | 125 | var lastValueString = Storage_GetParameter("LastValues", alias_name); |
|
| - | 126 | ||
| - | 127 | if (lastValueString) |
|
| - | 128 | { |
|
| - | 129 | lastValue = JSON.parse(lastValueString); |
|
| 146 | } |
130 | } |
| - | 131 | ||
| - | 132 | var timestamp = get_time(); |
|
| - | 133 | ||
| - | 134 | lastValue["Phonenumber"] = { "value" : number, "timestamp" : timestamp }; |
|
| - | 135 | lastValue["Direction"] = { "value" : incommingCall ? "in" : "out", "timestamp" : timestamp }; |
|
| - | 136 | ||
| - | 137 | Storage_SetParameter("LastValues", alias_name, JSON.stringify(lastValue)); |
|
| - | 138 | ||
| - | 139 | ||
| - | 140 | /* Store number in phone call history */ |
|
| - | 141 | var newValue = { "number" : number, "direction" : incommingCall ? "in" : "out", "module" : alias_name, "names" : [], "timestamp" : timestamp }; |
|
| - | 142 | ||
| - | 143 | Storage_SetParameter("PhoneCalls", timestamp, JSON.stringify(newValue)); |
|
| - | 144 | ||
| - | 145 | ||
| - | 146 | /* Log the number */ |
|
| - | 147 | Log("New number: " + number + ", direction: " + (incommingCall ? "in" : "out")); |
|
| - | 148 | ||
| - | 149 | ||
| - | 150 | /* Lookup name */ |
|
| - | 151 | Sensor_StoreNumberInPhonebook(number, timestamp); |
|
| - | 152 | ||
| - | 153 | ||
| - | 154 | /* Call any potential subscribers */ |
|
| - | 155 | if (Sensor_OnNewPhonenumberFunctions[alias_name]) |
|
| 147 |
|
156 | { |
| - | 157 | for (var n in Sensor_OnNewPhonenumberFunctions[alias_name]) |
|
| 148 | { |
158 | { |
| - | 159 | /* Call callback with arguments number, direction */ |
|
| 149 |
|
160 | Sensor_OnNewPhonenumberFunctions[alias_name][n](alias_name, number, incommingCall ? "in" : "out"); |
| 150 | } |
161 | } |
| 151 | } |
162 | } |
| 152 | } |
163 | } |
| 153 | break; |
164 | break; |
| 154 | } |
165 | } |
| Line 188... | Line 199... | ||
| 188 | } |
199 | } |
| 189 | } |
200 | } |
| 190 | } |
201 | } |
| 191 | Module_RegisterToOnMessage("all", Sensor_OnMessage); |
202 | Module_RegisterToOnMessage("all", Sensor_OnMessage); |
| 192 | 203 | ||
| 193 | function Sensor_StoreNumberInPhonebook(number) |
204 | function Sensor_StoreNumberInPhonebook(number, timestamp) |
| 194 | { |
205 | { |
| 195 |
|
206 | var phonebookNumbers = Storage_GetJsonParamter("PhoneBook", number) |
| - | 207 | ||
| 196 |
|
208 | if (!phonebookNumbers) |
| 197 | { |
209 | { |
| 198 | if (number.charAt(0) != '0') |
210 | if (number.charAt(0) != '0') |
| 199 | { |
211 | { |
| 200 | if (typeof sensorDefaultPhoneAreaCode === 'undefined') |
212 | if (typeof sensorDefaultPhoneAreaCode === 'undefined') |
| 201 | { |
213 | { |
| Line 206... | Line 218... | ||
| 206 | { |
218 | { |
| 207 | number = sensorDefaultPhoneAreaCode+number; |
219 | number = sensorDefaultPhoneAreaCode + number; |
| 208 | } |
220 | } |
| 209 | } |
221 | } |
| 210 | 222 | ||
| 211 |
|
223 | phonebookNumbers = []; |
| - | 224 | ||
| 212 | url = "wap.eniro.se/query?search_word=" + number + "&what=mobwp"; |
225 | url = "wap.eniro.se/query?search_word=" + number + "&what=mobwp"; |
| 213 |
|
226 | //Log("\033[31mURL: http://"+url+"\033[0m\n"); |
| 214 | Http_Request(url, |
- | |
| - | 227 | ||
| 215 |
|
228 | Http_Request(url, function(socket_id, result, header, content_data) |
| - | 229 | { |
|
| - | 230 | //Log("\033[31mOnlinePhonebook-eniro: result was: " + result + "\033[0m\n"); |
|
| - | 231 | //Log("\033[31mOnlinePhonebook-eniro: content was: " + content_data + "\033[0m\n"); |
|
| - | 232 | ||
| 216 | if (result.indexOf("200 OK") != -1) |
233 | if (result.indexOf("200 OK") != -1) |
| 217 | { |
234 | { |
| 218 | //Log("\033[31mOnlinePhonebook: result was: " + content_data + "\033[0m\n"); |
- | |
| - | 235 | ||
| 219 | var lines = content_data.split("\n"); |
236 | var lines = content_data.split("\n"); |
| 220 | 237 | ||
| 221 | var endString = "<anchor>Tillbaka<prev/></anchor>"; |
238 | var endString = "<anchor>Tillbaka<prev/></anchor>"; |
| 222 | var nameStartString = "<td class=\"hTd2\">"; |
239 | var nameStartString = "<td class=\"hTd2\">"; |
| 223 | var nameEndString = "</table>"; |
240 | var nameEndString = "</table>"; |
| - | 241 | ||
| 224 | for (var n = 1; n < lines.length; n++) |
242 | for (var n = 1; n < lines.length; n++) |
| 225 | { |
243 | { |
| 226 | var line = lines[n].trim("\n"); |
244 | var line = lines[n].trim("\n"); |
| 227 | 245 | ||
| 228 | if (line.indexOf(endString) != -1) |
246 | if (line.indexOf(endString) != -1) |
| 229 | { |
247 | { |
| 230 | break; |
248 | break; |
| 231 | } |
249 | } |
| - | 250 | ||
| 232 | if (line.indexOf(nameStartString) != -1) |
251 | if (line.indexOf(nameStartString) != -1) |
| 233 | { |
252 | { |
| 234 | line = lines[n+1].trim("\n"); |
253 | line = lines[n + 1].trim("\n"); |
| 235 | splitted = line.split("b>"); |
254 | splitted = line.split("b>"); |
| - | 255 | ||
| 236 |
|
256 | phonebookNumbers.push(splitted[1].substr(0, splitted[1].length - 2)); |
| 237 | break; |
257 | break; |
| 238 | } |
258 | } |
| 239 | - | ||
| 240 | } |
259 | } |
| 241 | 260 | ||
| 242 | //Log("\033[31mOnlinePhonebook: Line: " + lines[1] + "\033[0m\n"); |
261 | //Log("\033[31mOnlinePhonebook: Line: " + lines[1] + "\033[0m\n"); |
| 243 | //Log("\033[31mOnlinePhonebook: Line: " + lines[2] + "\033[0m\n"); |
262 | //Log("\033[31mOnlinePhonebook: Line: " + lines[2] + "\033[0m\n"); |
| 244 | //Log("\033[31mOnlinePhonebook: Line: " + lines[3] + "\033[0m\n"); |
263 | //Log("\033[31mOnlinePhonebook: Line: " + lines[3] + "\033[0m\n"); |
| 245 |
|
264 | if (phonebookNumbers.length > 0) |
| 246 | { |
265 | { |
| 247 |
|
266 | Storage_SetJsonParameter("PhoneBook", number, phonebookNumbers); |
| - | 267 | ||
| - | 268 | Sensor_UpdateNameInPhonecalls(timestamp, phonebookNumbers); |
|
| 248 | 269 | ||
| 249 | //CAll all listeners! |
270 | //CAll all listeners! |
| 250 | //.... |
271 | //.... |
| 251 | 272 | ||
| 252 |
|
273 | Log("\033[31mOnlinePhonebook-eniro: Found: " + JSON.stringify(phonebookNumbers) + "\033[0m\n"); |
| 253 | } |
- | |
| 254 | } |
- | |
| 255 | else |
- | |
| 256 | { |
- | |
| 257 | Log("\033[31mOnlinePhonebook: Failed to do name lookup, result was: " + result + "\033[0m\n"); |
- | |
| 258 | } |
- | |
| 259 | } |
274 | } |
| 260 | ); |
- | |
| 261 | if (persons.length == 0) { |
- | |
| 262 | if (typeof sensorRKSEEK_API === 'undefined') |
- | |
| 263 | { |
- | |
| 264 | ; |
- | |
| 265 | } |
275 | } |
| 266 | else |
276 | else |
| - | 277 | { |
|
| - | 278 | Log("\033[31mOnlinePhonebook-eniro: Failed to do name lookup, result was: " + result + "\033[0m\n"); |
|
| - | 279 | } |
|
| - | 280 | }); |
|
| - | 281 | ||
| - | 282 | if (phonebookNumbers.length == 0) |
|
| - | 283 | { |
|
| - | 284 | if (typeof sensorRKSEEK_API !== 'undefined') |
|
| 267 | { |
285 | { |
| 268 | url = "rkseek.oblivioncreations.se/?client="+sensorRKSEEK_API+"&n=" + number + "&out=text"; |
286 | url = "rkseek.oblivioncreations.se/?client="+sensorRKSEEK_API+"&n=" + number + "&out=text"; |
| 269 | Log("\033[31mURL: http://"+url+"\033[0m\n"); |
287 | Log("\033[31mURL: http://"+url+"\033[0m\n"); |
| 270 | Http_Request(url, |
- | |
| - | 288 | ||
| 271 |
|
289 | Http_Request(url, function(socket_id, result, header, content_data) |
| 272 | { |
290 | { |
| 273 |
|
291 | phonebookNumbers = []; |
| - | 292 | ||
| 274 | if (result.indexOf("200 OK") != -1) |
293 | if (result.indexOf("200 OK") != -1) |
| 275 | { |
294 | { |
| 276 | //Log("\033[31mOnlinePhonebook: result was: " + content_data + "\033[0m\n"); |
295 | //Log("\033[31mOnlinePhonebook: result was: " + content_data + "\033[0m\n"); |
| 277 | var lines = content_data.split("\n"); |
296 | var lines = content_data.split("\n"); |
| 278 | //Log("\033[31mOnlinePhonebook: Line: " + lines[1] + "\033[0m\n"); |
297 | //Log("\033[31mOnlinePhonebook: Line: " + lines[1] + "\033[0m\n"); |
| 279 | //Log("\033[31mOnlinePhonebook: Line: " + lines[2] + "\033[0m\n"); |
298 | //Log("\033[31mOnlinePhonebook: Line: " + lines[2] + "\033[0m\n"); |
| 280 | //Log("\033[31mOnlinePhonebook: Line: " + lines[3] + "\033[0m\n"); |
299 | //Log("\033[31mOnlinePhonebook: Line: " + lines[3] + "\033[0m\n"); |
| 281 |
|
300 | if (lines[2].length > 0) |
| - | 301 | { |
|
| 282 |
|
302 | phonebookNumbers = lines[2]; |
| 283 |
|
303 | Storage_SetJsonParameter("PhoneBook", number, phonebookNumbers); |
| - | 304 | ||
| - | 305 | Sensor_UpdateNameInPhonecalls(timestamp, phonebookNumbers); |
|
| - | 306 | ||
| 284 |
|
307 | Log("\033[31mOnlinePhonebook-rseek: Found: " + JSON.stringify(phonebookNumbers) + "\033[0m\n"); |
| 285 | } |
308 | } |
| 286 | } |
309 | } |
| 287 | else |
310 | else |
| 288 | { |
311 | { |
| 289 |
|
312 | Log("\033[31mOnlinePhonebook-rseek: Failed to do name lookup, result was: " + result + "\033[0m\n"); |
| 290 | } |
313 | } |
| 291 | } |
- | |
| 292 |
|
314 | }); |
| 293 | } |
315 | } |
| 294 | } |
316 | } |
| 295 | 317 | ||
| 296 | /* |
318 | /* |
| 297 | Http_Request("wap.hitta.se/default.aspx?Who=" + number + "&Where=&PageAction=White", |
319 | Http_Request("wap.hitta.se/default.aspx?Who=" + number + "&Where=&PageAction=White", |
| Line 300... | Line 322... | ||
| 300 | if (result.indexOf("200 OK") != -1) |
322 | if (result.indexOf("200 OK") != -1) |
| 301 | { |
323 | { |
| 302 | var endString = "<anchor>Tillbaka<prev/></anchor>"; |
324 | var endString = "<anchor>Tillbaka<prev/></anchor>"; |
| 303 | var nameStartString = " title=\"Link\">"; |
325 | var nameStartString = " title=\"Link\">"; |
| 304 | var nameEndString = "</a>"; |
326 | var nameEndString = "</a>"; |
| 305 | |
327 | |
| 306 | var lines = content_data.split("<br/>"); |
328 | var lines = content_data.split("<br/>"); |
| 307 | |
329 | |
| 308 | for (var n = 1; n < lines.length; n++) |
330 | for (var n = 1; n < lines.length; n++) |
| 309 | { |
331 | { |
| 310 | var line = lines[n].trim(" \n"); |
332 | var line = lines[n].trim(" \n"); |
| 311 | |
333 | |
| 312 | if (line.indexOf(endString) != -1) |
334 | if (line.indexOf(endString) != -1) |
| 313 | { |
335 | { |
| 314 | break; |
336 | break; |
| 315 | } |
337 | } |
| 316 | var pos = line.indexOf(nameStartString + (persons.length+1) + "."); |
338 | var pos = line.indexOf(nameStartString + (persons.length+1) + "."); |
| 317 | |
339 | |
| 318 | if (pos != -1) |
340 | if (pos != -1) |
| 319 | { |
341 | { |
| 320 | pos += nameStartString.length + 2 |
342 | pos += nameStartString.length + 2 |
| 321 | persons[persons.length] = line.substr(pos, line.length-pos-nameEndString.length).html_entity_decode().replace(" ", " "); |
343 | persons[persons.length] = line.substr(pos, line.length-pos-nameEndString.length).html_entity_decode().replace(" ", " "); |
| 322 | } |
344 | } |
| Line 324... | Line 346... | ||
| 324 | if (persons.length > 0) { |
346 | if (persons.length > 0) { |
| 325 | Storage_SetJsonParameter("PhoneBook", number, persons); |
347 | Storage_SetJsonParameter("PhoneBook", number, persons); |
| 326 | |
348 | |
| 327 | //CAll all listeners! |
349 | //CAll all listeners! |
| 328 | //.... |
350 | //.... |
| 329 | |
351 | |
| 330 | Log("\033[31mOnlinePhonebook: Found: " + JSON.stringify(persons) + "\033[0m\n"); |
352 | Log("\033[31mOnlinePhonebook: Found: " + JSON.stringify(persons) + "\033[0m\n"); |
| 331 | } |
353 | } |
| 332 | } |
354 | } |
| 333 | else |
355 | else |
| 334 | { |
356 | { |
| 335 | Log("\033[31mOnlinePhonebook: Failed to do name lookup, result was: " + result + "\033[0m\n"); |
357 | Log("\033[31mOnlinePhonebook: Failed to do name lookup, result was: " + result + "\033[0m\n"); |
| 336 | } |
358 | } |
| 337 | } |
359 | } |
| 338 | ); |
360 | ); |
| 339 | */ |
361 | */ |
| - | 362 | ||
| - | 363 | } |
|
| 340 |
|
364 | else |
| - | 365 | { |
|
| 341 |
|
366 | //Log("Number already stored\n"); |
| - | 367 | ||
| - | 368 | Sensor_UpdateNameInPhonecalls(timestamp, phonebookNumbers); |
|
| 342 | } |
369 | } |
| 343 | } |
370 | } |
| 344 | Console_RegisterCommand(Sensor_StoreNumberInPhonebook, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args); }); |
371 | Console_RegisterCommand(Sensor_StoreNumberInPhonebook, function(arg_index, args) { return Console_StandardAutocomplete(arg_index, args); }); |
| 345 | 372 | ||
| - | 373 | function Sensor_UpdateNameInPhonecalls(timestamp, numbers) |
|
| - | 374 | { |
|
| - | 375 | if (numbers.length > 0) |
|
| - | 376 | { |
|
| - | 377 | var lastValueString = Storage_GetParameter("PhoneCalls", timestamp); |
|
| 346 | 378 | ||
| - | 379 | if (lastValueString) |
|
| - | 380 | { |
|
| - | 381 | var lastValue = JSON.parse(lastValueString); |
|
| - | 382 | ||
| - | 383 | lastValue.names = numbers; |
|
| - | 384 | ||
| - | 385 | Storage_SetParameter("PhoneCalls", timestamp, JSON.stringify(lastValue)); |
|
| - | 386 | } |
|
| - | 387 | } |
|
| - | 388 | } |
|
| 347 | 389 | ||