/simple-dict-server

db["key"]="value" with tea encryption

Primary LanguageCGNU General Public License v3.0GPL-3.0

simple-dict-server

database["key"]="value" with tea encryption.

Compile

You should first clone this project into a system with cmake & libpthread installed. If you plan to compile it on Windows, you should edit the source code and transform socket/thread/file libraries into Windows version.

git clone https://github.com/fumiama/simple-dict-server.git

Create a build folder.

cd simple-dict-server
mkdir build

Use cmake command to generate files for make automatically.

cd build
cmake ../

Use make to generate executable binary files named simple-dict-server and simple-dict-client in ./build directory.

make

Then you should install simple-crypto and simple-protobuf by the same way.

Execute

Start server on localhost using the commands below.

chmod +x simple-dict-server simple-dict-client
./simple-dict-server -d 7777 1 ./dict.sp ./cfg.sp    # use -d to start as daemon

cfg.spis generated by cfgwriter, or you can pass config by setting env SDS_PWD and SDS_SPS.

Open another shell to connect to it.

./simple-dict-client 127.0.0.1 7777

Now you have connected to the server. The default access passwords is in client.c and you can modify the password in source code as you like. Please note that the server will only wait 10 seconds for a response after the last communication. The box below shows how to control the server to accompilsh basic add/del/find/edit operations.

cmd data description reply
get: key get key value the value or "null"
cat: filename save raw dict.sp into filename the raw data
md5: md5 str compare whether md5 of dict.sp is what given in data "nequ" or "null"
end no data end conversation no reply
set: key set key "data"
dat: value to set give value to the key "succ"
del: key del key "succ" or "null
  • The raw data starts with an integer showing its size, then a char $ follows, finally following all binary data in ./dict.sp encoded by TEA.
  • Whenever the reply is "erro", it indicates that the server has some troubles, which means that you shuold end the conversation and retry later.

A cmd sequence example is as below

get:test
set:test
dat:测试
get:test
del:test
get:test
end

The client output is

break!
Get sockfd
Connected to server
Thread create succeeded
Enter command:get:test
Send data succeed.
recv ack: null
Enter command:set:test
Send data succeed.
recv ack: data
Enter command:dat:测试
Send data succeed.
recv ack: succ
Enter command:get:test
Send data succeed.
recv ack: 测试
Enter command:del:test
Send data succeed.
recv ack: succ
Enter command:get:test
Send data succeed.
recv ack: null
Enter command:end
Send data succeed.

The server output meanwhile is

Bind server success!
Listening....
Ready for accept, waitting...
Next thread is No.0
Accept client ::ffff:127.0.0.1:51296
Creating thread succeeded
Ready for accept, waitting...

Connected to the client.
Next thread is No.1
Creating timer thread succeeded
Wait sec: 2, max: 10
[normal] Get 34 bytes packet with cmd: 0, data: test
Close dict
Send data: null
Wait sec: 0, max: 10
Wait sec: 2, max: 10
Wait sec: 4, max: 10
[super] Get 34 bytes packet with data: test
Send data: data
Wait sec: 1, max: 10
Wait sec: 3, max: 10
[super] Get 34 bytes packet with data: 测试
Data copy to dict succ
Set data: dict[test]=测试
Close dict
Send data: succ
Wait sec: 0, max: 10
Wait sec: 2, max: 10
[normal] Get 34 bytes packet with cmd: 0, data: test
Close dict
Send data: 测试
Wait sec: 0, max: 10
Wait sec: 2, max: 10
[super] Get 34 bytes packet with data: test
Close dict
Send data: succ
Wait sec: 0, max: 10
Wait sec: 2, max: 10
[normal] Get 34 bytes packet with cmd: 0, data: test
Close dict
Send data: null
Wait sec: 0, max: 10
[normal] Get 34 bytes packet with cmd: 4, data: fill
Conversation end

Start killing.
Close accept.
Free data.
Close dict
Finish killing.
Wait sec: 0, max: 10
Call kill thread
Start killing.
Close dict
Finish killing.
Free timer
Finish calling kill thread

Android Client for simple-dict-server

There is also an Android Client for simple-dict-server. Just install the apk file downloaded from release page and click config icon to set your server address using the format

127.0.0.1:7777_password

Note that this APP is designed for a new language called Tenenja, so the font inside is abnormal. What's more, there is no English translation for this APP because its users are Chinese. If you want to get an APP in your language, just edit the source code for free.