// Copyright © 2013 sss //. // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. //. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. //. // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef API_PROTOCOL_H #define API_PROTOCOL_H namespace proto { struct service_s { struct cmd { std::string command, description; #ifdef DEBUG bool operator==(const cmd&); #endif }; std::string service; std::list cmds; #ifdef DEBUG bool operator==(service_s&); bool operator!=(service_s&); #endif }; struct svc_cmd { std::string service, command; }; enum packet_type {TYPE_AUTH_REPLY, TYPE_AUTH_REQUEST, TYPE_SERVICES_REPLY, TYPE_SERVICES_REQUEST, TYPE_COMMAND_REPLY, TYPE_COMMAND_REQUEST, TYPE_CUSTOM, TYPE_UNKNOWN}; enum status {STATUS_FAILURE = 0x00, STATUS_SUCCESS = 0x01}; class packet { public: explicit packet(std::vector&); const std::vector &raw(); packet_type get_type(); bool is_good(); bool check_status(); //false on fail bool is_server_packet(); bool is_client_packet(); bool is_status_packet(); bool assign(packet&); bool assign(std::vector&); //helper functions: //client functions static packet *cli_make_init_packet(); //should be first packet to server static packet *cli_make_command_packet(std::string &service, std::string &command); static packet *cli_make_command_packet(const char* service, const char* command); static packet *cli_make_request_services_packet(); static std::list *cli_extract_services(packet&); static std::string cli_parse_command_reply(packet&); //server functions static bool serv_validate_client_proto(packet&); //false on fail static packet *serv_make_services_packet(std::list&); static packet *serv_make_command_reply_packet(std::string&, status s); static packet *serv_make_command_reply_packet(std::vector&, status s); static svc_cmd serv_extract_command(packet&); //generic static packet *make_status_packet(packet_type type, status s); private: std::vector data; }; }; #endif