Ejemplo n.º 1
0
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 ();
}
Ejemplo n.º 2
0
/*-----------------------------------------------------------------------------------*/
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();
}
Ejemplo n.º 3
0
// 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);

    }
}
Ejemplo n.º 4
0
//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;
	}   
}
Ejemplo n.º 5
0
void tcp_server_appcall(void){		
	switch(uip_conn->lport) 
	{
		case HTONS(80):
			httpd_appcall(); 
			break;
		case HTONS(1200):
		    tcp_demo_appcall(); 
			break;
	}
}
Ejemplo n.º 6
0
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);
}
Ejemplo n.º 7
0
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();
}
Ejemplo n.º 8
0
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();
}
Ejemplo n.º 9
0
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;

  }
}
Ejemplo n.º 10
0
/*-----------------------------------------------------------------------------------*/
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);
    }
}
Ejemplo n.º 11
0
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
}
Ejemplo n.º 12
0
/**
 * \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();
	}
*/

}
Ejemplo n.º 13
0
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));
   }
}
Ejemplo n.º 14
0
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;
}
Ejemplo n.º 15
0
/*-----------------------------------------------------------------------------------*/
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);
  }
}
Ejemplo n.º 16
0
/*****************************************************************************
 函 数 名  : 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;
	}	
}
Ejemplo n.º 17
0
/*---------------------------------------------------------------------------*/
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();
}