#include #include #include #include "eos.h" #include "event.h" #include "net.h" #include "sock.h" static eos_evt_fptr_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_handler_evt(unsigned char type, unsigned char *buffer, uint16_t len) { if ((buffer == NULL) || (len < 2)) { eos_evtq_bad_handler(type, buffer, len); eos_net_free(buffer, 0); return; } if (buffer[0] == EOS_SOCK_MTYPE_PKT) { uint8_t sock = buffer[1]; if (sock && (sock <= EOS_SOCK_MAX_SOCK)) { sock--; } else { eos_evtq_bad_handler(type, buffer, len); eos_net_free(buffer, 0); return; } _eos_net_handle(type, buffer, len, sock, evt_handler, &evt_handler_flags_buf_free, &evt_handler_flags_buf_acq); } } 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)); }