Skip to content

Commit 2fa00c2

Browse files
committed
implementation IRC
1 parent 06329c6 commit 2fa00c2

File tree

21 files changed

+648
-603
lines changed

21 files changed

+648
-603
lines changed

SanderOSUSB.0

0 Bytes
Binary file not shown.

boot/pxe/pxeentry.bin

0 Bytes
Binary file not shown.

cdrom.iso

0 Bytes
Binary file not shown.

include/symbols.h

+262-262
Large diffs are not rendered by default.

kernel.bin

0 Bytes
Binary file not shown.

kernel/dev/ethernet.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ void fillTcpHeader(struct TCPHeader *tcpheader,unsigned char *destmac,unsigned s
210210
if(sequence_number==0x1010&&acknowledge_number==0x1010){
211211
sequence_number = taaaX;
212212
acknowledge_number = taaaY;
213-
}else{
213+
}else if(flags&TCP_ACK){
214214
taaaX = sequence_number;
215215
taaaY = acknowledge_number;
216216
}
@@ -226,7 +226,7 @@ void fillTcpHeader(struct TCPHeader *tcpheader,unsigned char *destmac,unsigned s
226226
int payload = ( size - (sizeof(struct TCPHeader) - sizeof(struct EthernetHeader)) );
227227
unsigned char *start = (unsigned char*)malloc(sizeof(struct tcp_checksum_header) + payload);
228228
unsigned char *end = start;
229-
end += (sizeof(struct tcp_checksum_header) + payload);
229+
end += (sizeof(struct tcp_checksum_header));
230230

231231
struct tcp_checksum_header* trx = (struct tcp_checksum_header*)start;
232232
trx->dst = (to);

kernel/hal/i386/interrupts.c

+20-5
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ void special_handler(Register *r){
320320
unsigned char* addr = (unsigned char*) r->edx;
321321
unsigned int loca = r->esi;
322322
unsigned int port = r->edi;
323-
debugf("INT0x80: SENDNETWORKPACKAGE type=%x size=%x to=%d:%d:%d:%d where=%x port=%x\n",type,size,addr[0],addr[1],addr[2],addr[3],loca,port);
323+
debugf("INT0x80: SENDNETWORKPACKAGE type=%x size=%x to=%d.%d.%d.%d where=%x port=%x\n",type,size,addr[0],addr[1],addr[2],addr[3],loca,port);
324324

325325
unsigned char macaddrto[SIZE_OF_MAC];
326326
unsigned char* m1;
@@ -340,16 +340,31 @@ void special_handler(Register *r){
340340

341341
int calbuffersize = sizeof(struct TCPHeader)+size;
342342
void *pnt = (void*) malloc(calbuffersize);
343-
struct TCPHeader *udp = (struct TCPHeader*) pnt;
343+
struct TCPHeader *tcp = (struct TCPHeader*) pnt;
344344
unsigned char* from = (unsigned char*) pnt;
345345
unsigned char* to = (unsigned char*) loca;
346346
for(int i = 0 ; i < size ; i++){
347347
from[sizeof(struct TCPHeader)+i] = to[i];
348-
debugf("%c ",to[i]);
349348
}
350-
debugf("\n");
351349

352-
fillTcpHeader(udp,(unsigned char*)&macaddrto,calbuffersize-sizeof(struct EthernetHeader),getOurIpAsLong(),((unsigned long*) r->edx)[0],port,port,0x1010,0x1010,5,TCP_PUS | TCP_ACK,0xffd7);
350+
fillTcpHeader(tcp,(unsigned char*)&macaddrto,calbuffersize-sizeof(struct EthernetHeader),getOurIpAsLong(),((unsigned long*) r->edx)[0],port,port,0x1010,0x1010,5,TCP_PUS | TCP_ACK,64240);
351+
352+
unsigned short* tw = (unsigned short*) loca;
353+
unsigned int z = 0;
354+
for(int i = 0 ; i < (size/2) ; i++){
355+
unsigned short qw = switch_endian16(tw[i]);
356+
z += qw;
357+
}
358+
359+
unsigned short checksum_old = switch_endian16(~tcp->checksum);
360+
unsigned int checksum_comp = checksum_old + z;
361+
unsigned int checksum = (checksum_comp & 0xffff) + (checksum_comp >> 16);
362+
checksum += (checksum >> 16);
363+
364+
unsigned short final = ~checksum;
365+
366+
unsigned short chsm = switch_endian16(final);
367+
tcp->checksum = chsm;
353368

354369
PackageRecievedDescriptor prd;
355370
prd.buffersize = calbuffersize;

kernel/kernel.h

+2
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,8 @@ void fillUdpHeader(struct UDPHeader *udpheader, unsigned char *destmac, unsigned
560560
void fillTcpHeader(struct TCPHeader *tcpheader,unsigned char *destmac,unsigned short size,unsigned long from,unsigned long to,unsigned short from_port,unsigned short to_port,unsigned long sequence_number,unsigned long acknowledge_number,unsigned char header_length,unsigned short flags,unsigned short window);
561561
unsigned long getOurIpAsLong();
562562
PackageRecievedDescriptor getEthernetPackage();
563+
unsigned short switch_endian16(unsigned short nb);
564+
unsigned long switch_endian32(unsigned long num);
563565

564566
typedef struct {
565567
unsigned char bRequestType;

kernel/myos.bin

0 Bytes
Binary file not shown.

lib/libsos.a

0 Bytes
Binary file not shown.

programs/basic.bin

0 Bytes
Binary file not shown.

programs/basic/basic

0 Bytes
Binary file not shown.

programs/basic/basic.o

0 Bytes
Binary file not shown.

programs/irc.bin

-28 Bytes
Binary file not shown.

programs/irc/irc

-28 Bytes
Binary file not shown.

programs/irc/irc.c

+34-6
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66

77
#define DEFAULT_IRC_PORT 6667
88
#define DEFAULT_IRC_ADDR "chat.freenode.net"
9+
#define MESSAGEBUFFER 25
910

10-
volatile unsigned char w1 = 0;
11+
unsigned char *addressip;
1112

1213
unsigned char* getIPFromName(char* t);
1314

@@ -19,15 +20,42 @@ void recievemessage(unsigned long addr,unsigned long count){
1920
write(1, (const char *)&t, 1);
2021
}
2122

22-
void sendUsername(char* username){}
23-
void sendNickname(char* nickname){}
23+
char* getline(){
24+
char* message = malloc(MESSAGEBUFFER);
25+
int i = 0;
26+
for(i = 0 ; i < MESSAGEBUFFER ; i++){
27+
unsigned char y = getc((FILE*)1) & 0x000000FF;
28+
message[i] = y;
29+
write(1, (void *)&message[i], 1);
30+
if(y=='\n'){
31+
message[i+1] = 0;
32+
break;
33+
}
34+
}
35+
message[i+1] = 0;
36+
return message;
37+
}
2438

2539
int main(int argc, char** argv){
2640
printf("welcome to our irc client\n");
27-
unsigned char *t = getIPFromName(DEFAULT_IRC_ADDR);//(unsigned char*) DEFAULT_IRC_ADDR;
41+
addressip = getIPFromName(DEFAULT_IRC_ADDR);
42+
unsigned char t4[SIZE_OF_IP];
43+
t4[0] = addressip[0];
44+
t4[1] = addressip[1];
45+
t4[2] = addressip[2];
46+
t4[3] = addressip[3];
2847
int tx = 0x00200000;
29-
initialisenetworkpackage(2,1,t,tx,DEFAULT_IRC_PORT);
30-
for(;;);
48+
initialisenetworkpackage(2,1,addressip,tx,DEFAULT_IRC_PORT);
49+
while(1){
50+
char *z = getline();
51+
size_t sizeline = strlen(z);
52+
sendnetworkpackage(2,sizeline,(unsigned char*)&t4,(int)z,DEFAULT_IRC_PORT);
53+
free(z);
54+
unsigned char t[2];
55+
t[0] = '\n';
56+
t[1] = 0x00;
57+
write(1, (const char *)&t, 1);
58+
}
3159
return EXIT_SUCCESS;
3260
}
3361

programs/irc/irc.o

448 Bytes
Binary file not shown.

programs/sedit.bin

0 Bytes
Binary file not shown.

programs/sedit/sedit

0 Bytes
Binary file not shown.

programs/sedit/sedit.o

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)