
Increase TCP window size from 1 to 2 packets and increase maximum amount of web data sent to 1460. This decreases the page load time fro a Windows client fro 6 seconds to less than 1 second. It also fixes a problem whereby when using a Ubuntu client, file upload and direct print didn't work unless the reprap.js file was edited to reduce the maximum amount of data sent per request. Also we now initialize unused memory with known data so that in response to the M111 S1 command we can better estimate the amount of free memory.
116 lines
3.4 KiB
C++
116 lines
3.4 KiB
C++
/****************************************************************************************************
|
|
|
|
RepRapFirmware - Webserver
|
|
|
|
This class serves a single-page web applications to the attached network. This page forms the user's
|
|
interface with the RepRap machine. This software interprests returned values from the page and uses it
|
|
to Generate G Codes, which it sends to the RepRap. It also collects values from the RepRap like
|
|
temperature and uses those to construct the web page.
|
|
|
|
The page itself - reprap.htm - uses Knockout.js and Jquery.js. See:
|
|
|
|
http://knockoutjs.com/
|
|
|
|
http://jquery.com/
|
|
|
|
-----------------------------------------------------------------------------------------------------
|
|
|
|
Version 0.2
|
|
|
|
10 May 2013
|
|
|
|
Adrian Bowyer
|
|
RepRap Professional Ltd
|
|
http://reprappro.com
|
|
|
|
Licence: GPL
|
|
|
|
****************************************************************************************************/
|
|
|
|
#ifndef WEBSERVER_H
|
|
#define WEBSERVER_H
|
|
|
|
|
|
#define KO_START "rr_"
|
|
#define KO_FIRST 3
|
|
#define POST_LENGTH (1300) // max amount of POST data we can accept
|
|
|
|
const unsigned int gcodeBufLength = 2048; // size of our gcode ring buffer, ideally a power of 2
|
|
const unsigned int minReportedFreeBuf = 100; // the minimum free buffer we report if not zero
|
|
const unsigned int maxReportedFreeBuf = 900; // the max we own up to having free, to avoid overlong messages
|
|
|
|
class Webserver
|
|
{
|
|
public:
|
|
|
|
Webserver(Platform* p);
|
|
bool GCodeAvailable();
|
|
byte ReadGCode();
|
|
bool WebserverIsWriting();
|
|
void Init();
|
|
void Spin();
|
|
void Exit();
|
|
void Diagnostics();
|
|
void SetPassword(const char* pw);
|
|
void SetName(const char* nm);
|
|
void ConnectionError();
|
|
void HandleReply(const char *s, bool error);
|
|
void AppendReply(const char* s);
|
|
|
|
private:
|
|
|
|
void ParseClientLine();
|
|
void SendFile(const char* nameOfFileToSend);
|
|
bool WriteBytes();
|
|
void ParseQualifier();
|
|
void CheckPassword();
|
|
void LoadGcodeBuffer(const char* gc, bool convertWeb);
|
|
void CloseClient();
|
|
bool PrintHeadString();
|
|
bool PrintLinkTable();
|
|
void GetGCodeList();
|
|
void GetJsonResponse(const char* request);
|
|
void ParseGetPost();
|
|
bool CharFromClient(char c);
|
|
void BlankLineFromClient();
|
|
void InitialisePost();
|
|
bool MatchBoundary(char c);
|
|
void JsonReport(bool ok, const char* request);
|
|
unsigned int GetGcodeBufferSpace() const;
|
|
unsigned int GetReportedGcodeBufferSpace() const;
|
|
void ProcessGcode(const char* gc);
|
|
|
|
Platform* platform;
|
|
bool active;
|
|
float lastTime;
|
|
float longWait;
|
|
FileStore* fileBeingSent;
|
|
bool writing;
|
|
bool receivingPost;
|
|
char postBoundary[POST_LENGTH];
|
|
int boundaryCount;
|
|
char postFileName[POST_LENGTH];
|
|
FileStore* postFile;
|
|
bool postSeen;
|
|
bool getSeen;
|
|
bool clientLineIsBlank;
|
|
float clientCloseTime;
|
|
bool needToCloseClient;
|
|
|
|
char clientLine[STRING_LENGTH+2]; // 2 chars extra so we can append \n\0
|
|
char clientRequest[STRING_LENGTH];
|
|
char clientQualifier[STRING_LENGTH];
|
|
char jsonResponse[STRING_LENGTH+1];
|
|
char gcodeBuffer[gcodeBufLength];
|
|
unsigned int gcodeReadIndex, gcodeWriteIndex; // head and tail indices into gcodeBuffer
|
|
int jsonPointer;
|
|
int clientLinePointer;
|
|
bool gotPassword;
|
|
char password[SHORT_STRING_LENGTH+1];
|
|
char myName[SHORT_STRING_LENGTH+1];
|
|
char gcodeReply[STRING_LENGTH+1];
|
|
uint16_t seq; // reply sequence number, so that the client can tell if a reply is new or not
|
|
};
|
|
|
|
|
|
#endif
|