|
@@ -53,8 +53,7 @@ char* send_file(char *filename, char *pnonmatch, struct fs_file *file, uint16_t
|
|
static uint32_t Parse_Header(char *data, uint32_t len, const char *field, uint32_t flen, char *value);
|
|
static uint32_t Parse_Header(char *data, uint32_t len, const char *field, uint32_t flen, char *value);
|
|
bool GetFileName(char *inStr, char *fileName, uint8_t *fileNameLen);
|
|
bool GetFileName(char *inStr, char *fileName, uint8_t *fileNameLen);
|
|
|
|
|
|
-
|
|
|
|
-SET_PAGE_t SET_PAGE = SET_PAGE_IDLE;
|
|
|
|
|
|
+REQ_TYPE_SEND_t HTTPTypeAnswer = COMMON_ANSWER;
|
|
|
|
|
|
#define SEND_BUF_MAX_LEN 2000
|
|
#define SEND_BUF_MAX_LEN 2000
|
|
#define RECIVE_BUF_MAX_LEN 1500
|
|
#define RECIVE_BUF_MAX_LEN 1500
|
|
@@ -192,9 +191,30 @@ static err_t http_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t er
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
|
|
+ HTTPTypeAnswer = COMMON_ANSWER;
|
|
hs->file = AuthenticatedTrueRoutine(&sendBufLoadLen);
|
|
hs->file = AuthenticatedTrueRoutine(&sendBufLoadLen);
|
|
hs->left = sendBufLoadLen;
|
|
hs->left = sendBufLoadLen;
|
|
send_data(pcb, hs);
|
|
send_data(pcb, hs);
|
|
|
|
+ switch(HTTPTypeAnswer){
|
|
|
|
+ case HISTORY_ANSWER:
|
|
|
|
+ while(sendBufLoadLen != 0){
|
|
|
|
+ hs->file = HTTP_SendLog(&sendBufLoadLen);
|
|
|
|
+ hs->left = sendBufLoadLen;
|
|
|
|
+ if(sendBufLoadLen == 0)
|
|
|
|
+ break;
|
|
|
|
+ send_data(pcb, hs);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ case UPS_HISTORY_ANSWER:
|
|
|
|
+ while(sendBufLoadLen != 0){
|
|
|
|
+ hs->file = HTTP_SendHistory(&sendBufLoadLen);
|
|
|
|
+ hs->left = sendBufLoadLen;
|
|
|
|
+ if(sendBufLoadLen == 0)
|
|
|
|
+ break;
|
|
|
|
+ send_data(pcb, hs);
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
tcp_sent(pcb, http_sent);
|
|
tcp_sent(pcb, http_sent);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -231,110 +251,6 @@ static void http_sent_log_err(void * arg, err_t err)
|
|
fLogTransInprog = false;
|
|
fLogTransInprog = false;
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * @brief Sent callback for log file transfer (messages as is, not ordered)
|
|
|
|
- */
|
|
|
|
-static err_t http_sent_log(void *arg, struct tcp_pcb *pcb, u16_t len)
|
|
|
|
-{
|
|
|
|
- struct http_state *hs;
|
|
|
|
- uint32_t nbytes = 0;
|
|
|
|
- static bool start = true;
|
|
|
|
- (void)len;
|
|
|
|
-
|
|
|
|
- hs = arg;
|
|
|
|
-
|
|
|
|
- if (hs->left > 0)
|
|
|
|
- {
|
|
|
|
- send_data(pcb, hs);
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- memset(logFileBuf, 0, FILE_BUF_MAX_LEN);
|
|
|
|
- if (log_ptr + FILE_BUF_MAX_LEN_LOG <= log_size) {
|
|
|
|
- nbytes = LOG_GetData(log_ptr, logFileBuf, FILE_BUF_MAX_LEN_LOG, start);
|
|
|
|
- }
|
|
|
|
- else if (log_ptr < log_size) {
|
|
|
|
- nbytes = LOG_GetData(log_ptr, logFileBuf, (log_size - log_ptr), start);
|
|
|
|
- }
|
|
|
|
- else {
|
|
|
|
- nbytes = 0;
|
|
|
|
- }
|
|
|
|
- log_ptr += nbytes;
|
|
|
|
-
|
|
|
|
- start = false;
|
|
|
|
- if (nbytes == 0) {
|
|
|
|
- /* File transfer finished. */
|
|
|
|
- start = true;
|
|
|
|
- close_conn(pcb, hs);
|
|
|
|
-
|
|
|
|
- /* Clear file transfer in progress flag */
|
|
|
|
- fLogTransInprog = false;
|
|
|
|
-
|
|
|
|
- return ERR_OK;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- hs->file = logFileBuf;
|
|
|
|
- hs->left = nbytes;
|
|
|
|
- send_data(pcb, hs);
|
|
|
|
- tcp_sent(pcb, http_sent_log);
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- return ERR_OK;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * @brief Sent callback for log file transfer (messages as is, not ordered)
|
|
|
|
- */
|
|
|
|
-static err_t http_sent_history(void *arg, struct tcp_pcb *pcb, u16_t len)
|
|
|
|
-{
|
|
|
|
- struct http_state *hs;
|
|
|
|
- uint32_t nbytes = 0;
|
|
|
|
- static bool start = true;
|
|
|
|
- (void)len;
|
|
|
|
-
|
|
|
|
- hs = arg;
|
|
|
|
-
|
|
|
|
- if (hs->left > 0)
|
|
|
|
- {
|
|
|
|
- send_data(pcb, hs);
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- memset(logFileBuf, 0, FILE_BUF_MAX_LEN);
|
|
|
|
- if (log_ptr + FILE_BUF_MAX_LEN <= log_size) {
|
|
|
|
- nbytes = History_GetData(log_ptr, logFileBuf, FILE_BUF_MAX_LEN, start);
|
|
|
|
- }
|
|
|
|
- else if (log_ptr < log_size) {
|
|
|
|
- nbytes = History_GetData(log_ptr, logFileBuf, (log_size - log_ptr), start);
|
|
|
|
- }
|
|
|
|
- else {
|
|
|
|
- nbytes = 0;
|
|
|
|
- }
|
|
|
|
- log_ptr += nbytes;
|
|
|
|
-
|
|
|
|
- start = false;
|
|
|
|
- if (nbytes == 0) {
|
|
|
|
- /* File transfer finished. */
|
|
|
|
- start = true;
|
|
|
|
- close_conn(pcb, hs);
|
|
|
|
-
|
|
|
|
- /* Clear file transfer in progress flag */
|
|
|
|
- fLogTransInprog = false;
|
|
|
|
-
|
|
|
|
- return ERR_OK;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- hs->file = logFileBuf;
|
|
|
|
- hs->left = nbytes;
|
|
|
|
- send_data(pcb, hs);
|
|
|
|
- tcp_sent(pcb, http_sent_history);
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
- return ERR_OK;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* @brief callback function for handling connection errors
|
|
* @brief callback function for handling connection errors
|
|
* @param arg: pointer to an argument to be passed to callback function
|
|
* @param arg: pointer to an argument to be passed to callback function
|
|
@@ -498,11 +414,11 @@ void HTTP_Init()
|
|
tcp_accept(pcb, http_accept);
|
|
tcp_accept(pcb, http_accept);
|
|
|
|
|
|
for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
|
|
for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
|
|
- /* Flush user cookie by random value */
|
|
|
|
- sprintf(buf, "%X", (unsigned int)GetRandomNumber());
|
|
|
|
- HTTP_SetUserCookie(buf, user_id);
|
|
|
|
|
|
+ /* Flush user cookie by random value */
|
|
|
|
+ sprintf(buf, "%X", (unsigned int)GetRandomNumber());
|
|
|
|
+ HTTP_SetUserCookie(buf, user_id);
|
|
|
|
|
|
- /* Create user logout timers */
|
|
|
|
|
|
+ /* Create user logout timers */
|
|
users[user_id].LogoutTimer =
|
|
users[user_id].LogoutTimer =
|
|
xTimerCreate("LogoutTmr", WEB_LOGOUT_TIME, pdFALSE, ( void * ) user_id, LogoutTimerCallback);
|
|
xTimerCreate("LogoutTmr", WEB_LOGOUT_TIME, pdFALSE, ( void * ) user_id, LogoutTimerCallback);
|
|
}
|
|
}
|
|
@@ -774,6 +690,22 @@ void HTTP_SetSettings(char *buf, uint16_t lenBuf)
|
|
memset(value, 0, len);
|
|
memset(value, 0, len);
|
|
}
|
|
}
|
|
memset(value, 0, len);
|
|
memset(value, 0, len);
|
|
|
|
+
|
|
|
|
+#ifdef HARDWARE_BT6706
|
|
|
|
+ /* Сетевые параметры */
|
|
|
|
+ GetParamValue(buf, "tn_enabled=", value, &valueLen);
|
|
|
|
+ SetTelnetEnableStateStr(value);
|
|
|
|
+ if (strncmp(value, "on", 2) == 0)
|
|
|
|
+ {
|
|
|
|
+ memset(value, 0, len);
|
|
|
|
+
|
|
|
|
+ GetParamValue(buf, "tn_port=", value, &valueLen);
|
|
|
|
+ SetTelnetPortStr(value);
|
|
|
|
+ memset(value, 0, len);
|
|
|
|
+ }
|
|
|
|
+ memset(value, 0, len);
|
|
|
|
+#endif
|
|
|
|
+
|
|
#ifdef HARDWARE_BT6702
|
|
#ifdef HARDWARE_BT6702
|
|
GetParamValue(buf, "swauth=", value, &valueLen);
|
|
GetParamValue(buf, "swauth=", value, &valueLen);
|
|
SetAuthEnableStateStr(value);
|
|
SetAuthEnableStateStr(value);
|
|
@@ -1616,7 +1548,6 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
|
|
else if (strncmp(receiveBuf, "GET /settings.cgi", 17) == 0) // +
|
|
else if (strncmp(receiveBuf, "GET /settings.cgi", 17) == 0) // +
|
|
{
|
|
{
|
|
if (seclevel == 0) {
|
|
if (seclevel == 0) {
|
|
- SET_PAGE = SET_PAGE_PAGE2;
|
|
|
|
if (HTTP_SettingsPage(receiveBuf, sendBuf, receivedBufLen, sendLen) == SEND_REQUIRED_YES)
|
|
if (HTTP_SettingsPage(receiveBuf, sendBuf, receivedBufLen, sendLen) == SEND_REQUIRED_YES)
|
|
{
|
|
{
|
|
*sendLen = strlen(sendBuf);
|
|
*sendLen = strlen(sendBuf);
|
|
@@ -1742,8 +1673,8 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
|
|
|
|
|
|
if (res == SEND_REQUIRED_FILE)
|
|
if (res == SEND_REQUIRED_FILE)
|
|
{
|
|
{
|
|
- HTTP_SendHistory();
|
|
|
|
- return 0;
|
|
|
|
|
|
+ HTTPTypeAnswer = HISTORY_ANSWER;
|
|
|
|
+ return HTTP_SendHistory(sendLen);
|
|
}
|
|
}
|
|
else if (res == SEND_REQUIRED_YES)
|
|
else if (res == SEND_REQUIRED_YES)
|
|
{
|
|
{
|
|
@@ -1758,9 +1689,8 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
|
|
|
|
|
|
if (res == SEND_REQUIRED_FILE)
|
|
if (res == SEND_REQUIRED_FILE)
|
|
{
|
|
{
|
|
-
|
|
|
|
- HTTP_SendLog();
|
|
|
|
- return 0;
|
|
|
|
|
|
+ HTTPTypeAnswer = UPS_HISTORY_ANSWER;
|
|
|
|
+ return HTTP_SendLog(sendLen);
|
|
}
|
|
}
|
|
else if (res == SEND_REQUIRED_YES)
|
|
else if (res == SEND_REQUIRED_YES)
|
|
{
|
|
{
|
|
@@ -1855,7 +1785,7 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
|
|
/**
|
|
/**
|
|
* @brief Send callback for log file transfer (messages as is, not ordered)
|
|
* @brief Send callback for log file transfer (messages as is, not ordered)
|
|
*/
|
|
*/
|
|
-void HTTP_SendHistory(void)
|
|
|
|
|
|
+char* HTTP_SendHistory(uint16_t *Len)
|
|
{
|
|
{
|
|
struct http_state *hs;
|
|
struct http_state *hs;
|
|
uint32_t nbytes = 0;
|
|
uint32_t nbytes = 0;
|
|
@@ -1876,24 +1806,26 @@ void HTTP_SendHistory(void)
|
|
|
|
|
|
start = false;
|
|
start = false;
|
|
|
|
|
|
|
|
+ *Len = nbytes;
|
|
if (nbytes == 0) {
|
|
if (nbytes == 0) {
|
|
// File transfer finished.
|
|
// File transfer finished.
|
|
start = true;
|
|
start = true;
|
|
// Clear file transfer in progress flag
|
|
// Clear file transfer in progress flag
|
|
fLogTransInprog = false;
|
|
fLogTransInprog = false;
|
|
- return;
|
|
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
- hs->file = logFileBuf;
|
|
|
|
- hs->left = nbytes;
|
|
|
|
|
|
+ return logFileBuf;
|
|
|
|
+ // hs->file = logFileBuf;
|
|
|
|
+ // hs->left = nbytes;
|
|
// send_data(pcb, hs);
|
|
// send_data(pcb, hs);
|
|
// SSL_SendFrames(&ssl, logFileBuf, nbytes);
|
|
// SSL_SendFrames(&ssl, logFileBuf, nbytes);
|
|
- HTTP_SendHistory();
|
|
|
|
|
|
+ // HTTP_SendHistory();
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* @brief Sent callback for log file transfer (messages as is, not ordered)
|
|
* @brief Sent callback for log file transfer (messages as is, not ordered)
|
|
*/
|
|
*/
|
|
-void HTTP_SendLog(void)
|
|
|
|
|
|
+char* HTTP_SendLog(uint16_t *Len)
|
|
{
|
|
{
|
|
uint32_t nbytes = 0;
|
|
uint32_t nbytes = 0;
|
|
static bool start = true;
|
|
static bool start = true;
|
|
@@ -1911,18 +1843,19 @@ void HTTP_SendLog(void)
|
|
log_ptr += nbytes;
|
|
log_ptr += nbytes;
|
|
|
|
|
|
start = false;
|
|
start = false;
|
|
|
|
+ *Len = nbytes;
|
|
if (nbytes == 0) {
|
|
if (nbytes == 0) {
|
|
// File transfer finished.
|
|
// File transfer finished.
|
|
start = true;
|
|
start = true;
|
|
// Clear file transfer in progress flag
|
|
// Clear file transfer in progress flag
|
|
fLogTransInprog = false;
|
|
fLogTransInprog = false;
|
|
- return;
|
|
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
// SSL_SendFrames(&ssl, logFileBuf, nbytes);
|
|
// SSL_SendFrames(&ssl, logFileBuf, nbytes);
|
|
- HTTP_SendLog();
|
|
|
|
|
|
+ // HTTP_SendLog();
|
|
|
|
|
|
- return;
|
|
|
|
|
|
+ return logFileBuf;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|