NodeDef+Ban fixes + io.Writers: Redirect
parent
d5475e7287
commit
02e896c4a9
|
@ -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
|
||||
|
|
7
auth.go
7
auth.go
|
@ -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
6
ban.go
|
@ -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
|
||||
|
|
19
media.go
19
media.go
|
@ -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{
|
||||
|
|
|
@ -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...)
|
||||
}
|
||||
}
|
||||
|
|
5
privs.go
5
privs.go
|
@ -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
|
||||
}
|
||||
|
||||
|
|
32
redirect.go
32
redirect.go
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue