114 lines
2.6 KiB
Go
114 lines
2.6 KiB
Go
package grcon_test
|
|
|
|
import (
|
|
"log"
|
|
"net"
|
|
|
|
"github.com/hamburghammer/grcon"
|
|
)
|
|
|
|
func ExampleRemoteConsole_Read() {
|
|
conn, err := net.Dial("tcp", "127.0.0.1:12345")
|
|
if err != nil {
|
|
log.Fatalf("establishing connection failed: %s", err.Error())
|
|
}
|
|
defer conn.Close()
|
|
|
|
remoteConsole := grcon.NewRemoteConsole(conn)
|
|
|
|
packet, err := remoteConsole.Read()
|
|
if err != nil {
|
|
log.Fatalf("reading packet failed: %s", err.Error())
|
|
}
|
|
|
|
log.Printf("new packet read:\nid: %d\ntype: %d\nbody: %s\n", packet.Id, packet.Type, string(packet.Body))
|
|
}
|
|
|
|
func ExampleRemoteConsole_Write() {
|
|
conn, err := net.Dial("tcp", "127.0.0.1:12345")
|
|
if err != nil {
|
|
log.Fatalf("establishing connection failed: %s", err.Error())
|
|
}
|
|
defer conn.Close()
|
|
|
|
remoteConsole := grcon.NewRemoteConsole(conn)
|
|
packet := grcon.Packet{
|
|
Id: 1,
|
|
Type: grcon.SERVERDATA_EXECCOMMAND,
|
|
Body: []byte("foo"),
|
|
}
|
|
|
|
err = remoteConsole.Write(packet)
|
|
if err != nil {
|
|
log.Fatalf("writing packet failed: %s", err.Error())
|
|
}
|
|
}
|
|
|
|
func ExampleRemoteConsole() {
|
|
conn, err := net.Dial("tcp", "127.0.0.1:12345")
|
|
if err != nil {
|
|
log.Fatalf("establishing connection failed: %s", err.Error())
|
|
}
|
|
defer conn.Close()
|
|
|
|
remoteConsole := grcon.NewRemoteConsole(conn)
|
|
|
|
// authenticated connection.
|
|
authPacket := grcon.Packet{
|
|
Id: 1,
|
|
Type: grcon.SERVERDATA_AUTH,
|
|
Body: []byte("password"),
|
|
}
|
|
err = remoteConsole.Write(authPacket)
|
|
authResponsePacket, err := remoteConsole.Read()
|
|
if err != nil {
|
|
log.Fatalf("auth failed: %s", err.Error())
|
|
}
|
|
if authResponsePacket.Id == -1 {
|
|
log.Fatal("auth failed: auth rejected password invalid")
|
|
}
|
|
|
|
// packet that contains the command to execute
|
|
cmdPacket := grcon.Packet{
|
|
Id: 2,
|
|
Type: grcon.SERVERDATA_EXECCOMMAND,
|
|
Body: []byte("foo"),
|
|
}
|
|
err = remoteConsole.Write(cmdPacket)
|
|
if err != nil {
|
|
log.Fatalf("writing packet failed: %s", err.Error())
|
|
}
|
|
|
|
// empty packet that the server should mirror to indicate the end of the previous executed command.
|
|
endPacket := grcon.Packet{
|
|
Id: 3,
|
|
Type: grcon.SERVERDATA_RESPONSE_VALUE,
|
|
Body: []byte(""),
|
|
}
|
|
err = remoteConsole.Write(cmdPacket)
|
|
if err != nil {
|
|
log.Fatalf("writing packet failed: %s", err.Error())
|
|
}
|
|
|
|
responsePackets := make([]grcon.Packet, 0, 1)
|
|
|
|
// read until endPacket is reached.
|
|
for {
|
|
packet, err := remoteConsole.Read()
|
|
if err != nil {
|
|
log.Fatalf("reading packet failed: %s", err.Error())
|
|
}
|
|
if packet.Id == endPacket.Id {
|
|
break
|
|
}
|
|
responsePackets = append(responsePackets, packet)
|
|
}
|
|
|
|
var response string
|
|
for _, packet := range responsePackets {
|
|
response += string(packet.Body)
|
|
}
|
|
|
|
log.Println(response)
|
|
}
|