#class auto #define TCPCONFIG 6 //pro nastaveni IP adresy - lze menit #define USE_DHCP 1 //nutné pro nastavení ip adresy DHCP serverem #define MAX_UDP_SOCKET_BUFFERS 1 //pocet bufferu pro UDP spojeni -> mozne jen jedno UDP spojeni #define MISTNI_PORT 1234 #define CILOVY_PORT 1234 #define CILOVA_IP "192.168.1.104" #define EINBUFSIZE 127 //buffer vstupni pro RS232 #define EOUTBUFSIZE 127 //buffer vystupni pro RS232 #define MYBAUD 115200 //prenosova rychlost pro RS232 //nastaveni flash pameti //#define FS2_FLASH //#use "fs2.lib" //#define FORMAT #define RESERVE 0 #define BLOCKS 64 #define NASTAVENI 1 //knihovny #use "tcp_config.lib" #use "dcrtcp.lib" #use "http.lib" //webovy server na prevodniku #memmap xmem #ximport "index.html" index_html #ximport "rabbit1.gif" rabbit1_gif /******************************************************************************* DEFINICE STRUKTUR *******************************************************************************/ typedef struct { char *name; char value[15]; } settings; typedef struct { char *name; char value[16]; } adressa; /******************************************************************************* GLOBALNI PROMENNE *******************************************************************************/ settings nastaveni[3]; adressa adresa[2]; int change; static char buf[1024]; // 128 bajtů udp_Socket sock; /******************************************************************************* FUNKCE PRO ULOZENI DAT DO FLASH PAMETI *******************************************************************************/ /*int nastaveni_ipaddr(){ File file; char buffik[256]; if(fopen_wr(&file,NASTAVENI)) printf("Neotevrenej soubor/n"); else{ printf("Otevrenej soubor pro zapis.\n"); if(fwrite(&file,"Ahoj, ja jsem soubor!",21)) printf("Nepodaril se zapis do souboru!\n"); else{ printf("Zapis se povedl.\n\n"); fclose(&file); } } }*/ /******************************************************************************* FUNKCE PRO PRENOS DAT Z WEBU DO STRUKTURY *******************************************************************************/ //PRENASI IP ADRESU, MASKU SITE A VYCHOZI BRANU ******************************** int manPOST(HttpState* state) { auto int retval; auto int i; retval = sock_aread(&state->s, state->p, (state->content_length < HTTP_MAXBUFFER-1)?(int)state->content_length:HTTP_MAXBUFFER-1); if (retval < 0) return 1; state->subsubstate += retval; if (state->subsubstate >= state->content_length) { state->buffer[(int)state->content_length] = '\0'; for(i=0; i<3; i++) http_scanpost(nastaveni[i].name, state->buffer, nastaveni[i].value, (int)state->content_length); return 1; } return 0; } //PRANSI CILOVOU ADRESU V ETHERNETU ******************************************** int cil_adresaPOST(HttpState* state) { auto int retval; auto int i; retval = sock_aread(&state->s, state->p, (state->content_length < HTTP_MAXBUFFER-1)?(int)state->content_length:HTTP_MAXBUFFER-1); if (retval < 0) return 1; state->subsubstate += retval; if (state->subsubstate >= state->content_length) { state->buffer[(int)state->content_length] = '\0'; for(i=0; i<2; i++) http_scanpost(adresa[i].name, state->buffer, adresa[i].value, (int)state->content_length); return 1; } return 0; } /******************************************************************************* .CGI FUNKCE *******************************************************************************/ // OBSLUHA STISKU TLACITKA ZMENIT MANUALNE SITOVE NASTAVENI ******************** int submitMAN(HttpState* state){ if(state->length) if(state->offset < state->length) state->offset += sock_fastwrite(&state->s, state->buffer + (int)state->offset, (int)state->length - (int)state->offset); else { state->offset = 0; state->length = 0; } else switch(state->substate){ case 0: sprintf(state->buffer,"
IP Adresa: %s
Maska sítě: %s
Výchozí brána: %s
", nastaveni[0].value, nastaveni[1].value, nastaveni[2].value); state->length = strlen(state->buffer); state->substate++; break; case 2: sprintf(state->buffer, "Přesměrování na novou IP adresu!
",nastaveni[0].value); state->length = strlen(state->buffer); state->substate++; break; default: state->substate = 0; change = 1; return 1; } return 0; } // OBSLUHA STISKU TLACITKA ZMENIT SITOVE NASTAVENI POMOCI DHCP SERVERU ********* int submitAUTO(HttpState* state){ if(state->length) if(state->offset < state->length) state->offset += sock_fastwrite(&state->s, state->buffer + (int)state->offset,(int)state->length - (int)state->offset); else { state->offset = 0; state->length = 0; } else switch(state->substate){ case 0: sprintf(state->buffer, "Siťové nastavení bylo změněno DHCP serverem.
"); state->length = strlen(state->buffer); state->substate++; break; default: state->substate = 0; change = 2; return 1; } return 0; } // OBSLUHA STISKU TLACITKA ZMENIT CILOVOU ADRESU ******************************* int cil_adresa(HttpState* state){ longword zpet_adr; char zpet_adresa[15]; ifconfig(IF_ETH0,IFG_IPADDR,&zpet_adr,IFS_END); inet_ntoa(zpet_adresa,zpet_adr); if(state->length) if(state->offset < state->length) state->offset += sock_fastwrite(&state->s, state->buffer + (int)state->offset, (int)state->length - (int)state->offset); else{ state->offset = 0; state->length = 0; } else switch(state->substate){ case 0: sprintf(state->buffer,"Cilova adresa v Ethernetu změněna na: %s
Cilovy port: %s
Zpět
",zpet_adresa); state->length = strlen(state->buffer); state->substate++; break; default: state->substate = 0; change=3; return 1; } return 0; } /******************************************************************************* PRIJEM PAKETU Z ETHERNETU A ODESLANI NA RS232 *******************************************************************************/ int prijem_paketuETH(void){ int i, m, n; char signal, paket[127]; memset(buf, 0, sizeof(buf)); m = udp_recv(&sock, buf, sizeof(buf)); //prijem paketu a ulozeni do bufferu if(m == -1) return 0; if(m > 5){ printf("Data prijata z ETHERNETU %d bytu.\n",m); for (i = 0; i < m; i++) printf ("%X",buf[i]); printf("\n\n"); //uprava prijateho paketu *************************************************** signal=buf[4]; //zobrazení adresy sitě, adresy zařízení a síly signálu printf("Adresa site: "); for (i = 0; i<2; i++) printf ("%X",buf[i]); printf("\nAdresa zarizeni: "); for (i = 2; i<4; i++) printf ("%X",buf[i]); printf("\nSila signalu: %X\n\n", signal); //posun dat v přijatém paketu o jeden byte (o silu signalu) for (i = 5; i