HEX
Server: Apache/2.4.63 (Unix)
System: Linux Synopilou92 4.4.302+ #72806 SMP Mon Jul 21 23:16:00 CST 2025 x86_64
User: pilou92 (1026)
PHP: 8.0.30
Disabled: NONE
Upload Files
File: /volume1/@appstore/Spreadsheet/server/common/domain-socket/scgi-domain-socket.js
"use strict";const e=require("net");const t=require("../webapi/constant");const r=require("../domain-socket");const{logger:i}=require("@synology-office/logger");const s="\0";class n extends r{constructor(r,i,s){if(i.timeout===undefined){i.timeout=t.TIMEOUT}const n=e.connect({path:r},s);super(n,i)}encodeVal(e){const t=String.fromCharCode(0);return t+e+t}send(e){if(!this.sock.writable){return}let t="";for(const[r,n]of Object.entries(e)){if(n===undefined){continue}if(r.includes(s)){i.error(`Skip SCGI ${r} key includes embedded null byte`);continue}if(n.includes(s)){i.error(`Skip SCGI ${n} value includes embedded null byte`);continue}t+=r+this.encodeVal(n)}const r=Buffer.byteLength(t);this.sock.write(r+":"+t+",")}_setupSocketEvents(e){let t=null;let r=true,s=false;this.sock.on("data",(e=>{if(t){t=Buffer.concat([t,e])}else{t=Buffer.from(e)}if(!s){const e=t.indexOf("\r\n\r\n");if(-1!==e){s=true;const n=t.subarray(0,e).toString();if(n){const e=n.indexOf("Status:");if(-1!==e&&-1!==n.substr(e,12).indexOf("200")){i.error("Bad request:"+n);r=false}}t=t.subarray(e+4)}}}));this.sock.on("end",(()=>{try{if(!r||!t){this.finished=true;this.emit("error",new Error("unfinished"))}else{const e=JSON.parse(t.toString());this.finished=true;this.emit("data",e)}}catch(e){i.error("Bad request:"+t?.toString());i.error(e.stack);this.sock.destroy()}if(!this.finished){this.emit("error",new Error("unfinished"))}}));this.sock.on("error",(e=>{this.finished=true;this.emit("error",e)}))}}module.exports=n;