Viết hàm khởi tạo các biến cho giao thức TCP: Code:

Một phần của tài liệu ATMEGA32 GIAO TIẾP VỚI ENC28J60 QUA SPI – AVR WEBSERVER (Trang 77)

- Đầu tiên ta cộng các từ 16 bit trong header: Code:

Viết hàm khởi tạo các biến cho giao thức TCP: Code:

Hàm tìm kiếm 1 phiên TCP đang rỗi trong bảng TCP session table (để mở kết nối mới)

//--- ---

//Tim mot session TCP dang roi unsigned char TCPGetFreeSession(){

unsigned char i;

for(i=0; i<TCP_MAX_SESSION; i++){

if (tcpSessionTable[i].sesState == TCP_STATE_CLOSED) return i;

}

//no free closed socket fount! -> kick an TIMED_WAIT socket for(i=0; i<TCP_MAX_SESSION; i++){

if (tcpSessionTable[i].sesState == TCP_STATE_TIMED_WAIT){ TCPCloseSession(i);

return i; }

}

//no more free sockets ... return invalid val return(TCP_MAX_SESSION);

}

}

//--- ---

//Ham khoi tao mot session TCP o che do server de cho ket noi

void TCPCreateSession(unsigned int sourcePort, prog_void* appService) { unsigned char i; i = TCPGetFreeSession(); if(i >= TCP_MAX_SESSION) i = 0; //force session 0 tcpSessionTable[i].srcPort = sourcePort;

tcpSessionTable[i].sesState = TCP_STATE_LISTEN; //Current state of TCP session

tcpSessionTable[i].srcWin = 8192;//NETSTACK_BUFFERSIZE - ETH_HEADER_LEN - IP_HEADER_LEN - TCP_HEADER_LEN - 16;

tcpSessionTable[i].desWin = tcpSessionTable[i].srcWin;

tcpSessionTable[i].timeOut = TCP_TIMEOUT; //Session time out

Một phần của tài liệu ATMEGA32 GIAO TIẾP VỚI ENC28J60 QUA SPI – AVR WEBSERVER (Trang 77)