summaryrefslogtreecommitdiff
path: root/server/session.cpp
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss@sss.chaoslab.ru>2013-02-13 21:16:55 +0200
committerGluzskiy Alexandr <sss@sss.chaoslab.ru>2013-02-13 21:16:55 +0200
commiteda5eaf4a1be590b9e4905f322b3e0923f65d312 (patch)
tree36aa8f2f08e6fd140f9391b73ee791e1e506339e /server/session.cpp
parent728653fbb36727acfb5a4cd480b7fa5d45adfa89 (diff)
modified: restarter.workspace
modified: server/service.cpp modified: server/service.h modified: server/session.cpp modified: server/session.h
Diffstat (limited to 'server/session.cpp')
-rw-r--r--server/session.cpp196
1 files changed, 1 insertions, 195 deletions
diff --git a/server/session.cpp b/server/session.cpp
index 6bbf107..bb6ffd4 100644
--- a/server/session.cpp
+++ b/server/session.cpp
@@ -43,201 +43,7 @@ void session::handle_read(const boost::system::error_code& error, size_t bytes_t
delete [] recv_data;
packet p(v);
v.clear();
- if(!p.is_good())
- {
- delete this;
- }
- switch(p.get_type())
- {
- case TYPE_AUTH_REQUEST:
- {
- if(!packet::serv_validate_client_proto(p))
- {
- packet *r = packet::make_status_packet(TYPE_AUTH_REPLY, STATUS_FAILURE);
- write_w_close(r->raw());
- delete r;
- return;
- }
- else
- {
- packet *r = packet::make_status_packet(TYPE_AUTH_REPLY, STATUS_SUCCESS);
- write_w_response(r->raw());
- delete r;
- return;
- }
- }
- break;
- case TYPE_COMMAND_REQUEST:
- {
- svc_cmd c = packet::serv_extract_command(p);
- if(c.service.empty())
- break;
- std::list<service_info>::iterator i = std::find(installed_services.begin(), installed_services.end(), c.service);
- if(!c.command.empty())
- {
- if(i != installed_services.end())
- {
- std::list<service_info::command>::iterator ii = std::find(i->predefined.begin(), i->predefined.end(), c.command);
- if(ii != i->predefined.end())
- {
- switch(i->acc)
- {
- case ACC_CHAR_PTR:
- {
- switch(i->ret)
- {
- case RET_CHAR_PTR:
- {
- char *arg = strdup(c.command.c_str());
- char *data = (char*)i->exec((void*)arg);
- std::string s(data);
- delete [] data;
- packet *p = packet::serv_make_command_reply_packet(s, STATUS_SUCCESS);
- delete [] data;
- write_w_response(p->raw());
- delete p;
- }
- break;
- case RET_FLOAT_PTR:
- {
- char *arg = strdup(c.command.c_str());
- float *ret = (float*)i->exec((void*)arg);
- //todo pack float to unsigned char vector
- std::vector<unsigned char> v;
- packet *p = packet::serv_make_command_reply_packet(v, STATUS_SUCCESS);
- write_w_response(p->raw());
- delete p;
- delete ret;
- }
- break;
- case RET_INT_PTR:
- {
- char *arg = strdup(c.command.c_str());
- int *ret = (int*)i->exec((void*)arg);
- //todo pack float to unsigned char vector
- std::vector<unsigned char> v;
- packet *p = packet::serv_make_command_reply_packet(v, STATUS_SUCCESS);
- write_w_response(p->raw());
- delete p;
- delete ret;
- }
- break;
- case RET_NONE:
- {
- char *arg = strdup(c.command.c_str());
- i->exec((void*)arg);
- packet *p = packet::make_status_packet(TYPE_AUTH_REPLY, STATUS_SUCCESS);
- write_w_response(p->raw());
- delete p;
- }
- break;
- case RET_STD_STRING_PTR:
- {
- char *arg = strdup(c.command.c_str());
- std::string *str = (std::string*)i->exec((void*)arg);
- packet *p = packet::serv_make_command_reply_packet(*str, STATUS_SUCCESS);
- write_w_response(p->raw());
- delete p;
- delete str;
- }
- break;
- case RET_VOID_PTR:
- {
- //TODO
- }
- break;
- };
- }
- break;
- case ACC_FLOAT_PTR:
- {
- }
- break;
- case ACC_INT_PTR:
- {
- }
- break;
- case ACC_STD_STRING_PTR:
- {
- }
- break;
- case ACC_VOID_PTR:
- {
- }
- break;
- default:
- break;
- }
- }
- }
- }
- else
- {
- if(i->acc == ACC_NONE)
- {
- switch(i->ret)
- {
- case RET_CHAR_PTR:
- {
- char *data = (char*)i->exec((void*)NULL);
- std::string s(data);
- delete [] data;
- packet *p = packet::serv_make_command_reply_packet(s, STATUS_SUCCESS);
- delete [] data;
- write_w_response(p->raw());
- delete p;
- }
- break;
- case RET_FLOAT_PTR:
- {
- float *ret = (float*)i->exec((void*)NULL);
- //todo pack float to unsigned char vector
- std::vector<unsigned char> v;
- packet *p = packet::serv_make_command_reply_packet(v, STATUS_SUCCESS);
- write_w_response(p->raw());
- delete p;
- delete ret;
- }
- break;
- case RET_INT_PTR:
- {
- int *ret = (int*)i->exec((void*)NULL);
- //todo pack float to unsigned char vector
- std::vector<unsigned char> v;
- packet *p = packet::serv_make_command_reply_packet(v, STATUS_SUCCESS);
- write_w_response(p->raw());
- delete p;
- delete ret;
- }
- break;
- case RET_NONE:
- {
- i->exec((void*)NULL);
- packet *p = packet::make_status_packet(TYPE_AUTH_REPLY, STATUS_SUCCESS);
- write_w_response(p->raw());
- delete p;
- }
- break;
- case RET_STD_STRING_PTR:
- {
- std::string *str = (std::string*)i->exec((void*)NULL);
- packet *p = packet::serv_make_command_reply_packet(*str, STATUS_SUCCESS);
- write_w_response(p->raw());
- delete p;
- delete str;
- }
- break;
- case RET_VOID_PTR:
- {
- //TODO
- }
- break;
- };
- }
- }
- }
- break;
- }
+ handle_data(this, p);
}
}