Skip to content

Commit 22bf3f7

Browse files
1 parent c39f930 commit 22bf3f7

File tree

3 files changed

+57
-18
lines changed

3 files changed

+57
-18
lines changed

src/drivers/amd_am79c973.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,8 @@ void amd_am79c973::Send(uint8_t* buffer, int size)
173173
src >= buffer; src--, dst--)
174174
*dst = *src;
175175

176-
printf("\nSENDING: ");
177-
for(int i = 0; i < (size>64?64:size); i++)
176+
printf("\nSEND: ");
177+
for(int i = 14+20; i < (size>64?64:size); i++)
178178
{
179179
printfHex(buffer[i]);
180180
printf(" ");
@@ -190,7 +190,7 @@ void amd_am79c973::Send(uint8_t* buffer, int size)
190190

191191
void amd_am79c973::Receive()
192192
{
193-
printf("\nRECEIVING: ");
193+
printf("\nRECV: ");
194194

195195
for(; (recvBufferDescr[currentRecvBuffer].flags & 0x80000000) == 0;
196196
currentRecvBuffer = (currentRecvBuffer + 1) % 8)
@@ -205,7 +205,7 @@ void amd_am79c973::Receive()
205205

206206
uint8_t* buffer = (uint8_t*)(recvBufferDescr[currentRecvBuffer].address);
207207

208-
for(int i = 0; i < (size>64?64:size); i++)
208+
for(int i = 14+20; i < (size>64?64:size); i++)
209209
{
210210
printfHex(buffer[i]);
211211
printf(" ");

src/kernel.cpp

+23-4
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,26 @@ class PrintfTCPHandler : public TransmissionControlProtocolHandler
171171
printf(foo);
172172
}
173173

174+
175+
176+
if(size > 9
177+
&& data[0] == 'G'
178+
&& data[1] == 'E'
179+
&& data[2] == 'T'
180+
&& data[3] == ' '
181+
&& data[4] == '/'
182+
&& data[5] == ' '
183+
&& data[6] == 'H'
184+
&& data[7] == 'T'
185+
&& data[8] == 'T'
186+
&& data[9] == 'P'
187+
)
188+
{
189+
socket->Send((uint8_t*)"HTTP/1.1 200 OK\r\nServer: MyOS\r\nContent-Type: text/html\r\n\r\n<html><head><title>My Operating System</title></head><body><b>My Operating System</b> http://www.AlgorithMan.de</body></html>\r\n",184);
190+
socket->Disconnect();
191+
}
192+
193+
174194
return true;
175195
}
176196
};
@@ -353,16 +373,15 @@ extern "C" void kernelMain(const void* multiboot_structure, uint32_t /*multiboot
353373

354374
interrupts.Activate();
355375

356-
printf("\n\n\n\n\n\n\n\n\n\n");
376+
printf("\n\n\n\n");
357377

358378
arp.BroadcastMACAddress(gip_be);
359379

360380

361-
tcp.Connect(gip_be, 1234);
362381
PrintfTCPHandler tcphandler;
363-
TransmissionControlProtocolSocket* tcpsocket = tcp.Connect(gip_be, 1234);
382+
TransmissionControlProtocolSocket* tcpsocket = tcp.Listen(1234);
364383
tcp.Bind(tcpsocket, &tcphandler);
365-
tcpsocket->Send((uint8_t*)"Hello TCP!", 10);
384+
//tcpsocket->Send((uint8_t*)"Hello TCP!", 10);
366385

367386

368387
//icmp.RequestEchoReply(gip_be);

src/net/tcp.cpp

+30-10
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,10 @@ bool TransmissionControlProtocolSocket::HandleTransmissionControlProtocolMessage
4545

4646
void TransmissionControlProtocolSocket::Send(uint8_t* data, uint16_t size)
4747
{
48-
backend->Send(this, data, size);
48+
while(state != ESTABLISHED)
49+
{
50+
}
51+
backend->Send(this, data, size, PSH|ACK);
4952
}
5053

5154
void TransmissionControlProtocolSocket::Disconnect()
@@ -78,10 +81,10 @@ TransmissionControlProtocolProvider::~TransmissionControlProtocolProvider()
7881

7982
uint32_t bigEndian32(uint32_t x)
8083
{
81-
return (x & 0xFF000000) >> 24
82-
| (x & 0x00FF0000) >> 8
83-
| (x & 0x0000FF00) << 8
84-
| (x & 0x000000FF) << 24;
84+
return ((x & 0xFF000000) >> 24)
85+
| ((x & 0x00FF0000) >> 8)
86+
| ((x & 0x0000FF00) << 8)
87+
| ((x & 0x000000FF) << 24);
8588
}
8689

8790

@@ -103,7 +106,7 @@ bool TransmissionControlProtocolProvider::OnInternetProtocolReceived(uint32_t sr
103106
if( sockets[i]->localPort == msg->dstPort
104107
&& sockets[i]->localIP == dstIP_BE
105108
&& sockets[i]->state == LISTEN
106-
&& ((msg -> flags) & (SYN | ACK) == SYN))
109+
&& (((msg -> flags) & (SYN | ACK)) == SYN))
107110
socket = sockets[i];
108111
else if( sockets[i]->localPort == msg->dstPort
109112
&& sockets[i]->localIP == dstIP_BE
@@ -198,7 +201,7 @@ bool TransmissionControlProtocolProvider::OnInternetProtocolReceived(uint32_t sr
198201
else if(socket->state == CLOSE_WAIT)
199202
{
200203
socket->state = CLOSED;
201-
return false;
204+
break;
202205
}
203206

204207
if(msg->flags == ACK)
@@ -214,7 +217,11 @@ bool TransmissionControlProtocolProvider::OnInternetProtocolReceived(uint32_t sr
214217
size - msg->headerSize32*4));
215218
if(!reset)
216219
{
217-
socket->acknowledgementNumber += size-msg->headerSize32*4;
220+
int x = 0;
221+
for(int i = msg->headerSize32*4; i < size; i++)
222+
if(internetprotocolPayload[i] != 0)
223+
x = i;
224+
socket->acknowledgementNumber += x - msg->headerSize32*4 + 1;
218225
Send(socket, 0,0, ACK);
219226
}
220227
}
@@ -230,8 +237,21 @@ bool TransmissionControlProtocolProvider::OnInternetProtocolReceived(uint32_t sr
230237

231238
if(reset)
232239
{
233-
234-
return true;
240+
if(socket != 0)
241+
{
242+
Send(socket, 0,0, RST);
243+
}
244+
else
245+
{
246+
TransmissionControlProtocolSocket socket(this);
247+
socket.remotePort = msg->srcPort;
248+
socket.remoteIP = srcIP_BE;
249+
socket.localPort = msg->dstPort;
250+
socket.localIP = dstIP_BE;
251+
socket.sequenceNumber = bigEndian32(msg->acknowledgementNumber);
252+
socket.acknowledgementNumber = bigEndian32(msg->sequenceNumber) + 1;
253+
Send(&socket, 0,0, RST);
254+
}
235255
}
236256

237257

0 commit comments

Comments
 (0)