summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server/server/config.cpp1
-rw-r--r--server/server/config.h28
-rw-r--r--server/server/main.cpp41
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);