// Network Diagnostics PDA cart programs // pingtool // packet sniffer // packet sender /datum/computer/file/pda_program/pingtool name = "Ping Tool" size = 8 var/send_freq = 1149 //Frequency signal is sent at, should be kept within normal radio ranges. var/range = 32 var/mode = 0 var/tmp/list/result init() radio_controller.add_object(master, "[send_freq]") return_text() if(..()) return var/dat = src.return_text_header() dat +="

Wireless Ping Tool

" dat += {"Freq: - - - [format_frequency(send_freq)] + + + | "} dat += "Range: " switch(range) if(16) dat += "- Low +" if(32) dat += "- Med +" if(64) dat += "- Max +" dat +="
" if(mode == 0) dat += "Send ping

" if(result && result.len > 0) for(var/t in result) dat+=t else dat += "No devices found
" else dat += "Listening...
" return dat Topic(href, href_list) if(..()) return if (href_list["send"]) spawn( 0 ) var/datum/signal/signal = get_free_signal() signal.source = src signal.transmission_method = TRANSMISSION_RADIO signal.data["address_1"] = "ping" signal.data["sender"] = master.net_id src.post_signal(signal,"[send_freq]") mode = 1 if(result) result.Cut() master.updateSelfDialog() spawn(20) mode = 0 master.updateSelfDialog() return else if (href_list["range"]) var/rd = text2num(href_list["range"]) switch(range) if(16) range = 32 if(32) if(rd>0) range = 64 else range = 16 if(64) range = 32 else if (href_list["adj_freq"]) var/new_freq = sanitize_frequency_diagnostic(send_freq + text2num(href_list["adj_freq"])) adjust_frequency(send_freq, new_freq) send_freq = new_freq else if (href_list["set_freq"]) var/new_freq = input(usr,"Target frequency (1141-1489):","Enter target frequency",send_freq) as num new_freq = sanitize_frequency_diagnostic(new_freq) adjust_frequency(send_freq, new_freq) send_freq = new_freq src.master.add_fingerprint(usr) src.master.updateSelfDialog() return receive_signal(datum/signal/signal) //boutput(world, "[master.net_id] Recieved signal from [signal.source] ([get_dist(master,signal.source)])") // //for(var/x in signal.data) // boutput(world, "[x] = [signal.data[x]]") //boutput(world, "---------------") if(..()) return if(signal.data["address_1"] == master.net_id && signal.data["command"] == "ping_reply") if(!result) result = new/list() if(get_dist(master,signal.source) <= range) result += "[signal.data["device"]] \[[signal.data["netid"]]\] [signal.data["data"]]
" proc/adjust_frequency(var/old_freq, var/new_freq) radio_controller.remove_object(master, "[old_freq]") radio_controller.add_object(master, "[new_freq]") /datum/computer/file/pda_program/packet_sniffer name = "Packet Sniffer" size = 16 var/scan_freq = 1149 var/range = 32 var/mode = 0 var/tmp/list/result init() radio_controller.add_object(master, "[scan_freq]") return_text() if(..()) return var/dat = src.return_text_header() dat +="

Wireless Network Sniffer

" dat += {"Freq: - - - [format_frequency(scan_freq)] + + + | "} dat += "Range: " switch(range) if(16) dat += "- Low +" if(32) dat += "- Med +" if(64) dat += "- Max +" dat +="
" if(mode == 0) dat += "Start" else dat += "Stop" dat += " Clear

" if(result) for(var/r in result) dat += "[r]
" dat +="
" if(mode == 0) dat += "Start" else dat += "Stop" dat += " Clear
" return dat Topic(href, href_list) if(..()) return if (href_list["adj_freq"]) var/new_freq = sanitize_frequency_diagnostic(scan_freq + text2num(href_list["adj_freq"])) adjust_frequency(scan_freq, new_freq) scan_freq = new_freq else if (href_list["set_freq"]) var/new_freq = input(usr,"Target frequency (1141-1489):","Enter target frequency",scan_freq) as num new_freq = sanitize_frequency_diagnostic(new_freq) adjust_frequency(scan_freq, new_freq) scan_freq = new_freq else if (href_list["run"]) mode = text2num(href_list["run"]) else if (href_list["clear"]) if(result) result.Cut() else if (href_list["range"]) var/rd = text2num(href_list["range"]) switch(range) if(16) range = 32 if(32) if(rd>0) range = 64 else range = 16 if(64) range = 32 src.master.add_fingerprint(usr) src.master.updateSelfDialog() return network_hook(datum/signal/signal, rx_method, rx_freq) if(!mode) return ///// //boutput(world, "[master.net_id] Recieved signal @[rx_freq] from [signal.source] ([get_dist(master,signal.source)])") //for(var/x in signal.data) // boutput(world, "[x] = [signal.data[x]]") //boutput(world, "----") ///// if(rx_freq != "[scan_freq]") return if(get_dist(master, signal.source) > range) return //boutput(world, "====") if(!result) result = new/list() var/t = "\[[time2text(world.timeofday,"mm:ss")]:[(world.timeofday%10)]\]:" var/t2 = "" for(var/d in signal.data) t2 += "[d]=[signal.data[d]]; " // look for detomax packet and obscure it (so it won't be easy to copy) if(signal.data["command"] == "text_message" && signal.data["batt_adjust"] == netpass_syndicate) t += "ERR_12939_CORRUPT_PACKET:" t2 = stars(t2, 15) result += "[t][t2]" if(result.len > 100) result.Cut(1,2) master.updateSelfDialog() proc/adjust_frequency(var/old_freq, var/new_freq) radio_controller.remove_object(master, "[old_freq]") radio_controller.add_object(master, "[new_freq]") /datum/computer/file/pda_program/packet_sender name = "Packet Sender" size = 8 var/send_freq = 1149 var/range = 32 var/tmp/list/keyval var/mode = 0 #define MAX_PACKET_KEYS 10 init() radio_controller.add_object(master, "[send_freq]") return_text() if(..()) return var/dat = src.return_text_header() dat +="

Manual Packet Sender

" dat += {"Freq: - - - [format_frequency(send_freq)] + + + | "} dat += "Range: " switch(range) if(16) dat += "- Low +" if(32) dat += "- Med +" if(64) dat += "- Max +" dat +="

(add new)
" dat += "
" dat +="
" if(mode) dat += "Sending...
" else dat += " Send Packet
" return dat Topic(href, href_list) if(..()) return if (href_list["adj_freq"]) send_freq = sanitize_frequency_diagnostic(send_freq + text2num(href_list["adj_freq"])) else if (href_list["set_freq"]) var/new_freq = input(usr,"Target frequency (1141-1489):","Enter target frequency",send_freq) as num new_freq = sanitize_frequency_diagnostic(new_freq) send_freq = new_freq else if(href_list["edit"]) var/codekey = href_list["code"] var/newkey = copytext(ckeyEx( input("Enter Packet Key", "Packet Sender", codekey) as text|null ), 1, 16) if(!newkey) return if (!src.master || !in_range(src.master, usr) && src.master.loc != usr) return if(!(src.holder in src.master)) return var/codeval = html_decode(keyval[codekey]) var/newval = copytext(strip_html( input("Enter Packet Value", "Packer Sender", codeval) as text|null ), 1, 255) if(!newval) newval = codekey return if (!src.master || !in_range(src.master, usr) && src.master.loc != usr) return if(!(src.holder in src.master)) return keyval.Remove(codekey) keyval[newkey] = newval else if(href_list["delete"]) var/codekey = href_list["code"] keyval.Remove(codekey) else if(href_list["add"]) if(keyval && (keyval.len >= MAX_PACKET_KEYS)) return var/newkey = copytext(ckeyEx( input("Enter Packet Key", "Packet Sender") as text|null ), 1, 16) if(!newkey) return if (!src.master || !in_range(src.master, usr) && src.master.loc != usr) return if(!(src.holder in src.master)) return var/newval = copytext(strip_html( input("Enter Packet Value", "Packer Sender") as text|null ), 1, 255) if(!newval) newval = "1" return if(!keyval) keyval = new() if (!src.master || !in_range(src.master, usr) && src.master.loc != usr) return if(!(src.holder in src.master)) return keyval[newkey] = newval else if (href_list["send"]) mode = 1 spawn( 0 ) var/datum/signal/signal = get_free_signal() signal.source = src signal.transmission_method = TRANSMISSION_RADIO for(var/key in keyval) signal.data[key] = keyval[key] if ((send_freq == 1149) && (!isnull(signal.data["message"])) && (signal.data["command"] == "text_message")) logTheThing("pdamsg", null, null, "[src.master.owner]'s PDA used by [src.master.loc.name] ([src.master.fingerprintslast]) (as [isnull(signal.data["sender_name"]) ? "Nobody" : signal.data["sender_name"]]) → [isnull(signal.data["address_1"]) ? "Everybody" : "[signal.data["address_1"]]"]: [signal.data["message"]]") src.post_signal(signal,"[send_freq]") master.updateSelfDialog() spawn(10) mode = 0 master.updateSelfDialog() else if (href_list["range"]) var/rd = text2num(href_list["range"]) switch(range) if(16) range = 32 if(32) if(rd>0) range = 64 else range = 16 if(64) range = 32 src.master.add_fingerprint(usr) src.master.updateSelfDialog() return #undef MAX_PACKET_KEYS /proc/sanitize_frequency_diagnostic(var/f) f = round(f) f = max(1141, f) // 114.1 f = min(1489, f) // 148.9 if ((f % 2) == 0) f += 1 return f