Able to connect to a client

master
Ronald 4 months ago
parent c61a67d46e
commit 01a9751d08

@ -4,20 +4,20 @@
### Types | TYPE ### Types | TYPE
0 => Request, a new request 1 => Request, a new request
1 => Result, the result 2 => Result, the result
#### Request types | REQUEST #### Request types | REQUEST
0 => New server client 1 => New server client
1 => New desktop client 2 => New desktop client
2 => Data 3 => Data
#### Response types | RESPONSE #### Response types | RESPONSE
0 => OK 1 => OK
1 => Created 2 => Created
2 => Not OK 3 => Not OK
#### Data types | DATA #### Data types | DATA

@ -16,16 +16,9 @@ import (
) )
// Global variables // Global variables
// DB global database oject
var DB *gorm.DB var DB *gorm.DB
type Data struct {
T *int `json:"TYPE"` // TYPE
Request *int `json:"REQUEST"` // REQUEST TYPE
Result *int `json:"RESPONSE,omitempty"` // RESPONSE TYPE
Hostname *string `json:"HOSTNAME"` // HOSTNAME
Data *map[string]any `json:"DATA,omitempty"` // DATA
}
func handleInitialConnection(conn net.Conn) { func handleInitialConnection(conn net.Conn) {
initial_request := make([]byte, 256) initial_request := make([]byte, 256)
@ -54,25 +47,23 @@ func handleInitialConnection(conn net.Conn) {
return return
} }
if *data.T != 0 || *data.Request != 0 || len(*data.Hostname) < 1 { if *data.Type != REQUEST && (*data.Request != NEW_SERVER_CLIENT || *data.Request != NEW_DESKTOP_CLIENT) { // TODO: I think this logic may be a little wrong
fmt.Fprintf(os.Stderr, "data: %v\n", data)
fmt.Fprintf(os.Stderr, "data.Hostname: \"%s\"\n", data.Hostname)
fmt.Fprintf(os.Stderr, "ERROR: invalid initial request, closing connection from %s\n", conn.RemoteAddr()) fmt.Fprintf(os.Stderr, "ERROR: invalid initial request, closing connection from %s\n", conn.RemoteAddr())
conn.Close() conn.Close()
return return
} }
switch *data.Request { switch *data.Request {
case 0: case NEW_SERVER_CLIENT:
var connectedResponse Data var connectedResponse Data
connectedResponse.T = new(int) connectedResponse.Type = new(Type)
connectedResponse.Result = new(int) connectedResponse.Response = new(Response_Type)
*connectedResponse.T = 1 *connectedResponse.Type = RESPONSE
foundHost := false foundHost := false
for _, host := range GetAllHosts() { for _, host := range GetAllHosts() {
if strings.ToLower(host.Hostname) == strings.ToLower(*data.Hostname) { if strings.ToLower(host.Hostname) == strings.ToLower(*data.Hostname) {
*connectedResponse.T = 1 *connectedResponse.Type = RESPONSE
*connectedResponse.Result = 0 *connectedResponse.Response = OK
fmt.Printf("Found host in database\n") fmt.Printf("Found host in database\n")
@ -81,14 +72,16 @@ func handleInitialConnection(conn net.Conn) {
break break
} }
} }
if !foundHost { if !foundHost {
if ok := CreateHost(*data.Hostname); !ok { if ok := CreateHost(*data.Hostname); !ok {
fmt.Fprintf(os.Stderr, "ERROR: failed to create host in database, disconnecting client\n") fmt.Fprintf(os.Stderr, "ERROR: failed to create host in database, disconnecting client\n")
conn.Close() conn.Close()
return return
} }
fmt.Printf("Created host in database") fmt.Printf("Created host in database\n")
} }
bytes, err := json.Marshal(connectedResponse) bytes, err := json.Marshal(connectedResponse)
if err != nil { if err != nil {
fmt.Fprintf(os.Stderr, "ERROR: failed to create JSON to send back to client, closing connection\n") fmt.Fprintf(os.Stderr, "ERROR: failed to create JSON to send back to client, closing connection\n")
@ -96,6 +89,8 @@ func handleInitialConnection(conn net.Conn) {
return return
} }
fmt.Println("Response: ", string(bytes))
conn.Write(bytes) conn.Write(bytes)
// TODO: Handle client connections differently // TODO: Handle client connections differently

@ -0,0 +1,30 @@
package main
type Type int
type Request_Type int
type Response_Type int
type Data struct {
Type *Type `json:"TYPE",omitempty` // TYPE
Request *Request_Type `json:"REQUEST,omitempty"` // REQUEST TYPE
Response *Response_Type `json:"RESPONSE,omitempty"` // RESPONSE TYPE
Hostname *string `json:"HOSTNAME,omitempty"` // HOSTNAME
Data *map[string]any `json:"DATA,omitempty"` // DATA
}
const ( // TYPE
REQUEST Type = 1
RESPONSE Type = 2
)
const ( // REQUEST TYPES
NEW_SERVER_CLIENT Request_Type = 1
NEW_DESKTOP_CLIENT Request_Type = 2
DATA Request_Type = 3
)
const ( // RESPONSE TYPES
OK Response_Type = 1
CREATED Response_Type = 2
NOT_OK Response_Type = 3
)
Loading…
Cancel
Save