This commit is contained in:
Thulinma 2011-10-18 06:20:09 +02:00
parent 0e8b8932e7
commit d34bfdc739

View file

@ -160,6 +160,7 @@ std::string ReadFile( std::string Filename ) {
class ConnectedUser{ class ConnectedUser{
public: public:
std::string writebuffer;
Socket::Connection C; Socket::Connection C;
HTTP::Parser H; HTTP::Parser H;
bool Authorized; bool Authorized;
@ -286,7 +287,7 @@ int main(int argc, char ** argv){
JsonParse.parse(ReadFile("config.json"), Storage, false); JsonParse.parse(ReadFile("config.json"), Storage, false);
if (!Storage.isMember("config")){Storage["config"] = Json::Value(Json::objectValue);} if (!Storage.isMember("config")){Storage["config"] = Json::Value(Json::objectValue);}
if (!Storage.isMember("log")){Storage["log"] = Json::Value(Json::arrayValue);} if (!Storage.isMember("log")){Storage["log"] = Json::Value(Json::arrayValue);}
if (!Storage.isMember("statistics")){Storage["statistics"] = Json::Value(Json::arrayValue);} if (!Storage.isMember("statistics")){Storage["statistics"] = Json::Value(Json::objectValue);}
while (API_Socket.connected()){ while (API_Socket.connected()){
usleep(100000); //sleep for 100 ms - prevents 100% CPU time usleep(100000); //sleep for 100 ms - prevents 100% CPU time
@ -321,7 +322,7 @@ int main(int argc, char ** argv){
uplink->H.Clean(); uplink->H.Clean();
uplink->H.SetBody("command="+HTTP::Parser::urlencode(Response.toStyledString())); uplink->H.SetBody("command="+HTTP::Parser::urlencode(Response.toStyledString()));
uplink->H.BuildRequest(); uplink->H.BuildRequest();
uplink->C.write(uplink->H.BuildResponse("200", "OK")); uplink->writebuffer += uplink->H.BuildResponse("200", "OK");
uplink->H.Clean(); uplink->H.Clean();
Log("UPLK", "Sending server data to uplink."); Log("UPLK", "Sending server data to uplink.");
}else{ }else{
@ -338,6 +339,9 @@ int main(int argc, char ** argv){
users.erase(it); users.erase(it);
break; break;
} }
if (it->writebuffer != ""){
it->C.iwrite(it->writebuffer);
}
if (it->H.Read(it->C)){ if (it->H.Read(it->C)){
Response.clear(); //make sure no data leaks from previous requests Response.clear(); //make sure no data leaks from previous requests
if (it->clientMode){ if (it->clientMode){
@ -345,7 +349,7 @@ int main(int argc, char ** argv){
// They are assumed to be authorized, but authorization to gearbox is still done. // They are assumed to be authorized, but authorization to gearbox is still done.
// This authorization uses the compiled-in username and password (account). // This authorization uses the compiled-in username and password (account).
if (!JsonParse.parse(it->H.body, Request, false)){ if (!JsonParse.parse(it->H.body, Request, false)){
Log("HTTP", "Failed to parse JSON: "+it->H.GetVar("command")); Log("HTTP", "Failed to parse JSON: "+it->H.body);
Response["authorize"]["status"] = "INVALID"; Response["authorize"]["status"] = "INVALID";
}else{ }else{
if (Request["authorize"]["status"] != "OK"){ if (Request["authorize"]["status"] != "OK"){
@ -355,12 +359,16 @@ int main(int argc, char ** argv){
Log("UPLK", "Max login attempts passed - dropping connection to uplink."); Log("UPLK", "Max login attempts passed - dropping connection to uplink.");
it->C.close(); it->C.close();
}else{ }else{
Response["config"] = Storage["config"];
Response["streams"] = Storage["streams"];
Response["log"] = Storage["log"];
Response["statistics"] = Storage["statistics"];
Response["authorize"]["username"] = TOSTRING(COMPILED_USERNAME); Response["authorize"]["username"] = TOSTRING(COMPILED_USERNAME);
Response["authorize"]["password"] = md5(TOSTRING(COMPILED_PASSWORD) + Request["authorize"]["challenge"].asString()); Response["authorize"]["password"] = md5(TOSTRING(COMPILED_PASSWORD) + Request["authorize"]["challenge"].asString());
it->H.Clean(); it->H.Clean();
it->H.SetBody("command="+HTTP::Parser::urlencode(Response.toStyledString())); it->H.SetBody("command="+HTTP::Parser::urlencode(Response.toStyledString()));
it->H.BuildRequest(); it->H.BuildRequest();
it->C.write(it->H.BuildResponse("200", "OK")); it->writebuffer += it->H.BuildResponse("200", "OK");
it->H.Clean(); it->H.Clean();
Log("UPLK", "Attempting login to uplink."); Log("UPLK", "Attempting login to uplink.");
} }
@ -373,6 +381,7 @@ int main(int argc, char ** argv){
Storage["statistics"].clear(); Storage["statistics"].clear();
} }
Log("UPLK", "Received data from uplink."); Log("UPLK", "Received data from uplink.");
WriteFile("config.json", Storage.toStyledString());
} }
} }
}else{ }else{
@ -412,12 +421,13 @@ int main(int argc, char ** argv){
}else{ }else{
it->H.SetBody(jsonp+"("+Response.toStyledString()+");\n\n"); it->H.SetBody(jsonp+"("+Response.toStyledString()+");\n\n");
} }
it->C.write(it->H.BuildResponse("200", "OK")); it->writebuffer += it->H.BuildResponse("200", "OK");
it->H.Clean(); it->H.Clean();
} }
} }
} }
} }
} }
WriteFile("config.json", Storage.toStyledString());
return 0; return 0;
} }