Homepage

  • Projekte
  • Shop
  • Forum
Erweiterte Suche
  • Schnellzugriff
    • Unbeantwortete Themen
    • Aktive Themen
    • Suche
  • FAQ
  • Anmelden
  • Registrieren
  • Foren-Übersicht
  • Suche

[V1.0.6 Bugreport] in translate.c und httpd.c

Informationen, Fehlermeldungen, Verbesserungen zu Wils Version des AVR-Webservers.
Antworten
  • Druckansicht
Erweiterte Suche
3 Beiträge • Seite 1 von 1
skunz56
Beiträge: 14
Registriert: 20.02.2010, 19:22:00

[V1.0.6 Bugreport] in translate.c und httpd.c

  • Zitieren

Beitrag von skunz56 » 20.02.2010, 19:38:06

Hallo,

bei meinen etwas komplexeren Webseiten aus dem Flash traten Probleme auf. Folgende Korrekturen haben dem abgeholfen:

In translate.c:
Im Abschnitt wo die Variable WDAY ersetzt wird muss auch der Längenzähler hochgesetzt werden. Dazu wird nach der Zeile
dest += 3;
einfach noch
len +=3;
eingefügt.

In httpd.c
In der Funktion
void httpd_data_send(unsigned char index)
sollte der buffer fürs umladen aus dem Flash immer terminiert werden.
Die Schleife sollte wie folgt geändert werden:

Code: Alles auswählen

while ( len < (MTU_SIZE-(TCP_DATA_START)-100) ) {
	memcpy_P(buffer, http_entry[index].new_page_pointer, sizeof(buffer)-1);
=>	// Terminierung immer machen!
=>	buffer[sizeof(buffer)-1] = 0;
	// Datei zeilenweise lesen und vorhandene Variable ersetzen
	// CRLF suchen
	if ( (ptr2 = strstr_P(buffer,PSTR("\r\n"))) ) {
		*(ptr2+2) = 0;
		http_entry[index].new_page_pointer += (ptr2 - buffer + 2);
	}
	else {
=>		// hier entfernt
=>		//buffer[80] = 0;
		http_entry[index].new_page_pointer += sizeof(buffer)-1;
	}

	HTTP_DEBUG("\r\n>%i|%s|<",http_entry[index].new_page_pointer,buffer);
	// Ende-Marker vorhanden ?
	if ( (ptr2 = strstr_P(buffer,PSTR("%END"))) ) {
		HTTP_DEBUG("\r\nFlash-Dateiende.");
		tcp_entry[index].app_status = 0xFFFD;
		*ptr2 = 0;
	}
	// vorhandene Variable ersetzen
	len += translate(buffer, &ptr, &srclen);
	HTTP_DEBUG(" srclen: %3i; len: %i",srclen,len);

	if (ptr2)	// falls %END gefunden wurde -> Ende
		break;
}
Gruß
Stephan
Nach oben

barneyz
Beiträge: 37
Registriert: 02.05.2009, 13:30:40

Re: [V1.0.6 Bugreport] in translate.c und httpd.c

  • Zitieren

Beitrag von barneyz » 06.06.2010, 21:26:59

Danke,

jetzt brauche ich die fehlenden 3 Bytes nicht mehr in Leerzeichen zu verstecken. :D . Ich hatte mir letzte Woche einen Wolf gesucht.
Nach oben

myjack
Beiträge: 35
Registriert: 03.05.2011, 12:51:54

Re: [V1.0.6 Bugreport] in translate.c und httpd.c

  • Zitieren

Beitrag von myjack » 19.04.2012, 12:40:39

Noch ein kleiner Zusatz...

Da ich alle CRLF aus der webpage.h aus Platzgründen rausgeschmissen habe, füllt die Schleife zum Ersetzen bei mir den buffer immer voll auf. Wer Zeilen hat, die länger sind als der Buffer, sollte ebenfalls die folgende Änderung vornehmen. Die if-Abfrage nach CRLF ist dann eigentlich überflüssig, man kann sie aber auch aktiv lassen.

Die folgende Änderung fängt den möglichen Umstand ab, dass eine Variable (z.B. %VA@09) durch die Übergabe in den buffer abgeschnitten werden kann:

Code: Alles auswählen

while ( len < (MTU_SIZE-(TCP_DATA_START)-100) ) {
   memcpy_P(buffer, http_entry[index].new_page_pointer, sizeof(buffer)-1);
   // Terminierung immer machen!
   buffer[sizeof(buffer)-1] = 0;
   // Datei zeilenweise lesen und vorhandene Variable ersetzen
=>   // CRLF suchen (wird überflüssig)
=>   //if ( (ptr2 = strstr_P(buffer,PSTR("\r\n"))) ) {
=>   //   *(ptr2+2) = 0;
=>   //   http_entry[index].new_page_pointer += (ptr2 - buffer + 2);
=>   //}
=>   // steht innerhalb der letzten 5 Zeichen ein %, wird genau davor abgeschnitten!
=>   if ( (ptr2 = strstr_P(&buffer[sizeof(buffer)-5],PSTR("%"))) ) {
=>      *(ptr2) = 0;
=>      http_entry[index].new_page_pointer += (ptr2 - buffer);
=>   }
   else {
      http_entry[index].new_page_pointer += sizeof(buffer)-1;
   }

   HTTP_DEBUG("\r\n>%i|%s|<",http_entry[index].new_page_pointer,buffer);
   // Ende-Marker vorhanden ?
   if ( (ptr2 = strstr_P(buffer,PSTR("%END"))) ) {
      HTTP_DEBUG("\r\nFlash-Dateiende.");
      tcp_entry[index].app_status = 0xFFFD;
      *ptr2 = 0;
   }
   // vorhandene Variable ersetzen
   len += translate(buffer, &ptr, &srclen);
   HTTP_DEBUG(" srclen: %3i; len: %i",srclen,len);

   if (ptr2)   // falls %END gefunden wurde -> Ende
      break;
}
Nach oben

Antworten
  • Druckansicht

3 Beiträge • Seite 1 von 1

Zurück zu „Software: Wils erweiterte Version“



  • Foren-Übersicht
  • Alle Zeiten sind UTC+02:00
  • Alle Cookies löschen

Powered by phpBB® Forum Software © phpBB Limited

Deutsche Übersetzung durch phpBB.de

Datenschutz | Nutzungsbedingungen

 

 

sitemap  |    |  datenschutz   |  impressum