diff options
-rw-r--r-- | server/server/config.cpp | 1 | ||||
-rw-r--r-- | server/server/config.h | 28 | ||||
-rw-r--r-- | server/server/main.cpp | 41 |
3 files changed, 68 insertions, 2 deletions
diff --git a/server/server/config.cpp b/server/server/config.cpp index ec21f2c..33a8124 100644 --- a/server/server/config.cpp +++ b/server/server/config.cpp @@ -96,7 +96,6 @@ void config::load_upload_list(char *pth) if(file.is_open()) { char hash_buf[1024]; - int l = 0; while(!file.eof()) { file.read(hash_buf, 1024); diff --git a/server/server/config.h b/server/server/config.h index 06dfba3..6683d7e 100644 --- a/server/server/config.h +++ b/server/server/config.h @@ -40,6 +40,21 @@ struct static_proxy_entry } }; +struct s_i +{ + std::string name; + int type; + s_i() + { + type = 0; + } + s_i(const std::string& n, int t) + { + name = n; + type = t; + } +}; + struct upload_entry { std::string source, destination, hash; @@ -50,6 +65,19 @@ struct upload_entry destination = destination_; hash = hash_; } + bool operator==(const s_i& s) + { + switch(s.type) + { + case 0: + return s.name == source; + case 1: + return s.name == destination; + default: + break; + } + return false; + } }; class config diff --git a/server/server/main.cpp b/server/server/main.cpp index e8a4f20..abe7ba8 100644 --- a/server/server/main.cpp +++ b/server/server/main.cpp @@ -608,11 +608,50 @@ void session::proto_parser(std::vector<byte>& data) logger->lock(); *logger<< time_str() << ": file upload request from "<<remote_ip<< " session " << this_sid << " are permited \n"; logger->unlock(); + it++; + std::string filename; + for(;;++it) + { + if(*it == 0x14) + { + ++it; + if(*it == 0x14) + break; + } + filename += (char)*it; + } + std::list<upload_entry>::iterator uit = std::find(cfg->get_upload_list()->begin(), cfg->get_upload_list()->end(), s_i(filename, 1)); + if(uit == cfg->get_upload_list()->end()) + break; + std::ifstream file; + file.open(uit->source.c_str()); + if(file.is_open()) + { + const int size = 4096; + int count = 0; + char buf[size]; + while(!file.eof()) + { + std::vector<byte> data; + file.read(buf, size); + count = file.gcount(); + data.push_back(0x13); + data.push_back(0x13); + data.push_back(0x12); + for(int i = 0; i < count; i++) + data.push_back(buf[i]); + data.push_back(0x14); + data.push_back(0x14); + //write_wo_response(data); + socket_.write_some(boost::asio::buffer(data));//this may not work + } + file.close(); + } + std::vector<byte> data; data.push_back(0x13); data.push_back(0x13); data.push_back(0x12); - //TODO: add data here data.push_back(0x14); data.push_back(0x14); write_w_response(data); |