Client-Server Protocol.md 2.6 KB

Client-Server Protocol

Protocol version: "0.1"

1. Start a connection

To start a connection you have to check the versions and verify the login. Only if step 1.1 and 1.2 have been accomplished a usable connection is negotiated.

1.1 Version check

Client:

{
	"version": string
}

Server:

{
	"version": string,
	"accept": bool
}

If accept is true the connection is valid. Else the connection will be terminated after the server answered.

1.2 Login

Client:

{
	"user": string,
	"pass": string
}

Server:

{
	"accept": bool
}

If accept is true the connection is valid and the user is logged in. Else the connection will be terminated after the server answered.

2. Sending commands

Commands can be sent by the client after a connection has been negotiated (See 1). Commands can be used unrelated to each other.

2.1 Status command

Client:

{
	"command": "status"
}

Server:

{
	"command": "status",
	"response": string
}

2.2 List command

Client:

{
	"command": "list"
}

Server:

{
	"command": "put",
	"names": string[],
	"remaining": int
}

The server loops this until all names have been sent and remaining hits 0.

2.3 Put command

Client:

{
	"command": "put",
	"file": string,
	"size": int
}

Server:

{
	"command": "put",
	"accept": bool
}

If accept is true the connection is valid and the client can start sending the file. Else the put request was rejected and is hereby canceled.
Client:

{
	"command": "put",
	"data": string,
	"remaining": int,
	"cancel": bool
}

data is a base64 string and contains a piece of the file. The client will loop this until the file is completely sent. remaining is a counter how many chunks will follow and the transfer is over after it hits 0. If cancel is true the file transfer will be canceled.

2.4 Get command

Client:

{
	"command": "get",
	"file": string
}

Server:

{
	"command": "get",
	"accept": bool
}

If accept is true the connection is valid and the server can start sending the file. Else the get request was rejected and is hereby canceled.
Server:

{
	"command": "get",
	"data": string,
	"remaining": int,
	"cancel": bool
}

data is a base64 string and contains a piece of the file. The server will loop this until the file is completely sent. remaining is a counter how many chunks will follow and the transfer is over after it hits 0. If cancel is true the file transfer will be canceled.

TODO

3. Close connection

3.1 Close command

Client:

{
	"command": "close"
}

Server:

{
	"command": "close",
	"response": "bye"
}