⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 httpd.c

📁 ENC28J60 System HTTP
💻 C
📖 第 1 页 / 共 3 页
字号:
				LED_STATUS_ON();			}			httpd_conn[socketnum].state = HTTPD_STATE_IDLE;			*appstate = TCP_APPSTATE_FINISHED;			return 0;		case(HTTPD_STATE_POST):			#if HTTPD_DEBUG			softuart_puts_progmem("HTTP: upload todo (low 16bit only): ");			softuart_put_uint16(httpd_conn[socketnum].data_position & 0xFFFF);			softuart_puts_progmem(" datalen=");			softuart_put_uint16(datalen&0xFFFF);			softuart_putnewline();			#endif			if (httpd_conn[socketnum].data_position <= datalen){				//find termination:				unsigned int endpos;				for(endpos=TCP_POS_TXDATA; endpos<TCP_POS_TXDATA+datalen; endpos++){					//quick hack, might return false positives !					if (string_compare_progmem_noeof("---------------", &buffer[endpos])){						endpos-=2;						break;					}				}							filesystem_write_data(&buffer[TCP_POS_TXDATA], (endpos-TCP_POS_TXDATA),0);				filesystem_close_file();				//pos = httpd_add_progmem_data(HTTPD_CTYPE_HTML,NULL, buffer, pos, 0, NIC_BUFFERSIZE-pos);				//pos = httpd_add_progmem_data(HTTPD_RNRN,NULL, buffer, pos, 0, NIC_BUFFERSIZE-pos);				//pos = httpd_add_progmem_data(PSTR("HTTP/1.0 200 Document follows\r\nContent-Type: text/html\r\n\r\n<html><body>upload done.<br><a href=\"/fs/ls\">-> file list</a></body></html>"),NULL, buffer, TCP_POS_TXDATA, 0, NIC_BUFFERSIZE-pos);				//httpd_conn[socketnum].state = 123;				pos = httpd_add_progmem_data(PSTR("HTTP/1.0 200 Document follows\r\nContent-Type: text/html\r\n\r\n"),NULL, buffer, TCP_POS_TXDATA, 0, NIC_BUFFERSIZE-pos);				httpd_conn[socketnum].state = HTTPD_STATE_ACTIVE;				//check if upload successfull				if (httpd_conn[socketnum].data_position == datalen)					httpd_conn[socketnum].file_id = HTTPD_STATE_FILE_UP_DONE;				else					httpd_conn[socketnum].file_id = HTTPD_STATE_FILE_UP_ERR;				httpd_conn[socketnum].seq_offset = pos - datapos + 1;								*appstate = TCP_APPSTATE_HAS_TXDATA;								return (pos-TCP_POS_TXDATA);			}else{				httpd_conn[socketnum].data_position -= datalen;				//filesystem_seek_to(tcp_sockets[socketnum].ack);				filesystem_write_data(&buffer[TCP_POS_TXDATA], datalen,0);				*appstate = TCP_APPSTATE_EMPTYACK;			}			return 0;			case(123):			*appstate = TCP_APPSTATE_FINISHED;			return 0;			break;	/*	case(4):		case(5):				pos = TCP_POS_TXDATA;				buffer[pos++] = '.';				*appstate = TCP_APPSTATE_HAS_TXDATA;												tcp_sockets[socketnum].misc_state = tcp_sockets[socketnum].misc_state+1;				return (pos-TCP_POS_TXDATA);		case(6):			//finished...			*appstate = TCP_APPSTATE_FINISHED;			tcp_sockets[socketnum].misc_state = 0;			return 0;	*/		default:			*appstate = TCP_APPSTATE_EMPTYACK;	}	return 0;}//add program data to buffer//replaces $$ by data pointed to by include ptr,//while parsing <include> replace $$.. by special data!//WARNING: very big !! -> rewrite later !unsigned int httpd_add_progmem_data(PGM_P pointer, PGM_P include,unsigned char *buffer, unsigned int pos, unsigned int offset, unsigned int len){	unsigned char data;	unsigned char data_next;	unsigned char smallbuffer[10];	unsigned char data_available;	PGM_P data_ptr;	PGM_P data_ptr_old;	unsigned char skip_next_data_byte;	//start with main data pointer:	data_ptr       = pointer;	data_ptr_old   = NULL;	data_available = 1;	data           = pgm_read_byte(data_ptr++);	skip_next_data_byte = 0;	while (data_available != 0){		if (skip_next_data_byte){			skip_next_data_byte = 0;		}else{			if (offset == 0){				//append data:				buffer[pos++] = data;				len--;			}else{				offset--;			}		}		if (len == 0)			return 0;				data      = pgm_read_byte(data_ptr++);		data_next = pgm_read_byte(data_ptr);		//while parsing the include file we replace 		//$$TN -> temp now		//$$T+ -> max temp today		//$$T- -> min temp today		//$$CK -> current time		//$$FF  -> show include file		//$$Ixy -> show PORTx.y pin as icon		//$$??  -> show enc28j60 revision		if ((data == '$') && (data_next == '$')){			switch (pgm_read_byte(data_ptr + 1)){				case ('F'):					//include other file !					if (include != NULL){						//reconfigure data pointer						//+/- 3: see bolow data_ptr+=3 !						data_ptr_old = data_ptr + 3;						data_ptr     = include -3; 						data_available = 2;					}					break;				case ('L'):					//dataflash file list					pos = filesystem_generate_index(buffer, pos, &len, &offset);					if (pos == 0)						return 0; //eof					break;				case ('T'):					//temperature request!					//if there is not enough space in buffer, abort & wait for next packet: <0XX,X>					///if (pos+5 > NIC_BUFFERSIZE)					///	return 0;									//temperature fits!					//calculate buffer					if (pgm_read_byte(data_ptr + 2) == 'N') //TEMP NOW:						logger_output_temp(&smallbuffer[0], LOGGER_NOW);					else if (pgm_read_byte(data_ptr + 2) == '-') //TEMP MIN						logger_output_temp(&smallbuffer[0], LOGGER_MIN);					else	//TEMP MAX						logger_output_temp(&smallbuffer[0], LOGGER_MAX);						//copy smallbuffer to ethernetbuffer					for (unsigned char i=0; i<5; i++){						if (offset == 0){							buffer[pos++] = smallbuffer[i];							len--;							if (len == 0)								return 0;							}else{							offset--;						}					}					break;				case ('C'):					//CLOCK:					//if there is not enough space in buffer, abort & wait for next packet: <0XX,X>					///if (pos+8 > NIC_BUFFERSIZE)					///	return 0;					//make sure the time is correct					clock_do();					//fill small buffer					string_uint8_to_buffer_02dez(&smallbuffer[0], clock[CLOCK_HOUR]);					smallbuffer[2] = ':';					string_uint8_to_buffer_02dez(&smallbuffer[3], clock[CLOCK_MIN]);					smallbuffer[5] = ':';					string_uint8_to_buffer_02dez(&smallbuffer[6], clock[CLOCK_SEC]);										//copy small buffer to ethernet buffer					for (unsigned char i=0; i<8; i++){						if (offset == 0){							buffer[pos++] = smallbuffer[i];							len--;							if (len == 0)								return 0;							}else{							offset--;						}					}					break;				case ('I'):					smallbuffer[0] = pgm_read_byte(data_ptr + 2);					smallbuffer[1] = pgm_read_byte(data_ptr + 3);					smallbuffer[2] = '_';					smallbuffer[3] = '0' + port_get_portbit(pgm_read_byte(data_ptr + 2), pgm_read_byte(data_ptr + 3));					string_progmem_to_buffer(PSTR(".gif"), &smallbuffer[4], 4);										//copy small buffer to ethernet buffer					for (unsigned char i=0; i<8; i++){						if (offset == 0){							buffer[pos++] = smallbuffer[i];							len--;							if (len == 0)								return 0;							}else{							offset--;						}					}					data_ptr += 1; //we use one byte more here !					break;				case ('?'):					string_uint8_to_buffer(&smallbuffer[0], enc28j60_revision);					for (unsigned char i=0; i<3; i++){						if (offset == 0){							buffer[pos++] = smallbuffer[i];							len--;							if (len == 0)								return 0;							}else{							offset--;						}					}					break;				default:					//unknown					//do nothing					break;			}			//skip TAG			data_ptr += 3; //$$..			skip_next_data_byte = 1; //we have to skip the $ which is inside the data buffer		}		if (data == 0){			//end of pgm string... is this end of include or end of main ?			// if main    -> data_available = 1			// if include -> data_available = 2			if (data_available == 1){				data_available = 0; //STOP!			}else{				//this was the include, switch back to main!				data_available = 1;				data_ptr = data_ptr_old;				skip_next_data_byte = 1;			}		}	}	return pos;}unsigned int httpd_add_progmem_data_bin(PGM_P pointer, unsigned char *buffer, unsigned int pos, unsigned int offset, unsigned int len, unsigned int pgm_datalen){	unsigned char data;	//unsigned char data_next;		data = pgm_read_byte(pointer++);		while (pgm_datalen){		if (offset == 0){			//append data:			buffer[pos++] = data;			len--;		}else{			offset--;		}		if (len == 0)			return 0;			data      = pgm_read_byte(pointer++);		pgm_datalen--;	}	return pos;}/*unsigned int httpd_add_io_icon(unsigned char *buffer, unsigned int datalen, unsigned int offset, unsigned char socketnum){	unsigned int datapos = 0;	//need to add header ?!	if (offset < sizeof(HTTPD_BUTTON_HEAD)){		//add gif header:		datapos = httpd_add_progmem_data_bin(HTTPD_BUTTON_HEAD, buffer, datapos, offset, NIC_BUFFERSIZE-TCP_POS_TXDATA, sizeof(HTTPD_BUTTON_HEAD));	}	if (offset >= sizeof(HTTPD_BUTTON_HEAD)){		offset = offset - sizeof(HTTPD_BUTTON_HEAD);		if (offset < sizeof(HTTPD_BUTTON_RED_TABLE)){			//add colortable			if ((httpd_conn[socketnum].file_id & 0xff) == HTTPD_STATE_FILE_SET_IO_1_PIC){				//add green				datapos = httpd_add_progmem_data_bin(HTTPD_BUTTON_GREEN_TABLE, buffer, datapos, offset, NIC_BUFFERSIZE-TCP_POS_TXDATA, sizeof(HTTPD_BUTTON_GREEN_TABLE));			}else{				//add red				datapos = httpd_add_progmem_data_bin(HTTPD_BUTTON_RED_TABLE, buffer, datapos, offset, NIC_BUFFERSIZE-TCP_POS_TXDATA, sizeof(HTTPD_BUTTON_RED_TABLE));			}		}	}		if (offset >= sizeof(HTTPD_BUTTON_RED_TABLE)){			offset = offset - sizeof(HTTPD_BUTTON_RED_TABLE);			//add gif data:			datapos = httpd_add_progmem_data_bin(HTTPD_BUTTON_DATA, buffer, datapos, offset, NIC_BUFFERSIZE-TCP_POS_TXDATA, sizeof(HTTPD_BUTTON_DATA));	}	return datapos+TCP_POS_TXDATA;}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -