#ifndef __PROTO_H__ #define __PROTO_H__ namespace SGCONF2 { /* * --- Protocol structure (binary part) --- * * Request: * |---------------| * |PROTOHEADER | * |REQUESTHEADER | * |---------------| * | cryptodata | * ~~~~~~~~~~~~~~~~~ * |---------------| * * Response: * |---------------| * |PROTOHEADER | * |RESPONSEHEADER | * | error message | * | cryptodata | * ~~~~~~~~~~~~~~~~~ * |---------------| * */ static char magic[8] = "STGCONF2"; enum RESPONSECODES { E_OK = 0, // No error E_NET_ERROR, // Network error (i.e. - timeout) E_PROTO_ERROR, // Protocol error (invalid magic, unsupported version, etc.) E_INVALID_LOGIN,// Invalid login E_PERMISSIONS // Operation not permitted }; struct PROTOHEADER { char magic[8]; uint32_t version; }; struct REQUESTHEADER { char login[32]; }; struct CRYPTOHEADER { char login[32]; uint32_t dataSize; // Can't be 0 }; struct RESPONSEHEADER { uint32_t code; uint32_t errorMessageSize; // May be 0 uint32_t dataSize; // May be 0 }; } #endif