Files
selfcare/proxy_c/tcp/src/tcp_if.c
2025-03-03 11:40:37 +08:00

96 lines
1.4 KiB
C

/*
*
*/
#include "./include/tcp_if.h"
#include "./include/tcp_port.h"
static tcp_sap_t tcp_sap[TCP_MAX_NUM_OF_SAP];
static void tcp_sap_init(tcp_sap_t *ptr_sap, BYTE index)
{
if((ptr_sap == NULL) || (index >= TCP_MAX_NUM_OF_SAP))
{
return;
}
ptr_sap->id = index;
strcpy(ptr_sap->name, "\0");
ptr_sap->recv_cb = NULL;
}
tcp_sap_t *tcp_sap_get_by_index(int index)
{
if(index < 0 || index >= TCP_MAX_NUM_OF_SAP)
return NULL;
return &tcp_sap[index];
}
void tcp_init(void)
{
WORD i;
for(i = 0; i < TCP_MAX_NUM_OF_SAP; i++)
{
tcp_sap_init(&tcp_sap[i], (BYTE)i);
}
for(i = 0; i < TCP_MAX_NUM_OF_PORT; i++)
{
tcp_port_init(i);
}
return;
}
void tcp_timer(void)
{
tcp_link_fsm();
tcp_port_recv_msg();
}
int tcp_bind(tcp_sap_t *ptr_sap)
{
BYTE i;
tcp_sap_t *ptr_tmp = NULL;
if((ptr_sap == NULL) || (ptr_sap->recv_cb == NULL))
{
return -1;
}
for(i = 0; i < TCP_MAX_NUM_OF_SAP; i++)
{
ptr_tmp = &tcp_sap[i];
if(ptr_tmp->recv_cb != NULL)
{
continue;
}
memcpy((BYTE*)ptr_tmp, ptr_sap, sizeof(tcp_sap_t));
ptr_tmp->id = i;
ptr_tmp->name[TCP_MAX_USER_NAME_LEN-1] = '\0';
return i;
}
return -1;
}
int tcp_unbind(tcp_sap_t *ptr_sap, BYTE index)
{
if((ptr_sap == NULL) || (index >= TCP_MAX_NUM_OF_SAP))
{
return -1;
}
if(ptr_sap->id != index)
{
return -1;
}
tcp_sap_init(ptr_sap, index);
return 0;
}