void process_input (struct connection *cp) { char buf[10000]; int n; n = read (cp->sock, buf, sizeof buf); if (n == 0) { printf ("close conn%d\n", cp->seq); cp->dead = 1; return; } if (n < 0 && errno != EWOULDBLOCK ) { printf ("error conn%d\n", cp->seq); cp->dead = 1; return; } printf ("input %d\n", n); dump (buf, n); uip_appdata = buf; uip_len = n; uip_flags = UIP_NEWDATA; uip_conn = &cp->uip_conn; uip_cp = cp; httpd_appcall (); }
/*-----------------------------------------------------------------------------------*/ PROCESS_THREAD(webserver_process, ev, data) { PROCESS_BEGIN(); ctk_window_new(&mainwindow, LOG_WIDTH, LOG_HEIGHT+1, "Web server"); CTK_WIDGET_ADD(&mainwindow, &message); CTK_WIDGET_ADD(&mainwindow, &loglabel); httpd_init(); ctk_window_open(&mainwindow); while(1) { PROCESS_WAIT_EVENT(); if(ev == ctk_signal_window_close || ev == PROCESS_EVENT_EXIT) { ctk_window_close(&mainwindow); process_exit(&webserver_process); LOADER_UNLOAD(); } else if(ev == tcpip_event) { httpd_appcall(data); } } PROCESS_END(); }
// select between webserver and telnetd server extern "C" void app_select_appcall(void) { switch (uip_conn->lport) { case HTONS(80): if (webserver_enabled) httpd_appcall(); break; case HTONS(23): if (telnet_enabled) Telnetd::appcall(); break; case HTONS(115): if(sftpd == NULL) { sftpd= new Sftpd(); sftpd->init(); printf("Created sftpd service\n"); } sftpd->appcall(); break; default: printf("unknown app for port: %d\n", uip_conn->lport); } }
//TCP应用接口函数(UIP_APPCALL) //完成TCP服务(包括server和client)和HTTP服务 void tcp_appcall(void) { // switch(uip_conn->lport) //本地监听端口80和1200 // { // case HTONS(80): // httpd_appcall(); // break; // case HTONS(modbus.listen_port): // tcp_server_appcall(); // break; // default: // break; // } if(uip_conn->lport == HTONS(80)) httpd_appcall(); else if(uip_conn->lport == HTONS(modbus.listen_port)) tcp_server_appcall(); switch(uip_conn->rport) //远程连接1400端口 { case HTONS(1400): tcp_client_demo_appcall(); break; default: break; } }
void tcp_server_appcall(void){ switch(uip_conn->lport) { case HTONS(80): httpd_appcall(); break; case HTONS(1200): tcp_demo_appcall(); break; } }
void dispatch_tcp_appcall (void) { struct sambungan_state *sb = (struct sambungan_state *) &(uip_conn->appstate2); #ifdef PAKE_HTTP if (uip_conn->lport == HTONS (80)) httpd_appcall (); #endif #ifdef PAKE_TELNETD if (uip_conn->lport == HTONS (23)) telnetd_appcall (); #endif #ifdef BOARD_KOMON if (uip_conn->lport == HTONS(PORT_MONITA)) monita_appcall(); #endif #if (PAKAI_KONTROL == 1) else if (uip_conn->lport == HTONS(PORT_KONTROL)) kontrol_appcall(); #endif //#ifdef CARI_SUMBERNYA #ifdef SAMPURASUN_SERVER // gunakan rport untuk konek ke orang lain if (uip_conn->rport == HTONS(PORT_MONITA)) { samb_appcall(); } else if (uip_conn->rport == HTONS(PORT_DAYTIME)) { daytime_appcall(); } #endif #ifdef PAKAI_WEBCLIENT /* webclient */ if (uip_conn->rport == HTONS(80)) { webclient_appcall(); } #endif #ifdef PAKAI_KIRIM_BALIK //* if (uip_conn->rport == HTONS(PORT_KIRIM_BALIK)) { kirim_balik_appcall(); } //*/ #endif //printf("%s(): port = %d\r\n", __FUNCTION__, uip_conn->rport); }
PROCESS_THREAD(webserver_nogui_process, ev, data) { PROCESS_BEGIN(); httpd_init(); while(1) { PROCESS_WAIT_EVENT_UNTIL(ev == tcpip_event); httpd_appcall(data); } PROCESS_END(); }
PROCESS_THREAD(httpd_process, ev, data) { PROCESS_BEGIN(); tcp_listen(UIP_HTONS(nvm_data.webserver_port)); LOG6LBR_INFO("Starting webserver on port %d\n", nvm_data.webserver_port); memb_init(&conns); while(1) { PROCESS_WAIT_EVENT_UNTIL(ev == tcpip_event); httpd_appcall(data); } PROCESS_END(); }
void uip_router_tcp_appcall(void) { switch(uip_conn->lport) { case HTONS(1000): hello_world_appcall(); break; case HTONS(80): httpd_appcall(); break; case HTONS(23): telnetd_appcall(); break; } }
/*-----------------------------------------------------------------------------------*/ EK_EVENTHANDLER(eventhandler, ev, data) { if(ev == EK_EVENT_INIT) { ctk_window_new(&mainwindow, LOG_WIDTH, LOG_HEIGHT+1, "Web server"); CTK_WIDGET_ADD(&mainwindow, &message); CTK_WIDGET_ADD(&mainwindow, &loglabel); /* Attach listeners to signals. */ /* dispatcher_listen(ctk_signal_button_activate);*/ httpd_init(); ctk_window_open(&mainwindow); } else if(ev == tcpip_event) { httpd_appcall(data); } }
void tcp_protocol_switcher_appcall(void) { if( uip_conn->rport == HTONS( TELNET_SERVER_PORT ) ) { // telnet port telnet_client_appcall(); return; } if( uip_conn->lport == HTONS( SIEMENS_TCP_PORT ) ) { // Siements TCPIP port siemensTCP_appcall(); return; } if( uip_conn->lport == HTONS( 80 ) ) { // Web Server port httpd_appcall(); return; } if( uip_conn->lport == HTONS( SPECIAL_SERVER_PORT ) ) { // Special Server port specserver_appcall(); return; } webclient_appcall(); // Usually remote port 80 but can be any other one }
/** * \brief Administra aplicacoes. * * Principal funcao da camada mult * * Gerencia os pacotes vindos da rede e de acordo com a porta que esta sendo feito a requisicao * e encaminhado para o devido pacote. */ void services_appcall(void){ struct services_state *proc; // proc = (struct services_state)uip_conn->appstate; // if (uip_connected()){//uip_connected - aloca uma nova conexão. //verificação de qual serviço deve ser atendido é feita através da porta utilizada por ele. if(uip_conn->lport == HTONS(TELNET_PORT)){ DEBUG_INFO("Atendendo servicos de TELNET"); //função tratadora dos serviços de telnet. telnetd_appcall(); } else if(uip_conn->lport == HTONS(HTTP_PORT)){ DEBUG_INFO("Atendendo servicos de HTTP"); //função tratadora dos serviços do webServer. httpd_appcall(); } else if(uip_conn->lport == HTONS(CHAT_PORT)){ DEBUG_INFO("Atendendo servicos de CHAT"); //função tratadora dos serviços do chat. chat_appcall(); } else if(uip_conn->lport == HTONS(SFTD_PORT)){ DEBUG_INFO("Atendendo servicos de SFT"); //função tratadora dos serviços do sft. sftd_appcall(); } //IMPLEMENTADO OS SERVIÇO DE FTP APENAS PARA CLIENTE. /* else if(uip_conn->lport == HTONS(FTP_PORT)){ DEBUG_INFO("Atendendo servicos de FTP"); //função tratadora dos serviços do webServer. ftp_appcall(); } */ }
void uip_appcall_gateway() { // printf("GW : %u %u %u\r\n",ntohs(uip_conn->lport), ntohs(uip_conn->rport),uip_ipaddr1(uip_conn->ripaddr)); if (uip_conn->lport == HTONS(80)) { httpd_appcall(); } else if (uip_conn->rport == HTONS(80) || uip_conn->rport == HTONS(26600)) { webclient_app(); } else if (uip_conn->lport == HTONS(1000)) { // not implemented lcd_appcall(); } else { printf("Unknown packet ... \r\n"); printf("rport : %u\r\n",ntohs(uip_conn->rport)); printf("lport : %u\r\n",ntohs(uip_conn->lport)); printf("LEN : %u\r\n",uip_conn->len); printf("IP : %u.%u.%u.%u\r\n",uip_ipaddr1(uip_conn->ripaddr),uip_ipaddr2(uip_conn->ripaddr),uip_ipaddr3(uip_conn->ripaddr),uip_ipaddr4(uip_conn->ripaddr)); } }
void accept_connection (struct listen_sock *lp) { struct connection *cp; struct sockaddr_in raddr; size_t rlen; int sock; rlen = sizeof raddr; sock = accept (lp->sock, (struct sockaddr *)&raddr, &rlen); if (sock < 0) { printf ("error accepting connection\n"); return; } cp = calloc (1, sizeof *cp); cp->seq = ++conn_seq; cp->sock = sock; cp->raddr = raddr; fcntl (cp->sock, F_SETFL, O_NONBLOCK); printf ("start conn%d %s:%d\n", cp->seq, inet_ntoa (cp->raddr.sin_addr), ntohs (cp->raddr.sin_port)); uip_conn = &cp->uip_conn; uip_conn->mss = 1024; uip_flags = UIP_CONNECTED; httpd_appcall (); cp->next = &connections; cp->prev = connections.prev; connections.prev->next = cp; connections.prev = cp; }
/*-----------------------------------------------------------------------------------*/ EK_EVENTHANDLER(webserver_eventhandler, ev, data) { EK_EVENTHANDLER_ARGS(ev, data); if(ev == EK_EVENT_INIT) { ctk_window_new(&mainwindow, LOG_WIDTH, LOG_HEIGHT+1, "Web server"); CTK_WIDGET_ADD(&mainwindow, &message); CTK_WIDGET_ADD(&mainwindow, &loglabel); httpd_init(); ctk_window_open(&mainwindow); } else if(ev == ctk_signal_window_close || ev == EK_EVENT_REQUEST_EXIT) { ctk_window_close(&mainwindow); ek_exit(); id = EK_ID_NONE; LOADER_UNLOAD(); } else if(ev == tcpip_event) { httpd_appcall(data); } }
/***************************************************************************** 函 数 名 : my_tcp_app 功能描述 : tcp initialize for uip 输入参数 : void 输出参数 : 无 返 回 值 : 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2017年4月17日 作 者 : QSWWD 修改内容 : 新生成函数 *****************************************************************************/ void my_tcp_app(void) { printf("UIP_APPCALL...\n\r"); switch(uip_conn->lport) { case HTONS(1234): example1_app(); break; case HTONS(2345): example2_app(); break; case HTONS(23): telnetd_appcall(); break; case HTONS(80): httpd_appcall(); break; case HTONS(1000): hello_world_appcall(); break; default: printf("The protocal not support!\n\r"); break; } }
/*---------------------------------------------------------------------------*/ void httpd_appcall(void *state) { #if DEBUGLOGIC struct httpd_state *s; //Enter here for debugging with output directed to TCPBUF s = sg = (struct httpd_state *)memb_alloc(&conns); //put ram watch on sg if (1) { #else struct httpd_state *s = (struct httpd_state *)state; if(uip_closed() || uip_aborted() || uip_timedout()) { if(s != NULL) { s->script = NULL; memb_free(&conns, s); } } else if(uip_connected()) { s = (struct httpd_state *)memb_alloc(&conns); if(s == NULL) { uip_abort(); webserver_log_file(&uip_conn->ripaddr, "reset (no memory block)"); return; } #endif tcp_markconn(uip_conn, s); PSOCK_INIT(&s->sin, (uint8_t *)s->inputbuf, sizeof(s->inputbuf) - 1); PSOCK_INIT(&s->sout, (uint8_t *)s->inputbuf, sizeof(s->inputbuf) - 1); PT_INIT(&s->outputpt); s->script = NULL; s->state = STATE_WAITING; timer_set(&s->timer, CLOCK_SECOND * 10); handle_connection(s); } else if(s != NULL) { if(uip_poll()) { if(timer_expired(&s->timer)) { uip_abort(); s->script = NULL; memb_free(&conns, s); webserver_log_file(&uip_conn->ripaddr, "reset (timeout)"); } } else { timer_restart(&s->timer); } handle_connection(s); } else { uip_abort(); } } /*---------------------------------------------------------------------------*/ PROCESS(httpd_process, "httpd"); PROCESS_THREAD(httpd_process, ev, data) { PROCESS_BEGIN(); httpd_init(); while(1) { PROCESS_WAIT_EVENT_UNTIL(ev == tcpip_event); httpd_appcall(data); } PROCESS_END(); }