mirror of
https://github.com/Adaptix-Framework/AdaptixC2
synced 2026-06-08 10:20:39 +00:00
121 lines
2.8 KiB
Go
121 lines
2.8 KiB
Go
package server
|
|
|
|
import (
|
|
"AdaptixServer/core/utils/logs"
|
|
"AdaptixServer/core/utils/safe"
|
|
"bytes"
|
|
"encoding/json"
|
|
"github.com/gorilla/websocket"
|
|
)
|
|
|
|
func (ts *Teamserver) SyncClient(username string, packet interface{}) {
|
|
var (
|
|
buffer bytes.Buffer
|
|
err error
|
|
clientWS *websocket.Conn
|
|
)
|
|
|
|
err = json.NewEncoder(&buffer).Encode(packet)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
logs.Debug("SyncClient to '%v': %v\n", username, buffer.String())
|
|
|
|
value, found := ts.clients.Get(username)
|
|
if found {
|
|
clientWS = value.(*websocket.Conn)
|
|
err = clientWS.WriteMessage(websocket.BinaryMessage, buffer.Bytes())
|
|
if err != nil {
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
func (ts *Teamserver) SyncAllClients(packet interface{}) {
|
|
var (
|
|
buffer bytes.Buffer
|
|
err error
|
|
)
|
|
|
|
err = json.NewEncoder(&buffer).Encode(packet)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
logs.Debug("SyncAllClients: %v\n", buffer.String())
|
|
|
|
ts.clients.ForEach(func(key string, value interface{}) {
|
|
clientWS := value.(*websocket.Conn)
|
|
_ = clientWS.WriteMessage(websocket.BinaryMessage, buffer.Bytes())
|
|
})
|
|
}
|
|
|
|
func (ts *Teamserver) SyncSavePacket(store string, packet interface{}) {
|
|
if ts.syncpackets.Contains(store) == false {
|
|
ts.syncpackets.Put(store, safe.NewSlice())
|
|
}
|
|
|
|
value, found := ts.syncpackets.Get(store)
|
|
if found {
|
|
value.(*safe.Slice).Put(packet)
|
|
}
|
|
}
|
|
|
|
func (ts *Teamserver) SyncStored(clientWS *websocket.Conn) {
|
|
var (
|
|
buffer bytes.Buffer
|
|
packet interface{}
|
|
)
|
|
|
|
ts.syncpackets.DirectLock()
|
|
mapPackets := ts.syncpackets.DirectMap()
|
|
|
|
sumLen := 0
|
|
for _, value := range mapPackets {
|
|
sumLen += value.(*safe.Slice).Len()
|
|
}
|
|
|
|
if sumLen != 0 {
|
|
packet = CreateSpSyncStart(sumLen)
|
|
_ = json.NewEncoder(&buffer).Encode(packet)
|
|
_ = clientWS.WriteMessage(websocket.BinaryMessage, buffer.Bytes())
|
|
buffer.Reset()
|
|
|
|
if ts.syncpackets.Contains(STORE_INIT) {
|
|
sliceInit := mapPackets[STORE_INIT].(*safe.Slice)
|
|
for value := range sliceInit.Iterator() {
|
|
_ = json.NewEncoder(&buffer).Encode(value)
|
|
_ = clientWS.WriteMessage(websocket.BinaryMessage, buffer.Bytes())
|
|
buffer.Reset()
|
|
}
|
|
}
|
|
|
|
if ts.syncpackets.Contains(STORE_LOG) {
|
|
sliceLog := mapPackets[STORE_LOG].(*safe.Slice)
|
|
for value := range sliceLog.Iterator() {
|
|
_ = json.NewEncoder(&buffer).Encode(value)
|
|
_ = clientWS.WriteMessage(websocket.BinaryMessage, buffer.Bytes())
|
|
buffer.Reset()
|
|
}
|
|
}
|
|
for mKey, mValue := range mapPackets {
|
|
if mKey != STORE_LOG && mKey != STORE_INIT {
|
|
sliceVal := mValue.(*safe.Slice)
|
|
for value := range sliceVal.Iterator() {
|
|
_ = json.NewEncoder(&buffer).Encode(value)
|
|
_ = clientWS.WriteMessage(websocket.BinaryMessage, buffer.Bytes())
|
|
buffer.Reset()
|
|
}
|
|
}
|
|
}
|
|
|
|
packet = CreateSpSyncFinish()
|
|
_ = json.NewEncoder(&buffer).Encode(packet)
|
|
_ = clientWS.WriteMessage(websocket.BinaryMessage, buffer.Bytes())
|
|
buffer.Reset()
|
|
}
|
|
|
|
ts.syncpackets.DirectUnlock()
|
|
}
|