/*-----------------------------------------------------------------------------------*/ void webclient_appcall(void) { if(uip_connected()) { s.timer = 0; s.state = WEBCLIENT_STATE_STATUSLINE; senddata(); webclient_connected(); return; } if(s.state == WEBCLIENT_STATE_CLOSE) { webclient_closed(); uip_abort(); return; } if(uip_aborted()) { webclient_aborted(); } if(uip_timedout()) { webclient_timedout(); } if(uip_acked()) { s.timer = 0; acked(); } if(uip_newdata()) { s.timer = 0; newdata(); } if(uip_rexmit() || uip_newdata() || uip_acked()) { senddata(); } else if(uip_poll()) { ++s.timer; if(s.timer == WEBCLIENT_TIMEOUT) { webclient_timedout(); uip_abort(); return; } /* senddata();*/ } if(uip_closed()) { if(s.httpflag != HTTPFLAG_MOVED) { /* Send NULL data to signal EOF. */ webclient_datahandler(NULL, 0); } else { if(resolv_lookup(s.host) == NULL) { resolv_query(s.host); } webclient_get(s.host, s.port, s.file); } } }
static void newdata(void) { u16_t len; len = uip_datalen(); if (s.state == WEBCLIENT_STATE_STATUSLINE) len = parse_statusline(len); if (s.state == WEBCLIENT_STATE_HEADERS && len > 0) len = parse_headers(len); if (len > 0 && s.state == WEBCLIENT_STATE_DATA && s.httpflag != HTTPFLAG_MOVED) webclient_datahandler((char *)uip_appdata, len); }
/*-----------------------------------------------------------------------------------*/ static void newdata(void) { u16_t len; len = uip_datalen(); #if 0 printf("____________________________%s() masuk, s.state: %d\r\n", __FUNCTION__, s.state); #endif if(s.state == WEBCLIENT_STATE_STATUSLINE) { len = parse_statusline(len); } if(s.state == WEBCLIENT_STATE_HEADERS && len > 0) { len = parse_headers(len); } if(len > 0 && s.state == WEBCLIENT_STATE_DATA && s.httpflag != HTTPFLAG_MOVED) { webclient_datahandler((char *)uip_appdata, len); } }
/*-----------------------------------------------------------------------------------*/ void webclient_appcall(void *state) { char *dataptr; if(uip_connected()) { s.timer = 0; s.state = WEBCLIENT_STATE_STATUSLINE; senddata(); webclient_connected(); tcp_markconn(uip_conn, &s); return; } if(uip_timedout()) { webclient_timedout(); } if(uip_aborted()) { webclient_aborted(); } if(state == NULL) { uip_abort(); return; } if(s.state == WEBCLIENT_STATE_CLOSE) { webclient_closed(); uip_abort(); return; } /* The acked() and newdata() functions may alter the uip_appdata ptr, so we need to store it in the "dataptr" variable so that we can restore it before the senddata() function is called. */ dataptr = uip_appdata; if(uip_acked()) { s.timer = 0; acked(); } if(uip_newdata()) { s.timer = 0; newdata(); } uip_appdata = dataptr; if(uip_rexmit() || uip_newdata() || uip_acked()) { senddata(); } else if(uip_poll()) { ++s.timer; if(s.timer == WEBCLIENT_TIMEOUT) { webclient_timedout(); uip_abort(); return; } /* senddata();*/ } if(uip_closed()) { tcp_markconn(uip_conn, NULL); if(s.httpflag != HTTPFLAG_MOVED) { /* Send NULL data to signal EOF. */ webclient_datahandler(NULL, 0); } else { /* conn = uip_connect(uip_conn->ripaddr, s.port); if(conn != NULL) { dispatcher_markconn(conn, NULL); init_connection(); }*/ #if UIP_UDP if(resolv_lookup(s.host) == NULL) { resolv_query(s.host); } #endif /* UIP_UDP */ webclient_get(s.host, s.port, s.file); } } }
/*-----------------------------------------------------------------------------------*/ void webclient_appcall(void) { //printf("%s() masuk\r\n", __FUNCTION__); if(uip_connected()) { s.timer = 0; s.state = WEBCLIENT_STATE_STATUSLINE; senddata(); //webclient_connected(); //printf("%s(): Connected\r\n", __FUNCTION__); return; } if(s.state == WEBCLIENT_STATE_CLOSE) { //webclient_closed(); //printf("%s(): Closed\r\n", __FUNCTION__); uip_abort(); return; } if(uip_aborted()) { //webclient_aborted(); //printf("%s(): Aborted\r\n", __FUNCTION__); } if(uip_timedout()) { //webclient_timedout(); //printf("%s(): Timeout 1\r\n", __FUNCTION__); } if(uip_acked()) { s.timer = 0; acked(); } if(uip_newdata()) { //printf("%s() masuk .... ke f newdata\r\n", __FUNCTION__); s.timer = 0; newdata(); } if(uip_rexmit() || uip_newdata() || uip_acked()) { senddata(); } else if(uip_poll()) { ++s.timer; if(s.timer == WEBCLIENT_TIMEOUT) { //webclient_timedout(); // printf("%s(): Timeout 2\r\n", __FUNCTION__); uip_abort(); return; } /* senddata();*/ } if(uip_closed()) { if(s.httpflag != HTTPFLAG_MOVED) { /* Send NULL data to signal EOF. */ webclient_datahandler(NULL, 0); } else { /* if(resolv_lookup(s.host) == NULL) { resolv_query(s.host); }*/ webclient_get(s.host, s.port, s.file); } } }