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,
	"finish": bool
}

data is a base64 string and contains a piece of the file. The client will loop this until the file is completely sent. In the last request the client has to set the finish flag to true.
After the last part was received the server answers with finish set to true.
Server:

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

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,
	"finish": bool
}

data is a base64 string and contains a piece of the file. The server will loop this until the file is completely sent. In the last request the server has to set the finish flag to true.

TODO

3. Close connection

3.1 Close command

Client:

{
	"command": "close"
}

Server:

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