diff options
Diffstat (limited to 'server/session.cpp')
-rw-r--r-- | server/session.cpp | 196 |
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); } } |