Skip to content

Commit 3278dce

Browse files
authored
Merge pull request #2044 from brianc/bmc/packet-stream-parser
Add packet stream parser
2 parents 2431a63 + 6168f2e commit 3278dce

19 files changed

+1990
-65
lines changed

.devcontainer/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ RUN apt-get update \
3232
&& curl -sS https://dl.yarnpkg.com/$(lsb_release -is | tr '[:upper:]' '[:lower:]')/pubkey.gpg | apt-key add - 2>/dev/null \
3333
&& echo "deb https://dl.yarnpkg.com/$(lsb_release -is | tr '[:upper:]' '[:lower:]')/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
3434
&& apt-get update \
35-
&& apt-get -y install --no-install-recommends yarn tmux locales \
35+
&& apt-get -y install --no-install-recommends yarn tmux locales postgresql \
3636
#
3737
# Install eslint globally
3838
&& npm install -g eslint \

.eslintrc

+17-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,18 @@
11
{
2-
"plugins": ["node"],
3-
"extends": ["standard", "eslint:recommended", "plugin:node/recommended"],
2+
"plugins": [
3+
"node"
4+
],
5+
"extends": [
6+
"standard",
7+
"eslint:recommended",
8+
"plugin:node/recommended"
9+
],
10+
"ignorePatterns": [
11+
"**/*.ts"
12+
],
413
"parserOptions": {
5-
"ecmaVersion": 2017
14+
"ecmaVersion": 2017,
15+
"sourceType": "module"
616
},
717
"env": {
818
"node": true,
@@ -11,10 +21,13 @@
1121
},
1222
"rules": {
1323
"space-before-function-paren": "off",
24+
"node/no-unsupported-features/es-syntax": "off",
1425
"node/no-unpublished-require": [
1526
"error",
1627
{
17-
"allowModules": ["pg"]
28+
"allowModules": [
29+
"pg"
30+
]
1831
}
1932
]
2033
}

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,5 @@ build/
55
node_modules/
66
package-lock.json
77
*.swp
8+
dist
9+
.DS_Store
+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"name": "pg-packet-stream",
3+
"version": "1.0.0",
4+
"main": "dist/index.js",
5+
"types": "dist/index.d.ts",
6+
"license": "MIT",
7+
"devDependencies": {
8+
"@types/node": "^12.12.21",
9+
"chunky": "^0.0.0",
10+
"typescript": "^3.7.3",
11+
"@types/chai": "^4.2.7",
12+
"@types/mocha": "^5.2.7",
13+
"chai": "^4.2.0",
14+
"mocha": "^6.2.2",
15+
"ts-node": "^8.5.4"
16+
},
17+
"scripts": {
18+
"test": "mocha -r ts-node/register src/**/*.test.ts"
19+
},
20+
"dependencies": {}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
const emptyBuffer = Buffer.allocUnsafe(0);
2+
3+
export class BufferReader {
4+
private buffer: Buffer = emptyBuffer;
5+
// TODO(bmc): support non-utf8 encoding
6+
private encoding: string = 'utf-8';
7+
constructor(private offset: number = 0) {
8+
}
9+
public setBuffer(offset: number, buffer: Buffer): void {
10+
this.offset = offset;
11+
this.buffer = buffer;
12+
}
13+
public int16() {
14+
const result = this.buffer.readInt16BE(this.offset);
15+
this.offset += 2;
16+
return result;
17+
}
18+
public byte() {
19+
const result = this.buffer[this.offset];
20+
this.offset++;
21+
return result;
22+
}
23+
public int32() {
24+
const result = this.buffer.readInt32BE(this.offset);
25+
this.offset += 4;
26+
return result;
27+
}
28+
public string(length: number): string {
29+
const result = this.buffer.toString(this.encoding, this.offset, this.offset + length);
30+
this.offset += length;
31+
return result;
32+
}
33+
public cstring(): string {
34+
var start = this.offset;
35+
var end = this.buffer.indexOf(0, start);
36+
this.offset = end + 1;
37+
return this.buffer.toString(this.encoding, start, end);
38+
}
39+
public bytes(length: number): Buffer {
40+
const result = this.buffer.slice(this.offset, this.offset + length);
41+
this.offset += length;
42+
return result;
43+
}
44+
}

0 commit comments

Comments
 (0)