[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tyndur-devel] [PATCH] tcpip: SYN-ACK-Timeout-TODO + Clientportoverflow
+ tcpip: Verbindung wird bei SYN-ACK-Timeout
getrennt.
+ tcpip: Die if-Abfrage in tcp_get_free_port()
soll ein Overflow der Clientports
verhindern (damit Ports wie 80 oder 21
nicht aus Versehen belegt werden).
---
src/modules/tcpip/tcp.c | 22 +++++++++++++++++++---
1 files changed, 19 insertions(+), 3 deletions(-)
diff --git a/src/modules/tcpip/tcp.c b/src/modules/tcpip/tcp.c
index 84d272a..061ceb9 100644
--- a/src/modules/tcpip/tcp.c
+++ b/src/modules/tcpip/tcp.c
@@ -81,6 +81,9 @@ static word tcp_get_free_port(void)
{
// FIXME
static word source_port = 32768;
+ if (source_port > 65500) { //Bisschen Platz lassen
+ source_port = 32768;
+ }
return source_port++;
}
@@ -183,6 +186,7 @@ struct tcp_connection* tcp_open_connection(dword ip, word port)
{
struct routing_entry* route = get_routing_entry(ip);
uint64_t timeout;
+ int tcp_list_size, i;
if (route == NULL) {
return NULL;
@@ -218,7 +222,19 @@ struct tcp_connection* tcp_open_connection(dword ip, word port)
}
if (conn->status == TCPS_WAIT_FOR_SYN_ACK) {
- // TODO Verbindung abbrechen und wieder freigeben
+ tcp_send_reset(conn);
+ tcp_list_size = list_size(tcp_connections);
+ for (i = 0; i < tcp_list_size; i++) //Geht alle Elemente durch, es könnte ja sein, dass conn jetzt nicht mehr das erste Element ist
+ {
+ if (list_get_element_at(tcp_connections, i) == conn) {
+ list_remove(tcp_connections, i); //Hoffen wir mal, dass in der Zwischenzeit (von list_get_element_at() bis hier) nichts gepusht wurde
+ break;
+ }
+ }
+ list_destroy(conn->out_buffer);
+ list_destroy(conn->in_buffer);
+ list_destroy(conn->to_lostio);
+ free(conn);
DEBUG_MSG("Timeout beim Verbindungsaufbau");
return NULL;
}
@@ -290,7 +306,7 @@ dword tcp_check_in_data_order(struct tcp_connection* conn)
}
v();
- DEBUG_MSG1("Verbleibende Segemnte im in-Buffer: %d",
+ DEBUG_MSG1("Verbleibende Segmente im in-Buffer: %d",
list_size(conn->in_buffer));
@@ -378,7 +394,7 @@ void tcp_receive(dword source_ip, void* data, dword data_size)
printf("\033[1;31mTCP-Checksumme ungueltig\n\033[0;37m\n\n");
- printf("\033[1;31mTCP-Checksumme ungueltig\n\033[0;37m\n\n");
+ //printf("\033[1;31mTCP-Checksumme ungueltig\n\033[0;37m\n\n");
#if 0
debug_checksum = TRUE;
--
1.6.0.2