diff --git a/exec/mspservice.js b/exec/mspservice.js index 537a1a16d8ac6b26e17be899321d9bded07bf491..c450d5db37f764cf1e3ba72d618a14ad3ec733ab 100644 --- a/exec/mspservice.js +++ b/exec/mspservice.js @@ -19,7 +19,8 @@ load("sockdefs.js"); load("nodedefs.js"); - +var userprops = load({}, "userprops.js"); +var section = "imsg received"; var output_buf = ""; var version=0; var send_response=false; @@ -67,6 +68,20 @@ function read_str(msg) } } +function update_user_imsg(usernum, sender, bbs, client, count) +{ + var last = { + "name": sender, + "BBS": bbs, + "ip_address": client.ip_address, + "host_name": client.host_name, + "protocol": client.protocol, + "localtime": new Date(), + "count": count + }; + return userprops.set(section, /* key: */null, last, usernum); +} + var b; var recipient=""; var recip_node=""; @@ -79,7 +94,7 @@ var signature=""; var usernum=0; /* Read version */ -if(!client.socket.data_waiting && !client.socket.is_connected) +if(!client.socket.data_waiting || !client.socket.is_connected) done(); b=client.socket.recvBin(1); if(client.socket.type==SOCK_DGRAM) @@ -123,7 +138,7 @@ var telegram_buf="\1n\1h\1cInstant Message\1n from \1h\1y"; telegram_buf += sender; if(sender_term != "") telegram_buf += " \1n"+sender_term+"\1h"; -telegram_buf += "\r\n\1w[\1n"; +telegram_buf += " \1w[\1n"; if(signature != "") { telegram_buf += signature; telegram_buf += "\1h]" @@ -137,8 +152,23 @@ else { telegram_buf += "\1h)"; } } -telegram_buf += "\1n:\r\n\1h"; -telegram_buf += message; +var last = userprops.get(section, /* key: */null, /* deflt: */null, usernum); +telegram_buf += "\1n:"; +if(signature.length && (!last || signature != last.BBS || sender != last.name)) { + var avatar_lib = load({}, "avatar_lib.js"); + var avatar = avatar_lib.read(null, sender, signature); + if(avatar_lib.is_enabled(avatar)) { + load('graphic.js'); + var graphic = new Graphic(avatar_lib.defs.width, avatar_lib.defs.height); + try { + graphic.BIN = base64_decode(avatar.data); + telegram_buf += "\r\n" + graphic.MSG; + } catch(e) { + log(LOG_ERR, e); + }; + } +} +telegram_buf += "\1n\r\n\1h" + message; /* TODO cache cookies and prevent dupes */ if(recipient != "") { @@ -153,6 +183,8 @@ if(recipient != "") { else { send_response=system.put_telegram(usernum, telegram_buf); log("Attempt to send telegram: "+(send_response?"Success":"Failure")); + if(send_response) + update_user_imsg(usernum, sender, signature, client, last ? last.count + 1 : 1); } } else if(to_node) {