Startpunkten

This commit is contained in:
2026-03-05 13:35:06 +01:00
commit fd04d44e12
7 changed files with 595 additions and 0 deletions

213
s_stub.c Normal file
View File

@@ -0,0 +1,213 @@
/* ***************************************** */
/* Laboration 2 i Datakommunikation 2 */
/* RPC-lib */
/* ***************************************** */
/* s_stub.c */
/* Ansvarar för att operationer utförs */
/* utförs på rätt sätt i servern */
/* ***************************************** */
/* Christian Ohlsson, di7chro@cse.kau.se */
/* Stefan Sonesson, di7stes@cse.kau.se */
/* ***************************************** */
#include "header.h"
/* Globala variabler */
int data_sockfd; /* Den socket som data färdas på */
msg myMsg; /* Meddelandet som funktionerna fyller i */
/* ==============================================
printsin()
Skriver ut information om klienten
============================================== */
printsin(struct sockaddr_in *sin, char *m1, char *m2 ) {
struct hostent *gethostbyaddr(), *h;
printf ("%s %s\n", m1, m2);
printf ("Family %d addr %x port %d\n", sin -> sin_family,
ntohl(sin -> sin_addr.s_addr), ntohs(sin -> sin_port));
h = gethostbyaddr((char *)&sin->sin_addr, sizeof(int), AF_INET);
printf ("Symbolic host name <%s>\n",h->h_name);
}
/* ==============================================
rem_open()
Öppnar en fil och fyller i data såsom
längd och fildeskriptor i strukten.
============================================== */
void rem_open() {
int fd;
struct stat st;
if((fd = open(myMsg.path, O_CREAT|O_RDWR|O_APPEND, PERMS)) < 0) {
myMsg.op = OPN; /* Skicka fel till klient */
return;
}
fstat(fd, &st);
myMsg.length = st.st_size;
myMsg.op = OPP; /* Operationen gick bra */
myMsg.fd = fd;
}
/* ==============================================
rem_read()
Läser data ur en fil tills EOF tecknet nås och
dessa tecken stoppas i en buffer, som slutligen
returneras
============================================== */
char *rem_read() {
char *buf;
int fd;
lseek(myMsg.fd, 0, SEEK_SET);
buf = (char*)malloc(myMsg.length);
if((read(myMsg.fd, buf, myMsg.length)) < 0)
myMsg.op = RDN; /* Skicka fel till klient */
else
myMsg.op = RDP; /* Operationen gick bra */
return buf;
}
/* ==============================================
rem_write()
Skriver tecken till fil
============================================== */
void rem_write() {
if((write(myMsg.fd, myMsg.data, myMsg.length)) < 0)
myMsg.op = WRN; /* Skicka fel till klient */
else
myMsg.op = WRP; /* Operationen gick bra */
}
/* ==============================================
rem_delete()
Tar bort en fil mha unlink, som egentligen
räknar ner antalet länkar till en fil
============================================== */
int rem_delete() {
if((unlink(myMsg.path)) < 0) {
myMsg.op = DLN; /* Skicka fel till klient */
return 0;
}
else {
myMsg.op = DLP; /* Operationen gick bra */
return 1;
}
}
/* ==============================================
rem_close()
Stänger en fil.
Returnerar svar om hur det gick
============================================== */
int rem_close() {
if((close(myMsg.fd)) < 0) {
myMsg.op = CLN; /* Skicka fel till klient */
return 0;
}
else {
myMsg.op = CLP; /* Operationen gick bra */
return 1;