45 lines
1.7 KiB
C
45 lines
1.7 KiB
C
|
#include "../include/socket.h"
|
||
|
#include "../include/udp.h"
|
||
|
#include "../include/tcp.h"
|
||
|
|
||
|
static struct Socket sockets[MAX_SOCKET_NUM];
|
||
|
|
||
|
static void socket_udp_send(struct Socket *socket, uint8_t *data,
|
||
|
uint32_t size) {
|
||
|
udp_provider_send(socket->remoteIP, socket->localIP, socket->remotePort,
|
||
|
socket->localPort, data, size);
|
||
|
}
|
||
|
|
||
|
static void socket_tcp_send(struct Socket *socket, uint8_t *data,
|
||
|
uint32_t size) {
|
||
|
while(socket->state != SOCKET_TCP_ESTABLISHED);
|
||
|
uint32_t s = size;
|
||
|
tcp_provider_send(socket->remoteIP, socket->localIP, socket->remotePort,
|
||
|
socket->localPort, socket->seqNum, socket->ackNum, 0, 1, 0,
|
||
|
0, 0, 0, 0, 0, data, s);
|
||
|
socket->seqNum += s;
|
||
|
//io_delay();
|
||
|
}
|
||
|
|
||
|
void socket_init() {
|
||
|
for (int i = 0; i < MAX_SOCKET_NUM; i++) {
|
||
|
sockets->state = SOCKET_FREE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
struct Socket *Socket_Find(uint32_t dstIP, uint16_t dstPort, uint32_t srcIP,
|
||
|
uint16_t srcPort, uint8_t protocol) {
|
||
|
for (int i = 0; i != MAX_SOCKET_NUM; i++) {
|
||
|
if (srcIP == sockets[i].localIP && dstIP == sockets[i].remoteIP &&
|
||
|
srcPort == sockets[i].localPort && dstPort == sockets[i].remotePort &&
|
||
|
protocol == sockets[i].protocol && sockets[i].state != SOCKET_FREE) {
|
||
|
return (struct Socket *)&sockets[i];
|
||
|
} else if (srcIP == sockets[i].localIP && srcPort == sockets[i].localPort &&
|
||
|
protocol == sockets[i].protocol &&
|
||
|
sockets[i].state == SOCKET_TCP_LISTEN) {
|
||
|
return (struct Socket *)&sockets[i];
|
||
|
}
|
||
|
}
|
||
|
return -1;
|
||
|
}
|