#include #include #include #include "eos.h" #include "event.h" #include "net.h" #include "sock.h" static eos_evt_handler_t evt_handler[EOS_SOCK_MAX_SOCK]; static uint16_t evt_handler_flags_buf_free = 0; static uint16_t evt_handler_flags_buf_acq = 0; static void sock_handle_evt(unsigned char type, unsigned char *buffer, uint16_t len) { unsigned char sock; if ((buffer == NULL) || (len < 2)) { eos_evtq_bad_handler(type, buffer, len); eos_net_free(buffer, 0); return; } sock = buffer[1]; if ((sock == 0) || (sock > EOS_SOCK_MAX_SOCK)) { eos_evtq_bad_handler(type, buffer, len); eos_net_free(buffer, 0); } sock--; switch(buffer[0]) { case EOS_SOCK_MTYPE_PKT: evt_handler[sock](type, buffer, len); break; default: eos_evtq_bad_handler(type, buffer, len); eos_net_free(buffer, 0); break; } } void eos_sock_init(void) { int i; for (i=0; ihost, sizeof(addr->host)); memcpy(buffer+2+sizeof(addr->host), &addr->port, sizeof(addr->port)); return eos_net_send(type, buffer, size, more); } void eos_sock_getfrom(unsigned char *buffer, EOSNetAddr *addr) { memcpy(addr->host, buffer+2, sizeof(addr->host)); memcpy(&addr->port, buffer+2+sizeof(addr->host), sizeof(addr->port)); }