static unsigned short make_neighbor(void *arg) { struct httpd_state *s = (struct httpd_state *)arg; struct collect_neighbor *n = collect_neighbor_get(s->u.count); if(n == NULL) { return 0; } #if !UIP_CONF_IPV6 return snprintf((char *)uip_appdata, uip_mss(), "<li><a href=\"http://172.16.%d.%d/\">%d.%d</a>\r\n", n->addr.u8[0], n->addr.u8[1], n->addr.u8[0], n->addr.u8[1]); #else #if 0 uip_ipaddr_t ipaddr; char ipaddr_str[41]; uip_ip6addr(&ipaddr, NET_ADDR_A, NET_ADDR_B, NET_ADDR_C, NET_ADDR_D, (uint16_t)(((uint16_t)(n->addr.u8[0]^0x02))<<8 | (uint16_t)n->addr.u8[1]), ((uint16_t)(n->addr.u8[2]))<<8 | (uint16_t)n->addr.u8[3], (uint16_t)(n->addr.u8[4])<<8 | n->addr.u8[5], (uint16_t)(n->addr.u8[6])<<8 | n->addr.u8[7]); httpd_sprint_ip6(ipaddr, ipaddr_str); return snprintf((char *)uip_appdata, uip_mss(), "<li><a href=\"http://%s/\">%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X</a>\r\n", ipaddr_str, n->addr.u8[0], n->addr.u8[1], n->addr.u8[2], n->addr.u8[3], n->addr.u8[4], n->addr.u8[5], n->addr.u8[6], n->addr.u8[7]); #endif /* Automatic generation of node address. Javascript funcion required. * Client-side generation is simpler than server-side, as parsing http header * would be requied. */ return snprintf((char *)uip_appdata, uip_mss(), "<li><a id=node name='%x:%x:%x:%x'>%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X</a>\r\n", (uint16_t)(((uint16_t)(n->addr.u8[0]^0x02))<<8 | (uint16_t)n->addr.u8[1]), ((uint16_t)(n->addr.u8[2]))<<8 | (uint16_t)n->addr.u8[3], (uint16_t)(n->addr.u8[4])<<8 | n->addr.u8[5], (uint16_t)(n->addr.u8[6])<<8 | n->addr.u8[7], n->addr.u8[0], n->addr.u8[1], n->addr.u8[2], n->addr.u8[3], n->addr.u8[4], n->addr.u8[5], n->addr.u8[6], n->addr.u8[7]); #endif /* UIP_CONF_IPV6 */ }
/*---------------------------------------------------------------------------*/ void webserver_log_file(uip_ipaddr_t *requester, char *file) { #if LOG_CONF_ENABLED /* Print out IP address of requesting host. */ #if UIP_CONF_IPV6 char buf[48]; uint8_t j; j=httpd_sprint_ip6((uip_ip6addr_t)*requester, buf); buf[j]=':';buf[j+1]=' ';buf[j+2]=0; #else char buf[20]; sprintf(buf, "%d.%d.%d.%d: ", requester->u8[0], requester->u8[1], requester->u8[2], requester->u8[3]); #endif /* UIP_CONF_IPV6 */ log_message(buf, file); #endif /* LOG_CONF_ENABLED */ }
/*---------------------------------------------------------------------------*/ static unsigned short make_tcp_stats(void *arg) { struct uip_conn *conn; struct httpd_state *s = (struct httpd_state *)arg; conn = &uip_conns[s->u.count]; #if UIP_CONF_IPV6 char buf[48]; httpd_sprint_ip6(&conn->ripaddr, buf); return snprintf((char *)uip_appdata, uip_mss(), "<tr><td>%d</td><td>%s:%u</td><td>%s</td><td>%u</td><td>%u</td><td>%c %c</td></tr>\r\n", uip_htons(conn->lport), buf, uip_htons(conn->rport), states[conn->tcpstateflags & UIP_TS_MASK], conn->nrtx, conn->timer, (uip_outstanding(conn)) ? '*' : ' ', (uip_stopped(conn)) ? '!' : ' '); #else return snprintf((char *)uip_appdata, uip_mss(), "<tr><td>%d</td><td>%u.%u.%u.%u:%u</td><td>%s</td><td>%u</td><td>%u</td><td>%c %c</td></tr>\r\n", uip_htons(conn->lport), conn->ripaddr.u8[0], conn->ripaddr.u8[1], conn->ripaddr.u8[2], conn->ripaddr.u8[3], uip_htons(conn->rport), states[conn->tcpstateflags & UIP_TS_MASK], conn->nrtx, conn->timer, (uip_outstanding(conn)) ? '*' : ' ', (uip_stopped(conn)) ? '!' : ' '); #endif /* UIP_CONF_IPV6 */ }