NodeDef+Ban fixes + io.Writers: Redirect

master
HimbeerserverDE 2021-04-01 22:06:26 +02:00
parent d5475e7287
commit 02e896c4a9
No known key found for this signature in database
GPG Key ID: 1A651504791E6A8B
8 changed files with 58 additions and 28 deletions

View File

@ -98,6 +98,11 @@ Description: The CSM restriction flags, default is none
* 63: All restrictions
To set multiple flags at the same time add the corresponding numbers
```
> `csm_restriction_noderange`
```
Type: Integer
Description: The CSM node range, default is 8
```
> `server_reintergration_interval`
```
Type: Integer

View File

@ -4,6 +4,7 @@ import (
"crypto/rand"
"database/sql"
"encoding/base64"
"errors"
"log"
"os"
"strings"
@ -96,7 +97,11 @@ func modAuthItem(db *sql.DB, name, password string) error {
func readAuthItem(db *sql.DB, name string) (string, error) {
var r string
err := db.QueryRow(`SELECT password FROM auth WHERE name = ?;`, name).Scan(&r)
return r, err
if err != nil && !errors.Is(err, sql.ErrNoRows) {
return "", err
}
return r, nil
}
func init() {

6
ban.go
View File

@ -30,7 +30,11 @@ func addBanItem(db *sql.DB, addr, name string) error {
func readBanItem(db *sql.DB, addr string) (string, error) {
var r string
err := db.QueryRow(`SELECT name FROM ban WHERE addr = ?;`, addr).Scan(&r)
return r, err
if err != nil && !errors.Is(err, sql.ErrNoRows) {
return "", err
}
return r, nil
}
// deleteBanItem deletes a ban DB entry

View File

@ -200,12 +200,17 @@ func (c *Conn) announceMedia() {
csmrf = 0
}
csmnr, ok := ConfKey("csm_restriction_noderange").(int)
if !ok {
csmnr = 8
}
data = make([]byte, 14)
data[0] = uint8(0x00)
data[1] = uint8(ToClientCsmRestrictionFlags)
binary.BigEndian.PutUint32(data[2:6], uint32(0))
binary.BigEndian.PutUint32(data[6:10], uint32(csmrf))
binary.BigEndian.PutUint32(data[10:], uint32(0))
binary.BigEndian.PutUint32(data[10:], uint32(csmnr))
ack, err = c.Send(rudp.Pkt{Reader: bytes.NewReader(data)})
if err != nil {
@ -221,6 +226,12 @@ func (c *Conn) announceMedia() {
WriteBytes16(w, media[f].digest)
}
remote, ok := ConfKey("remote_media_server").(string)
if !ok {
remote = ""
}
WriteBytes16(w, []byte(remote))
ack, err = c.Send(rudp.Pkt{Reader: w})
if err != nil {
log.Print(err)
@ -246,12 +257,6 @@ func (c *Conn) sendMedia(r *bytes.Reader) {
WriteBytes32(w, media[rq[f]].data)
}
remote, ok := ConfKey("remote_media_server").(string)
if !ok {
remote = ""
}
WriteBytes16(w, []byte(remote))
ack, err := c.Send(rudp.Pkt{
Reader: w,
PktInfo: rudp.PktInfo{

View File

@ -156,9 +156,10 @@ func mergeNodedefs(mgrs map[string][]byte) error {
for _, srvdefs := range nodeDefs {
for _, def := range srvdefs {
if len(def.Data()) > 0 {
defData := make([]byte, 2+len(def.Data()))
defData := make([]byte, 4+len(def.Data()))
binary.BigEndian.PutUint16(defData[0:2], def.ID())
copy(defData[2:], def.Data())
binary.BigEndian.PutUint16(defData[2:4], uint16(len(def.Data())))
copy(defData[4:], def.Data())
allDefs = append(allDefs, defData...)
}
}

View File

@ -2,6 +2,7 @@ package main
import (
"database/sql"
"errors"
"log"
"strings"
@ -70,6 +71,10 @@ func modPrivItem(db *sql.DB, name, privs string) error {
func readPrivItem(db *sql.DB, name string) (string, error) {
var r string
err := db.QueryRow(`SELECT privileges FROM privileges WHERE name = ?;`, name).Scan(&r)
if err != nil && !errors.Is(err, sql.ErrNoRows) {
return "", err
}
return r, err
}

View File

@ -134,16 +134,15 @@ func (c *Conn) Redirect(newsrv string) error {
compNodes := compBuf.Bytes()
data = make([]byte, 8+len(blockdata)+len(compNodes))
data[0] = uint8(0x00)
data[1] = uint8(ToClientBlockdata)
binary.BigEndian.PutUint16(data[2:4], uint16(x))
binary.BigEndian.PutUint16(data[4:6], uint16(y))
binary.BigEndian.PutUint16(data[6:8], uint16(z))
copy(data[8:8+len(blockdata)], blockdata)
copy(data[8+len(blockdata):], compNodes)
w := bytes.NewBuffer([]byte{0x00, ToClientBlockdata})
_, err = c.Send(rudp.Pkt{Reader: bytes.NewReader(data)})
WriteUint16(w, uint16(x))
WriteUint16(w, uint16(y))
WriteUint16(w, uint16(z))
w.Write(blockdata)
w.Write(compNodes)
_, err = c.Send(rudp.Pkt{Reader: w})
if err != nil {
return err
}
@ -325,13 +324,14 @@ func (c *Conn) Redirect(newsrv string) error {
}
// Reset cloud params
data = make([]byte, 28)
binary.BigEndian.PutUint32(data, math.Float32bits(0))
data = append(data, []byte{0, 0, 0, 0, 0, 0, 0, 0}...)
binary.BigEndian.PutUint32(data, math.Float32bits(0))
binary.BigEndian.PutUint32(data, math.Float32bits(0))
binary.BigEndian.PutUint32(data, math.Float32bits(0))
binary.BigEndian.PutUint32(data, math.Float32bits(0))
w := bytes.NewBuffer([]byte{0x00, ToClientCloudParams})
WriteUint32(w, math.Float32bits(0))
w.Write([]byte{0, 0, 0, 0, 0, 0, 0, 0})
WriteUint32(w, math.Float32bits(0))
WriteUint32(w, math.Float32bits(0))
WriteUint32(w, math.Float32bits(0))
WriteUint32(w, math.Float32bits(0))
_, err = c.Send(rudp.Pkt{Reader: bytes.NewReader(data)})
if err != nil {

View File

@ -2,6 +2,7 @@ package main
import (
"database/sql"
"errors"
"os"
_ "github.com/mattn/go-sqlite3"
@ -58,5 +59,9 @@ func StorageKey(key string) (string, error) {
var r string
err = db.QueryRow(`SELECT value FROM storage WHERE key = ?;`, key).Scan(&r)
return r, err
if err != nil && !errors.Is(err, sql.ErrNoRows) {
return "", err
}
return r, nil
}